Arrays 使用变量作为偏移量时访问数组的MIPS程序集

Arrays 使用变量作为偏移量时访问数组的MIPS程序集,arrays,assembly,mips,offset,Arrays,Assembly,Mips,Offset,是否仍然可以使用变量作为数组的偏移量?例如,我知道法线偏移和阵列的工作原理如下: ARRAY: .word 0,1,2,3,4,5,6,7,8,9 lw $t6, ARRAY lw $t7, 0($t6) 零处的索引将加载到t7中,但我想做的是: ARRAY: .word 0,1,2,3,4,5,6,7,8,9 lw $t6, ARRAY li $t7, 0 lw $t8, $t7($t6) 通过这种方式,我可以在代码中按照我想要的方式递增变量t7,而无需硬编码偏移量。我不断地得到一

是否仍然可以使用变量作为数组的偏移量?例如,我知道法线偏移和阵列的工作原理如下:

ARRAY: .word 0,1,2,3,4,5,6,7,8,9
lw $t6, ARRAY
lw $t7, 0($t6)
零处的索引将加载到t7中,但我想做的是:

 ARRAY: .word 0,1,2,3,4,5,6,7,8,9
 lw $t6, ARRAY
 li $t7, 0
 lw $t8, $t7($t6)

通过这种方式,我可以在代码中按照我想要的方式递增变量t7,而无需硬编码偏移量。我不断地得到一个语法错误,所以我想我试图做的是错误的。我是否可以这样做,以便增加数组的索引?

要通过带有变量的数组增加索引,必须使用以下设置:

ARRAY: .word 1,2,3,4,5,6,7,8,9
li $t2, 0
lw $t3, ARRAY($t2)
addi $t2, $t2, 1

要通过带有变量的数组递增,必须使用以下设置:

ARRAY: .word 1,2,3,4,5,6,7,8,9
li $t2, 0
lw $t3, ARRAY($t2)
addi $t2, $t2, 1

这是不受支持的。但是,由于MIPS有大量的通用寄存器,您只需将
$t6
$t7
相加到一个空闲寄存器中,并不断递增即可。你不必猜测你正在做的事情是否得到支持;MIPS32™ 程序员体系结构第二卷:MIPS32™ 指令集列出所有可用指令及其预期操作数。不支持此操作。但是,由于MIPS有大量的通用寄存器,您只需将
$t6
$t7
相加到一个空闲寄存器中,并不断递增即可。你不必猜测你正在做的事情是否得到支持;MIPS32™ 程序员体系结构第二卷:MIPS32™ 指令集列出所有可用指令及其预期操作数。请注意,除非
数组
的地址在0xFFFF8000-0x00007FFF范围内,否则您的
lw
指令将不能直接编码为MIPS指令。汇编程序可能仍然将其作为伪指令接受,并将其转换为2条或更多实际的MIPS指令。在类似SPIM或MARS的模拟器中,您可以很容易地看到这一点。请注意,除非
ARRAY
的地址在0xFFFF8000-0x00007FFF范围内,否则您的
lw
指令将不能直接编码为MIPS指令。汇编程序可能仍然将其作为伪指令接受,并将其转换为2条或更多实际的MIPS指令。你可以很容易地在类似SPIM或火星的模拟器中看到这一点。