2011-11-28 53 views
7

En MIPS, la instrucción la se traduce en lui y ori. Sin embargo, MARS Simulator no parece hacer eso en absoluto. Cuando yo tiro el siguiente código de máquina:MIPS "la" pseudo instrucción

.text 
    la $a0, array 
    la $a1, array_size 
    lw $a1, 0($a1) 

.data 
    array: .word 0:10 
    array_size: .word 10 
    message: .asciiz "The sum of numbers in array is: " 

me sale:

00100000000001000010000000000000 
00100000000001010010000000101000 
10001100101001010000000000000000 

que es obviamente. Está volcando la como una instrucción. ¿Qué hace MARS? ¿Cómo puedo hacer que interprete la como lui y ori?

Gracias,

Respuesta

8

Lo que sucede aquí es que su ensamblador está recopilando estos la s como addi $<dest>, $0, <value>. La secuencia de dos instrucciones solo se requiere para valores que no se pueden representar en un inmediato de 16 bits; los valores que está utilizando aquí se parecen a 0x2000 y 0x2028, por lo que caben en una sola instrucción.

¿Cómo puedo hacer que interpretar como lalui y ori?

Cargue las constantes más grandes. :) Su ensamblador también podría tener una opción para forzar el uso de la secuencia completa incluso cuando no sea necesario.