Multiplicación en Ensamblador X86

Josué Acevedo Maldonado
Nabucodonosor Editorial
3 min readApr 29, 2020

Como multiplicar en ensamblador.

Photo by Gayatri Malhotra on Unsplash

La instrucción MUL (multiplicación) permite realizar la operación de multiplicación entre un registro implícito y un operando fuente, siendo estos dos datos enteros sin signo. En tanto la instrucción IMUL se encarga de los datos que presentan signo. Ambas instrucciones modifican las banderas de acarreo y de desbordamiento.

MUL fuenteIMULT fuente

Los registros A y D participan de forma implícita en la operación, ambos con el mismo tamaño que el registro fuente, si el multiplicador es un registro de cuatro bytes (32 bits) el registro que se toma como multiplicando implícito será el registro EAX cuyo tamaño es de 32 bits, el resultado de la multiplicación se almacenara en el par de registros EDX para la parte alta y EAX para la parte baja, ambos de 32 bits.

El único caso en el que no es usado el registro D para almacenar la parte alta del resultado, es donde el multiplicador es de un byte (ocho bits) el registro que se toma como multiplicando implícito en este caso será el registro AL, el resultado de la operación será un dato que requerirá de 16 bits para ser almacenado por lo que la parte alta del número se guardara en el registro AH mientras que la parte baja lo hará en el registro AL.

Registro fuente de 8 bits
AL× fuente = AH : AL
Registro fuente de 16 bits
AX × fuente = DX : AX
Registro fuente de 32 bits
EAX × fuente = EDX : EAX
Registrofuente de 64 bits
RAX × f uente = RDX : RAX
segment .data
msg6 db 0xA,0xD,"el resultado es: "
len6 equ $- msg6
segment .bss
res resb 1
section .text
global _start
_start:
mov ebx, 3 ; en ebx que es un registro de 32 bits
; se almacena el número tres
mov eax, 2 ; en el registro eax se almacena el número dos
mul ebx ; se realiza la multiplicacion (eax*ebx)
; en eax se almacenara la parte baja del resultado de la
; multiplicación (cuyo valor es 6)
; y en edx se almacenara la parte alta (cuyo valor es 0)
add eax, 48
mov [res], eax
mov eax, 4
mov ebx, 1
mov ecx, msg6
mov edx, len6
int 0x80

mov eax, 4
mov ebx, 1
mov ecx, res
mov edx, 1
int 0x80
salir:
mov eax, 1
mov ebx, 0
int 0x80

la salida en pantalla de este programa es:

/code # nasm -f elf multiplicacion.asm/code # ld -m -o elf_i386 multiplicacion multiplicacion.o/code # ./multiplicacion
el resultado es: 6/code #

Josue Acevedo Maldonado es ingeniero de software, trabaja actualmente como consultor.

Conectarse en LinkedIn.

¡Gracias por ser parte de la comunidad!
Puede encontrar contenido relacionado en el canal de YouTube, Twitter, Twitch, Spotify, etc, ademas del libro Ensamblador X86.

Si ha disfrutado de este artículo y siente que ha aprendido algo valioso, por favor compártalo.

¡Gracias por leer!

--

--

Josué Acevedo Maldonado
Nabucodonosor Editorial

Amante de la tecnologia y con pasion en resolver problemas interesantes, consultor, y creador del canal de youtube NEOMATRIX. https://linktr.ee/neomatrix