Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 什么十六进制字编码分支指令?_Assembly_Branch_Mips - Fatal编程技术网

Assembly 什么十六进制字编码分支指令?

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

据我所知,本指令中的分支是第一行,可以用十六进制值“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
似乎是正确的。我认为问题在于如何得到偏移量的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将落在分支本身上