assembly 以MIPS为单位加载字,使用寄存器而不是另一个寄存器的立即数偏移量

d5vmydt9  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(191)

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

如果没有,如何使用两个寄存器进行变址寻址?

6yt4nkrj

6yt4nkrj1#

MIPS缺少执行变量偏移的能力,正如Jester所解释的,你只需要像这样将$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

请记住,指针算术应该始终使用无符号加法/减法,因为有符号算术指令可能会导致溢出异常(在这种情况下,您不希望出现这种情况)。

相关问题