我在这里尝试做的是计算偏移量并将其添加到数组中,以便在数组中的该位置存储值。我已经看到这样做了:
board: .space 36
move $s0, $a0 # Save our arg (cell offset) in $s0
li $t0, 6 # Store the size of the board in $t0
div $s0, $t0 # Cell Offset / Board Size
mflo $s1 # $s1 is our cell row index
mfhi $s2 # $s2 is our cell col index
lb $t1, board + 0($s0) # Load current cell's value in $t1
以下一行,
lb $t1, board + 0($s0) # Load current cell's value in $t1
当我尝试编译时,导致以下错误:
Error: Invalid/illegal second operand.
我已经在其他MIPS汇编程序中看到了这一点,所以我不确定为什么这不起作用。
答案 0 :(得分:2)
你的汇编程序不够聪明,不能告诉board + 0
是使用wrt注册$s0
的位移。
解决方法是让你计算这个位移,即:
lb $t1, board($s0) # Load current cell's value in $t1
此处我删除了+ 0
中的board+0
,因为位移完全相同。您的汇编程序应该至少理解该格式,标签(注册)
答案 1 :(得分:1)
您只能在装配时执行常量操作。 board + 0($s0)
不是常量操作,因为汇编程序无法知道0($s0)
将具有什么值,因为它是依赖于运行时的值。