Estoy bastante confundido acerca de cómo funcionan las operaciones de multiplicación y división en el ensamblaje x86. Por ejemplo, el código siguiente no parece demasiado difícil ya que se trata de 8 bits.x86 ensamblar multiplicar y dividir operandos de instrucción, 16 bits y superior
de 8 bits Multiplicación:
; 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
¿Pero qué sucede cuando se quiere multiplicar dos números de 16 bits? ¿Cómo se podrían multiplicar dos números de 16 bits de la misma manera que se ha hecho con los números de 8 bits?
No estoy seguro de en qué registros se almacenarán los valores. ¿Se almacenarán en AL y AH o simplemente almacenaría el número de 16 bits en AX. Para mostrar lo que quiero decir:
; 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
¿Podría alguien explicar un poco sobre cómo funciona la multiplicación y la división? (En concreto con números de 16 bits y 32 bits? ¿Me necesite girar bits de si los valores se almacenan en la AL inferior y AH?
O puedo uno simplemente mov num1
y num2
en ax
y bx
respectivamente y luego multiplicarlos para obtener el producto en eax
¿usted intentó leer el [documenta ción] (http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)? –