这是我的测试代码:
.data
msg: .asciiz "test\n"
.text
partc:
b partb
parta:
syscall
partb:
la $a0, msg
li $v0, 4
syscall
li $v0, 10
syscall
_start:
main:
lw $t0, partc
la $t1, parta
sw $t0, ($t1)
b parta
如果我按原样运行代码,它会使内存超出绑定错误。但是,如果我在b
中将j
更改为partc
,则可以正常使用。我知道j
可以比b
跳得更远,但我认为这是它们之间的唯一区别。这有什么问题?
答案 0 :(得分:1)
b
使用相对地址,j
使用绝对地址。因此,如果您将b
从一个地方复制到另一个地方,它将不会跳转到最初预期的地址,而是会从新位置跳转相同的距离。