在运行时复制 'b' 指令不起作用
Copying 'b' instruction at runtime doesn't work
这是我的测试代码:
.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
如果我按原样运行 代码,它会给出内存越界错误。但是,如果我在 partc
中将 b
更改为 j
,它就可以正常工作。我知道 j
可以比 b
跳得更远,但我认为这是它们之间的唯一区别。这里有什么问题?
b
使用相对地址,j
使用绝对地址。因此,如果您将 b
从一个地方复制到另一个地方,它不会跳转到最初的地址,而是会从新位置跳转相同的距离。
这是我的测试代码:
.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
如果我按原样运行 代码,它会给出内存越界错误。但是,如果我在 partc
中将 b
更改为 j
,它就可以正常工作。我知道 j
可以比 b
跳得更远,但我认为这是它们之间的唯一区别。这里有什么问题?
b
使用相对地址,j
使用绝对地址。因此,如果您将 b
从一个地方复制到另一个地方,它不会跳转到最初的地址,而是会从新位置跳转相同的距离。