¿Por qué mi código de ensamblaje en MIPS está equivocado?

3

Empecé a estudiar ensamblaje y he intentado resolver este problema:

  

Para la siguiente declaración en C, ¿cuál es el ensamblaje MIPS correspondiente?   ¿código? Supongamos que las variables f, g, h, i y j están asignadas a   registra $ s0, $ s1, $ s2, $ s3 y $ s4, respectivamente. Supongamos que el   la dirección base de las matrices A y B están en los registros $ s6 y $ s7,   respectivamente:

     

B [8] = A [i − j];

Fuente: Organización y diseño de computadoras, 5ª edición .

Entonces, hice esto:

sub $t0, $s3, $s4 // temp = i - j
sll $t0, $t0, 2   // temp = temp*2^2= 4*temp
add $t0, $t0, $s6 // temp = &A[i-j]
lw  $t1, 0($t0) //   t1 = temp
sw $t1, 32 ($s7) // B[8] = t1 = temp = A[i-j]

Pero mirando el manual de soluciones del libro para verificar que mi respuesta sea correcta, obtuve esto:

sub $t0, $s3, $s4
add $t0, $s6, $t0
lw $t1, 16($t0)
sw $t1, 32($s7)

Estoy confundido. ¿Cómo se les ocurrió la tercera declaración lw $t1, 16($t0) ?

    
pregunta George Chalhoub

2 respuestas

4

La solución de libros es incorrecta:

sub $t0, $s3, $s4
add $t0, $s6, $t0
lw $t1, 16($t0)
sw $t1, 32($s7)

El uso de las instrucciones lw y sw implica que las matrices A y B tienen un tamaño de 32 bits; de lo contrario, instrucciones como lb / lbu, lh / lhu se usarían para cargar entidades de 8 o 16 bits de ancho ( o LD, SD para máquinas de 64 bits).

Sin embargo, el cálculo de la dirección no tiene en cuenta el tamaño de los elementos. Esto hace que el cálculo de la dirección sea incorrecto.

Lo hiciste bien al escalar el desplazamiento en la matriz usando la instrucción sll.

  

Estoy confundido. ¿Cómo se les ocurrió la tercera declaración lw $ t1,   16 ($ t0)?

El desplazamiento de 16 no tiene sentido en este contexto. El desplazamiento de 32 en la instrucción de almacenamiento está bien porque aborda directamente el elemento 8 en la matriz B como debería.

    
respondido por el Nils Pipenbrinck
1

Tengo el mismo manual de solución. No está mal, solo responde a la pregunta 2.4.1. La pregunta que está haciendo es sobre el Ejercicio 2.4, que no está incluido en el manual de la solución. Lo que hiciste es correcto.

    
respondido por el Andi

Lea otras preguntas en las etiquetas