MIPS中有一条指令,允许我们从内存中加载一个数字,如下所示:
.data array: .word 1,2,3,4 .text la $t0, A lw $t1, 8($t0) #will load 3 to $t1
有没有办法用(寄存器中的数字)代替(立即数)?例如:
li $t2, 8 lw $t1, $t2($t1) # again will load 3 to $t1
如果没有,如何使用两个寄存器进行变址寻址?
6yt4nkrj1#
MIPS缺少执行变量偏移的能力,正如Jester所解释的,你只需要像这样将$t2加到$t1上:
$t2
$t1
.data array: .word 1,2,3,4 .text la $t0,array li $t2,8 #array[2] addu $t0,$t0,$t2 #using unsigned arithmetic here. Very important! lw $t1,0($t0) #load the 3 into $t1
请记住,指针算术应该始终使用无符号加法/减法,因为有符号算术指令可能会导致溢出异常(在这种情况下,您不希望出现这种情况)。
1条答案
按热度按时间6yt4nkrj1#
MIPS缺少执行变量偏移的能力,正如Jester所解释的,你只需要像这样将
$t2
加到$t1
上:请记住,指针算术应该始终使用无符号加法/减法,因为有符号算术指令可能会导致溢出异常(在这种情况下,您不希望出现这种情况)。