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