División en lenguaje ensamblador

Para la división, la instrucción DIV (dividir) maneja datos sin signo y la IDIV (división entera) maneja datos con signo. Usted es responsable de seleccionar la instrucción apropiada. El formato general para DIV/IDIV es:

|  [etiqueta:]  |  IDIV/DIV  |  {registro/memoria}  |

Las operaciones de multiplicación básicas son byte entre byte, palabra entre palabra y palabras dobles entre palabra dobles.

Palabra entre palabra

Aquí el dividendo esta en el AX y el divisor es un byte en memoria o en otro registro. Después de la división, el residuo esta en el AH y el cociente esta en el AL. Ya que un cociente de un byte es muy pequeño -si es sin signo, un máximo de +255 (FFH) y con signo +127 (7FH)- esta operación tiene un uso limitado.

Palabra entre palabra

Palabra doble entre palabra

Para esta operación, el dividendo esta en el par DX:AX y el divisor es una palabra en memoria o en otro registro. Después de la división, el residuo esta en el DX y el cociente esta en el AX. El cociente de una palabra permite para datos sin signo un máximo de +32, 767 (FFFFH) y con signo +16, 383 (7FFFH). Tenemos:

Palabra doble entre palabra

Palabra cuádruple entre palabra doble

Al dividir una palabra cuádruple entre una palabra doble, el dividendo esta en el par EDX:EAX y el divisor esta en una palabra doble en memoria o en otro registro. Después de la división, el residuo esta en el EDX y el cociente en el AEX.

Palabra cuádruple entre palabra doble

En los ejemplos siguientes, de DIV, los divisores están en un registro, que determina el tipo de operación:

OPERACION        DIVISOR            DIVIDENDO        COCIENTE        RESIDUO

DIV  CL                 byte                       AX                        AL                     AH
DIV  CX                 palabra                 DX:AX                 Ax                     DX
DIV  EBX               palabra doble      EDX:EAX           EAX                  EDX

En los ejemplos siguientes de DIV, los divisores están definidos en memoria:

BYTE1        DB        ?
WORD1      DW       ?
DWORD1   DD        ?
                     …                        DIVISOR        DIVIDENDO    COCIENTE    RESIDUO

DIV BYTE1         BYTE1           AX                    AL                  AH
DIV WORD1      WORD1         DX:AX             AX                  DX
DIV DWORD1   DWORD1      EDX:EAX       EAX                EDX