Multiplicaci贸n
Vamos a realizar la siguiente multiplicaci贸n: 5 * 3
C贸digo de ejemplo
java
int a = 5;int b = 3;int resultado = a;while (true) {resultado = resultado + a;b = b - 1;if (b == 1) {break;}}
Como se puede ver en el ejemplo vamos a ir acumulando el valor de a en resultado tantas veces como b.
1. Guardar los numeros a multiplicar
En este caso guardaremos ambos n煤meros en los registros RB y RC
MOV 05, RB
MOV 03, RC
2. Guardar el resultado
Me he ayudado de la pila para guardar el resultado.
Y por qu茅 la pila?
Los ingenieros debemos simplificar, y no por vager铆a si no por salud.
Lo bueno que tiene la pila de la M++ es que el valor recuperado de la pila (POP
) se guarda en el acumulador.
Podr铆amos hacerlo utilizando un registro auxiliar RD pero tendr铆amos que a帽adir unos cuantos MOV
s.
Inicializar el puntero de la pila
INISP 1234
Inicializar el resultado
Vamos a inicializarlo a 5.
MOV RB, AC
PUSH
3. Bucle
Vamos recuperando el resultado de la pila y sumandole el valor de RB (5). Al igual que decrementamos RC (que contiene las veces que vamos a sumar).
TSTART MOV RC, AC
CMP 01
BEQ TFIN
POP
ADD RB
PUSH
MOV RC, AC
SUB 01
MOV AC, RC
JMP TSTART
TFIN POP
C贸digo final
# 5x3
MOV 05, RB
MOV 03, RC
INISP 1234
MOV RB, AC
PUSH
TSTART MOV RC, AC
CMP 01
BEQ TFIN
POP
ADD RB
PUSH
MOV RC, AC
SUB 01
MOV AC, RC
JMP TSTART
TFIN POP
FIN
Mejoras
Qu茅 cambio habr铆a que hacer si se pidiera que el resultado debe de inicializarse a 0, en vez de a 5?
MOV 05, RB
MOV 03, RC
INISP 1234
MOV 0, AC # <====
PUSH
TSTART MOV RC, AC
CMP 00 # <====
BEQ TFIN
POP
ADD RB
PUSH
MOV RC, AC
SUB 01
MOV AC, RC
JMP TSTART
TFIN POP
FIN