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?

Schreibe einen Kommentar