我有这个汇编代码,我应该将其翻译成二进制形式的机器代码:
.text
.align 2
.global main
.equ val,0x4712
main:
movi r16,val
movi r17,0
loop: addi r17,r17,1
subi r16,r16,1
bne r16,r0,loop
stop: br stop
.end
而且我不确定如何解释“bne r16,r0,loop”和“br stop”。
我的指令集参考说 bne 指令这样做:
if(rA != rB)
then PC ← PC + 4 + σ(IMM16)
else PC ← PC +4
据我了解,程序计数器增加了 4 + offset 或简单地增加了 4。
但是,就我而言,偏移量/IMM16 值是多少?指令集参考说:
“在指令编码中,IMM16 给出的偏移量被视为相对于紧跟 bne 的指令的有符号字节数”。
我对此的解释是,IMM16 值是到下一条指令地址的“距离”,但我不知道这是否正确。bne 的十六进制地址是 0x40010 和 br 的 0x40014,所以这意味着 IMM16 的值是 4?(如果 rA != rB 会导致 PC 跳过 0x40014 地址?)