Ayuda resolución ejercicio ensamblador

Alguien sabria explicarme este ejercicio? Gracias de anteabraso!

En el código de alto nivel M es una variable de tipo vector de dos dimensiones (matriz) de 10 por 10 elementos. Cada elemento de la matriz es un entero de 32 bits. En el programa ensamblador la matriz se encuentra almacenada a partir de la dirección simbólica M, por filas y en posiciones consecutivas (M [0] [0], en la dirección simbólica M, el siguiente, M [0] [1] , en la dirección M + 4, ..., M [1] [0] en la dirección M + 40, M [1] [1] en la dirección M + 44, etc.).

El programa en cada fila, actualiza los valores de manera que cada posición de columna J contendrá la suma de los elementos J + 1 a N-1 (N en este caso sería 10).

En el programa ensamblador, R1 se utiliza para hacer referencia al índice I, y R2 para hacer referencia al índice J, y R4 para dirigir la varaible AUX.

I:= 0;
J:= 0;
WHILE I<10 {
J:= 8;
WHILE J>=0 {
AUX:= M[I][J+1];
M[I][J]:= M[I][J]+AUX;
J:= J-1;
}
I:= I+1;
}

Rellenar espacios:

MOV R1, 0
MOV R2, 0
WI: CMP R1, 400
JGE ENDWI
MOV R2, ___
WJ: CMP ___, 0
___ ENDWJ
MOV R3, R1
___ R3, R2
ADD R3, ___
MOV R4, ___
___ R3, 4
ADD [M+R3], ___
SUB R2, 4
___ WJ
ENDWJ: ADD R1, 40
JMP WI
ENDWI:
Fathermaximo escribió:Alguien sabria explicarme este ejercicio? Gracias de anteabraso!
...


Tu profesor o compañeros.
No es plan ponernos a aqui a hacer los ejercicios de los demás o sino esto se llenaría de peticiones no deseadas que entorpecerían el buen ritmo del foro.
En qué parte tienes dudas exactamente?, como comentan no es plan de explicarlo todo.
Hombre, ya que pides ayuda, lo mínimo sería utilizar correctamente las etiquetas de código, que para algo están...
Tenéis razón, de momento lo tengo así y dudo en las vacías del centro:

MOV R1, 0
MOV R2, 0
WI: CMP R1, 400
JGE ENDWI
MOV R2, 320
WJ: CMP R2, 0
JL ENDWJ
MOV R3, R1
MOV R3, R2
ADD R3, ...
MOV R4, ...
ADD R3, 4
ADD [M+R3], ...
SUB R2, 4
JMP WJ
ENDWJ: ADD R1, 40
JMP WI
ENDWI:

Gracias.
Te digo lo que creo que está mal y lo que creo que tiene que hacer cada instrucción.

Fathermaximo escribió:MOV R2, 320

Cada palabra ocupa 4 bytes y R2 recorre las columnas. Si te fijas al final del bucle WJ a R2 le restas 4 y no 40.

Fathermaximo escribió:MOV R3, R2

En el registro R3 estás guardando la dirección de M[I][J+1] y en la instrucción anterior has guardado en R3 el registro R1.

Fathermaximo escribió:ADD R3, ...

Aquí sigues calculando la dirección de M[I][J+1].

Fathermaximo escribió:MOV R4, ...

Aquí ya guardas en R4 lo que haya en M[I][J+1].

Fathermaximo escribió:ADD R3, 4

Aquí estás calculando la dirección de M[I][J] a partir de la dirección M[I][J+1] (que está guardada en R3).

Fathermaximo escribió:ADD [M+R3], ...

Aquí estás haciendo M[I][J]:= M[I][J] + AUX.

He estudiado ensamblador MIPS así que he supuesto el funcionamiento de algunas instrucciones.

Edit: Veo que el hilo es de hace 10 días, te dejo la respuesta por si te sirve de algo.
5 respuestas