x86 assembly multiplizieren und dividieren-Anweisung Operanden, 16-bit und höher
Ich bin ziemlich verwirrt, wie das multiplizieren und dividieren Operationen in x86-assembly. Zum Beispiel, der folgende code scheint nicht allzu schwierig, da die Angebote mit 8-bit.
8-Bit-Multiplikation:
; User Input:
; [num1], 20
; [num2] , 15
mov ax, [num1] ; moves the 8 bits into AL
mov bx, [num2] ; moves the 8 bits into BL
mul bl ; product stored in AX
print ax
Aber was passiert, wenn Sie multiplizieren möchten zwei 16-bit-zahlen? Wie würde man multipliziert zwei 16-bit-zahlen, die der gleichen Weise, wie es getan wurde, mit den 8-bit-zahlen?
Ich bin verwirrt, was schreibt die Werte werden gespeichert. Würde Sie gespeichert werden, in AL und AH oder würde es Sie einfach speichern Sie die 16-bit-Zahl in AX. Um zu zeigen, was ich meine:
; User Input:
; [num1], 20
; [num2], 15
mov eax, [num1] ; Does this store the 16-bit number in AL and AH or just in AX
mov ebx, [num2] ; Does this store the 16-bit number in BL and BH or just in BX
mul ??? ; this register relies on where the 16-bit numbers are stored
print eax
Könnte jemand erarbeiten ein wenig auf, wie das multiplizieren und dividieren funktioniert? (insbesondere mit 16-bit und 32-bit-zahlen? Hätte ich drehen müssen, bits, wenn die Werte gespeichert sind, in die niedrigere AL-und AH?
Oder kann man einfach mov num1
und num2
in ax
und bx
jeweils und dann multiplizieren Sie das Produkt in eax
?
- Haben Sie versucht, Lesen Sie die Dokumentation?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen kurzen Blick auf die Dokumentation zeigt, dass es 4 möglich Operanden-Größen für
MUL
. Die ein-und Ausgänge zusammengefasst in einem handlichen Tabelle:mul
. Ich Frage mich, ob, wenn ich den Wert speichern ineax
(vormul
) wenn es speichert es in die unteren bits (AL und AH), anstatt die höheren bits (AX). Wenn Sie nicht speichern Sie in der unteren bits, bin ich in der Lage, Sie zu drehen, um AX und dann einfach multiplizieren AX und BX und drucken Sie sich die Antwort (ich glaube, es wäre in EAX)?eax
es in alleeax
. Ich bin mir nicht sicher, ob ich verstehe. Ich denke, man könnte verwirrend sein, welche Teile dereax
sindah
,al
, undax
auch. Sehen Sie den chart in Band 1 des gleichen Dokumentation. Insbesondereax
bezieht sich auf die gleichen 16 bit alsah:al
, nicht die "oberen" 16-biteax
.AX
durchBX
und mein Produkt sollte inEAX
?DX:AX
. Überprüfen Sie die Tabelle in meiner Antwort.OR
DX nicht beide. Letzte Frage, bevor ich akzeptiere Ihre Antwort: Also wenn ich das wollen, drucken Sie diese aus, würde ich verschieben in EAX DX drehen nach Links, und dann bewegen AX im als auch und print EAX?