Car*_*los 0 assembly label mips post-increment
MIPS 中是否可以在执行期间更改标签的值,或者创建具有特定值的标签?
我问这个是因为当使用指令时,lw $a0, label($s0)
我想在每次循环时增加标签 +4 的值,指示数组的新内存地址。我知道我可以这样做lw $a0, label+4($s0)
,但标签的新值不会被存储。
有什么建议吗?
不可以。在 MIPS 中,取消引用时,括号外必须有一个常量(措辞不当)。如果可以改变标签的值,那么它就不再是恒定的。为了解决这个问题,你可以这样做
la $t1, label #t1 holds address of label
add $t1, $t1, $s0 #t1 now holds address of label + s0 offset
lw $a0, 0($t1) #load word from t1's location
addi $t1, $t1, 4 #t1 was incremented by 4 bytes now
lw $a0, 0($t1) #load the next word
Run Code Online (Sandbox Code Playgroud)
如果 s0 始终为非负数,则建议使用 addu。
编辑:您无法更改标签的值。它只是内存中某个位置的别名。在文本部分中,它是后续指令位置的别名。在数据部分中,它是后续空间的内存位置的别名。
归档时间: |
|
查看次数: |
19401 次 |
最近记录: |