División en Ensamblador X86

Josué Acevedo Maldonado
Nabucodonosor Editorial
3 min readMay 1, 2020

Como dividir en ensamblador.

Photo by Aaron Burden on Unsplash

La instrucción DIV (división) realiza la operación de división entre un registro implícito y un operando fuente, siendo ambos datos números enteros sin signo. Mientras que IDIV es utilizado para dividir dos números enteros con signo.

DIV fuente

IDIV fuente

Implícitamente intervienen en la división con y sin signo los registros A y D, los cuales manejaran en la operación el mismo número de bits que el registro fuente. Por lo que si el divisor presenta dos bytes (16 bits) los registros que trabajaran como dividendo de forma implícita serán los registros DX y AX, ambos de 16 bits, donde se almacenaran la parte alta y baja del dividendo respectivamente.

El resultado de la división se almacenará en el registro AX y el residuo en el registro DX. La única excepción a esta regla se presenta si el divisor es un registro de un byte (ocho bits), el registro que trabajara como dividendo implícito será AX, por lo que el resultado de la división se almacenara en el registro AL y el residuo en el registro AH.

Registro fuente de 8 bits___AH : AL_____
fuente
8 bits
Resultado -> AL
Residuo -> AH
Registro fuente de 16 bits___DX : AX____
fuente 16 bits
Resultado -> AX
Residuo -> DX
Registro fuente de 32 bits___EDX : EAX___
fuente 32 bits
Resultado -> EAX
Residuo -> EDX
Registro fuente de 64 bits___RDX : RAX___
fuente 64 bits
Resultado -> RAX
Residuo -> RDX
segment .data
msg6 db 0xA,0xD,"el resultado es: "
len6 equ $- msg6
segment .bss
res resb 1
section .text
global _start
_start:
mov bx, 2 ; en el registro bx se almacena el número 2
mov ax, 8 ; en el registro ax se almacena el número 8
mov dx, 0 ; el registro dx, que se toma de forma implícita
; como la parte alta del dividendo, almacena un cero
div bx ; se realiza la división (dx:ax / bx)
; en ax se almacenara el resultado de la división
; y en dx se almacenara el residuo
add ax, 48 ; conversión del dato entero a carácter
mov [res], ax
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 division.asm/code # ld -m -o elf_i386 dvision division.o/code # ./division
el resultado es: 4/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