据我了解,该指令中的分支是第一行,可以表示为十六进制值“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
:
if $s == $t advance_pc (offset << 2)); else advance_pc (4);
您是说 L1
仅相距 5 个指令,其偏移量为 0xFFFF,然后将其左移两次以确定正确的位置。由于这看起来“赋值”,我将让您根据指令大小找出正确的值。
关于assembly - MIPS 什么十六进制字编码分支指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36346784/