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 MOVs.

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