所以我有一个数组,以前用1或0填充,每当我尝试编译此代码时MIPS给我一个语法错误,有人可以解释这个语法错误是什么?我无法理解为什么你不能这样访问数组,当然$ t1是索引的计数器,它增加到100
slti $t7, prim_flag($t1), 1 # checks if prim_flag ($t1) < 1 stores 1 if so stores 0 if not
beq $t7, 0, print_numbers # checks if the value in $t7 is 0, if so jump to end_game
&#13;
和数组:
.data
test: .asciiz "Printing numbers:"
test_2: .asciiz "Before loop"
space: .asciiz " "
done: .asciiz "\n Done printing the array"
numbers:
.word 0:210
numbers_size:
.word 210
prim_flag:
.word 1:210
&#13;
答案 0 :(得分:1)
slti
唯一有效的操作数组合是register,register,immediate
。您正在尝试使用register,memory,immediate
,并且MIPS指令集中根本没有slti
的此类版本。
实际上,每次需要在MIPS汇编中对内存中的某些数据执行操作时,首先必须使用lb/lh/lw
将该数据加载到寄存器中;那么你可以在那个寄存器上执行你需要的操作;最后在必要时将一些结果写回内存。
另请注意,prim_flag($t1)
中括号左侧的常量是偏移量,而不是基地址。基地址是括号内的部分,必须是寄存器。由于MIPS指令的编码方式,偏移量必须符合16位,因此prim_flag
可能不适合。因此,您可能必须将prim_flag
的地址加载到某个寄存器中,然后添加该寄存器加$t1
并将该和存储在第三个寄存器中,然后使用该最后一个寄存器作为基址从内存中读取