Sono piuttosto confuso su come le operazioni di moltiplicazione e divisione funzionano nell'assemblaggio x86. Ad esempio, il codice sottostante non sembra troppo difficile dal momento che si occupa di 8 bit.l'assembly x86 si moltiplica e divide gli operandi dell'istruzione, 16-bit e superiore
8-Bit Moltiplicazione:
; 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
Ma cosa succede quando si vuole moltiplicare due numeri a 16 bit? Come si possono moltiplicare due numeri a 16 bit nello stesso modo in cui è stato fatto con i numeri a 8 bit?
Sono confuso su cosa registri i valori in cui verrebbero memorizzati. Verranno memorizzati in AL e AH oppure memorizzerà semplicemente il numero a 16 bit in AX. Per mostrare cosa intendo:
; 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
Qualcuno potrebbe elaborare un po 'su come il moltiplicatore e opere di divisione? (In particolare con i numeri 16 bit e 32 bit? Dovrei ruotare bit se i valori sono memorizzati nella inferiore AL e AH?
o si può semplicemente mov num1
e num2
in ax
e bx
rispettivamente e quindi le moltiplica per ottenere il prodotto in eax
avete provato a leggere il [documenta zione] (http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)? –