MIPS Asm - 无效/非法的第二个操作数

时间:2015-11-30 12:21:58

标签: assembly mips

我在这里尝试做的是计算偏移量并将其添加到数组中,以便在数组中的该位置存储值。我已经看到这样做了:

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汇编程序中看到了这一点,所以我不确定为什么这不起作用。

2 个答案:

答案 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)将具有什么值,因为它是依赖于运行时的值。