Buscar en este blog

domingo, 7 de diciembre de 2014

Multiplicación en lenguaje ensamblador con sumas sucesivas

Sumas sucesivas.

Antes de escribir el código siempre es recomendable resolver el problema sin pensar el la programación así que explicare las sumas sucesivas primero.

Una multiplicación no es mas que la suma de un mismo numero N veces, por ejemplo. 

Si multiplicamos 5 x 3 el 5 es el numero que se va a sumar y el 3 es el numero de veces que se realiza la suma si tomamos en cuenta que iniciamos en cero.

0+5= 5  //primera suma
5+5=10 // segunda suma
10+5=15 //tercer suma

Ahora al código.

Instrucciones en ensamblador

Como ya mencione tenemos que iniciar siempre en cero así que nos aseguramos que el acumulador este en 0 con la instrucción mvi.

mvi a, 00

Después necesitamos los números que se van a multiplicar (en este caso 5 y 3 como en el ejemplo anterior) los cuales también asignaremos con la instrucción mvi.

mvi b, 05
mvi c, 03

Podemos tomar cualquiera de los dos números para sumar y el otro para saber el numero de veces que se debe realizar la suma, así que uno se sumara al acumulador con add y el otro se le restara 1 con la instrucción dcr, así al llegar a 0 sabremos que hemos realizado las sumas necesarias.

add b
dcr c

Estas operaciones se deben hacer varias veces para poder llegar al resultado deseado así que necesitas un ciclo que repita las instrucciones, para esto usare una etiqueta que llamaremos salto y jnz como condición para que realice el salto siempre que la operación anterior sea diferente de 0.

salto:
add b
dcr c
jnz salto

El código completo quedaría así.

mvi b, 05h
mvi c, 03h
mvi a, 00h
salto:
add b
dcr c
jnz salto

Si queremos obtener los datos sin que los asignemos nosotros lo hacemos con la instrucción in y se lo asignamos a B y C de la siguiente forma.

in 00
mov b, a
in 00
mov c, a
mvi a, 00h
salto:
add b
dcr c
jnz salto

Espero que les sirva, Pueden dejarme sus comentarios y los responderé lo mas rápido que me sea posible.

Hasta la próxima.

1 comentario: