分支地址

时间:2016-07-20 18:48:27

标签: assembly mips

我正在使用mips,我希望您能帮助我了解有关计算分支地址的一些信息。 修理我,如果我错了..在机器代码 ..地址实际上是字+ pc + 4的数字,pc + 4认为是下一条指令。 但是在mips中我们只会看到我们需要到达标签的地址索引中的单词数量?

1 个答案:

答案 0 :(得分:0)

由于有大量可用的工具链可以生成正确/正常工作的机器代码,只需花几秒钟就可以创建一个示例:

00001000 <_ftext>:
    ...
    1008:   10000008    b   102c <one>
    100c:   00000000    nop
    1010:   00000000    nop
    1014:   10000007    b   1034 <two>
    1018:   00000000    nop
    ...
    1024:   10000005    b   103c <three>
    1028:   00000000    nop

0000102c <one>:
    102c:   03e00008    jr  ra
    1030:   00000000    nop

00001034 <two>:
    1034:   03e00008    jr  ra
    1038:   00000000    nop

0000103c <three>:
    103c:   03e00008    jr  ra
    1040:   00000000    nop

分支到一个地址为0x1008,一个地址为0x102C,差值为0x24,即9个字。所以是的,你可以看出你从pc + 4到目标的区别。

对于分支到两个0x1034-(0x1014 + 4)= 0x1C,这是7个字,这是编码。

00001000 <_ftext>:
    ...

0000100c <one>:
    ...
    1018:   1000fff9    b   1000 <_ftext>
    101c:   00000000    nop
    1020:   1000fffa    b   100c <one>
    1024:   00000000    nop

同样向后分支0x100C - (0x1020 + 4)= 0xFFF ... FFE8。将其转换为单词0xFF ... FFFA,这就是编码。对于此示例中的其他分支也是如此。

如果您有自己的工具,并且不确定是否存在偏移,编码是什么,等等。只需使用有效的工具,与仅仅询问某人不同,除了更容易和更快。