MIPS - 访问数组

时间:2014-11-11 22:34:44

标签: arrays recursion mips

所以我有一个数组,以前用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;
&#13;
&#13;

和数组:

&#13;
&#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;
&#13;
&#13;

1 个答案:

答案 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并将该和存储在第三个寄存器中,然后使用该最后一个寄存器作为基址从内存中读取