Assembler MUL und DIV

Gast #139427
Lesenswert?

Hallo,
da krieg ich noch was nicht hin:
-Wie können Sie eine 8 Bit Zahl mit 2 oder 4 multiplizieren, ohne den
langsamen Befehl MUL AB zu verwenden?
-Wie können sie eine 8 Bit Zahl durch 8 dividieren ohne den Befehl DIV
AB zu verwenden?

Wäre toll, nochmals so super Hilfe zu kriegen wie bei meinen letzten
"Problemen".

Schon mal ein ganz herzliches Dánkeschön!

Anja
Gast #139428
Lesenswert?

Bei Potenzen von 2 kann man sich mit den Shift-Befehlen zur
Multiplikation bzw. Division behelfen. Wichtig ist dann natürlich zu
bedenken, dass die Zahl aus dem Wertebereich des Registers rauslaufen
kann.

PS: iss nich ein wenig spät für Hausaufgaben g
Gast #139429
Lesenswert?

Immer diese Hausaufgaben...

Wie machste das denn dezimal, wenn du eine Zahl mit einer Zehnerpotenz
multiplizieren musst oder durch eine Zehnerpotenz dividieren musst? Ich
schiebe da nur am Komma...

Und deine Beispiele sind Zweierpotenzen, Dualzahlen haben die Basis 2.

...
Gast #139430
Lesenswert?

Konkret kann man das bei den 8051´ern mit den Befehlen "RRC A" und
"RLC A" machen (Rotate right/left trough Carry).
Bei den 8051´ern gibt es leider keine Shift-Befehle welche einfach eine
0 an die freie Stelle setzen.
Berichtigt mich wenn ich mich irre!

Multiplikation mit 2:
 CLR C   ;Carry-Flag löschen
 RLC A   ;Akku durch links rotieren verdoppeln (*2)

Für A*4 einfach das ganze 2 mal und A*8 3 mal.
3 mal verdoppeln = * 8 (2, 4, 8, 16, 32...)

Division:
 CLR C   ;Carry-Flag löschen
 RRC A   ;Akku durch rechts rotieren halbieren (/2)

Da auch für A/4 das ganze 2 mal und A/8 3 mal.
3 mal halbieren = / 8

Gruß
Andi
Gast #139432
Lesenswert?

Danke schön!!!!
Sind keine "Hausaufgaben", bin dabei, alte Prüfungen durchzumachen.
Mit programmieren steh' ich leider immer noch etwas auf Kriegsfuß.
Gibt's denn nicht für einige Dinge vorgefertigte Puzzleteile, die man
dann einfach wieder zusammensetzt?
Guten Start in den Montag!!
Anja
Gast #139433
Lesenswert?

ES ist so eine Sache, mit vorgefertigten Dingen.....
Erstens muß man sie verstehen und nachvollziehen können und Zweitens
lernt man dabei nichts.
Codeschnipsel gibt's zu Hauf - z. B. unter "Codesammlung".
Aber da schlägt dann gaaaanz schnell der Fehlerteufel zu - wegen meiner
anfänglichen Bemerkung.......
Das Beste ist, sich aus eigenen oder nachvollzogenen Codes eine eigene
Bibliothek anzulegen und die dann, angepasst auf das Projekt, zu
verwenden.
Gast #139434
Lesenswert?

Soo langsam ist "MUL AB" nun auch wieder nicht (4 Zyklen).

Und *4 ist auch nur dann schneller, wenn man kein 16 Bit Ergebnis
braucht, d.h. die Zahl <64 ist:

ADD A, ACC ;*2
ADD A, ACC ;*2

= 2 Zyklen

/ 4 dauert 3 Zyklen:

RRC A
RRC A
ANL A, #03Fh


Peter
Gast #139435
Lesenswert?

>Soo langsam ist "MUL AB" nun auch wieder nicht

Kommt auf den Prozessor an. Der 8086 hat für eine Multiplikation unter
Anwendung von "MUL" mindestens 70 Takte (8-bit Multiplikation)
gebraucht, das Schieben hingegen war nach 2 Takten erledigt.
Gast #139436
Lesenswert?

Ein ganz herzliches DANKE!!
Eine vielleicht etwas blöde Frage noch: Assembler, ist das für jeden µC
gleich, oder gibt es da gravierende Unterschiede? Wir haben nämlcih nur
den 80C535.
Das war in Sachen Theorie vorerst die letzte Frage. Jetzt sind
Programme dran (C und Assembler).
Grüße
Anja
Gast #139437
Lesenswert?

Innerhalb einer µC-Familie sind die Befehle i. d. R. gleich, es können
jedoch mit zunehmender Leistungsfähigkeit der µC zusätzliche Befehle
hinzu kommen. Wenn du dann allerdings zu einem anderen Hersteller
wechselst, kriegst du schonmal die Krise. Z. B. der Befehlssatz der
PICs von Microchip ist teilweise schon sehr schräg. Da könnte man
meinen, man hat noch nie in Assembler programmiert. Vom 80535 habe ich
keine Ahnung, aber ich glaube der gehört zu den 8051er und deren
Befehlssatz ist wieder anders.

Gruß
Thorsten

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren