在运行时复制'b'指令不起作用

时间:2015-03-26 23:33:46

标签: assembly mips

这是我的测试代码:

.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跳得更远,但我认为这是它们之间的唯一区别。这有什么问题?

1 个答案:

答案 0 :(得分:1)

b使用相对地址,j使用绝对地址。因此,如果您将b从一个地方复制到另一个地方,它将不会跳转到最初预期的地址,而是会从新位置跳转相同的距离。