son repertorio registros que las instruction instrucciones ensamblador conjunto 80x86 assembly x86 division multiplication

assembly - repertorio - registros de 64 bits



ensamblaje x86 multiplicar y dividir operandos de instrucción, de 16 bits y superior (1)

Un vistazo rápido a la documentación muestra que hay 4 tamaños de operandos posibles para MUL . Las entradas y salidas se resumen en una tabla práctica:

------------------------------------------------------ | Operand Size | Source 1 | Source 2 | Destination | ------------------------------------------------------ | Byte | AL | r/m8 | AX | | Word | AX | r/m16 | DX:AX | | Doubleword | EAX | r/m32 | EDX:EAX | | Quadword | RAX | r/m64 | RDX:RAX | ------------------------------------------------------

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.

Multiplicación de 8 bits:

; 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 quieres 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?

Estoy confundido en cuanto a qué registros se almacenarían los valores. ¿Se almacenarían 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? (específicamente con números de 16 bits y 32 bits) ¿Tendría que rotar bits si los valores están almacenados en el AL y AH inferior?

¿O puede simplemente mov num1 y num2 en ax y bx respectivamente y luego multiplicarlos para obtener el producto en eax ?