Ensamblador - Multiplicación por una constante

Julio 2017

En lenguaje ensamblador podemos realizar una multiplicación utilizando las instrucciones mul (números sin signos) e imul.
Su sintaxis es la siguiente:

mul nombre_del_registro


El procesador multiplica internamente el valor almacenado en eax o ax o al (dependiendo del tamaño del registro dado como parámetro) luego guarda el resultado en eax o ax para la parte de menos peso del resultado y en edx o dx para la parte de mayor peso, si el registro pasado como parámetro de mul es superior a un byte.

El uso de mul es un poco complicado ya que es necesario desplazar el valor multiplicado a eax, el valor que se va a multiplicar a otro registro y el registro de resultado será necesariamente eax, lo que reemplaza al valor que poseía.

Sin embargo, si solo deseas multiplicar un registro por una constante y poner el resultado en el registro de tu elección, puedes utilizar un atajo con la instrucción “lea” (load effective address). Esta instrucción sirve para obtener la dirección de un dato en memoria.

lea registro_de_destino, [direccion_de_memoria]; coloca direccion_de_memoria en
registro_de_destino


La gran ventaja es que en lugar de la dirección de memoria, puedes poner la multiplicación o la adición de un registro por una constante.

Supongamos que quieres multiplicar ecx por 7 y poner el resultado en ebx, el comando seria:

lea ebx, [ecx * 7]


Desgraciadamente no es posible multiplicar dos registros utilizando este atajo.

Consulta también

Publicado por Carlos-vialfa. Última actualización: 7 de octubre de 2009 a las 22:07 por Carlos-vialfa.
El documento «Ensamblador - Multiplicación por una constante» se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo libremente. No olvides citar a CCM (es.ccm.net) como tu fuente de información.