Assembly 什么十六进制字编码分支指令?
据我所知,本指令中的分支是第一行,可以用十六进制值“10b8ffff”表示。然而,这显然不是正确的答案Assembly 什么十六进制字编码分支指令?,assembly,branch,mips,Assembly,Branch,Mips,据我所知,本指令中的分支是第一行,可以用十六进制值“10b8ffff”表示。然而,这显然不是正确的答案 分支指令的编码是否也依赖于MIPS代码的其余部分 或 我只是在翻译第一行时得到了不正确的十六进制值吗 以下是MIPS代码: beq $5, $24, L1 slli $8, $7, 2 add $8, $8, $15 lw $8, 0($8) sw $8, 0($23) L1: addi $7, $7, 1 第一部分,0x10b8
- 分支指令的编码是否也依赖于MIPS代码的其余部分李>
- 我只是在翻译第一行时得到了不正确的十六进制值吗
beq $5, $24, L1
slli $8, $7, 2
add $8, $8, $15
lw $8, 0($8)
sw $8, 0($23)
L1: addi $7, $7, 1
第一部分,
0x10b8
似乎是正确的。我认为问题在于如何得到偏移量的0xFFFF。请从指令参考中注意这一点,其中beq$s,$t,offset
:
如果从实际的汇编程序十六进制输出中,$s==$t advance\u pc(偏移量,谢谢,我可以看出它的意义:)则
beq
指令的十六进制为10b80004
。L1
标签位于addr/offset 0x14处(如您所述,距离5英寸)。因此,beq
总是首先添加4(字节),不管如何,然后如果执行分支,则应用偏移(执行移位)。所以,它更像是:advancepc(4);如果$s==$t advance\u pc(offset btw:offsett FFFF for BEQ(如“10b8ffff”)将是一个无止境的循环,它是依赖的,因为它相对于pc+4跳跃…如果你想分支跳过4条指令,偏移量是4,如果你想向后跳,也要计算BEQ本身,-1将落在分支本身上