Multiplicación en lenguaje ensamblador

Para la multiplicación, la instrucción MUL maneja datos sin signo y la instrucción IMUL (multiplicación entera) maneja datos con signo. Ambas instrucciones afectan las banderas de acarreo y de desbordamiento. Como programador, usted tiene el control sobre el formato de los datos que procesa, y tiene la responsabilidad de seleccionar la instrucción de multiplicación apropiada. El formato general de MUL e IMUL es:

|   [etiqueta:]  |  MUL/IMUL  |  registro/memoria  |

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

Byte por byte

Para multiplicar dos números de un byte, el multiplicando esta en el registro AL y el multiplicador es un byte en memoria o en otro registro. Para la instrucción MUL DL, la operación multiplica el contenido del AL por el contenido del DL. El producto generado esta en el registro AX. La operación ignora y borra cualquier información que pueda estar en el AH.


Palabra por palabra

Para multiplicar dos números de una palabra, el multiplicando esta en el registro AX y el multiplicador es una palabra en memoria o en otro registro. Para la instrucción MUL DX, la operación multiplica el contenido del AX por el contenido del DX. El producto generado es una palabra doble que necesita dos registros: la parte de orden alto (mas a la izquierda) en el DX y la parte de orden bajo (mas a la derecha) en el AX. La operación ignora y borra cualquier información que puede estar en el DX.


Palabra doble por palabra doble

Para multiplicar dos números de palabras dobles, el multiplicando esta en el registro EAX y el multiplicador es una palabra doble en memoria o en otro registro. El producto es generado en el par EDX:EAX. La operación ignora y borra cualquier información que ya este en el EDX.


En los ejemplos siguientes, el multiplicador esta en un registro, el cual especifica el tipo de operación:

INSTRUCCION        MULTIPLICADOR        MULTIPLICANDO        PRODUCTO

MUL CL                    byte                                              AL                               AX
MUL BX                   palabra                                         AX                              DX:AX
MUL EBX                 palabra doble                              EAX                           EDX:EAX

En los ejemplos siguientes, los multiplicadores están definidos en memoria:

BYTE1        DB        ?
WORD1      DW       ?
DWORD1   DD        ?

OPERACION        MULTIPLICADOR        MULTIPLIANDO        PRODUCTO

MUL  BYTE1                BYTE1                            AL                      AX
MUL  WORD1             WORD1                          AX                      DX:AX
MUL  DWORD1          DWORD1                       EAX                    EDX:EAX