assembly 从PC到目标的跳转寻址[重复]

mitkmikd  于 2023-02-23  发布在  其他
关注(0)|答案(1)|浏览(159)
    • 此问题在此处已有答案**:

How to Calculate Jump Target Address and Branch Target Address?(4个答案)
19小时前关门了。
假设我们需要跳转到内存地址0xAE87698C。如果当前PC值为0xAF70018B,则显示j指令以执行跳转(显示为32位二进制数和等效的十六进制值)
我知道我需要将其中一个向左移位,然后使用PC的四个高位作为新地址,但我不知道何时移位,何时加上PC值

g52tjvyc

g52tjvyc1#

如果你记得指令是4字节的,并且总是对齐的,那就很容易了。同样的,两个低位总是零,没有理由存储它们。这就是为什么你移位2,把它们砍掉。如果你再看看指令编码,你会发现前6位是操作码,地址只有26位可用。因为我们已经砍掉了两位,我们的地址是30位,所以最高的4位不适合。2在编码过程中,你应该验证这些位与当前的PC相同。3在解码过程中,这些位将从PC填充。
在你的例子中,你有0xAE87698C。前4位只是前导十六进制数字,所以很容易与PC进行比较。检查出来,两者都有0xA。然后我们可以处理其余的位:0x0E87698C。将其移位2位(除以4),并且这将给予指令的低26位:0x3A1DA63。前6个是固定值为000010b或移位为0x08000000的操作码。您可以通过添加或使用逐位OR来合并这两个部分,以获得编码0x0BA1DA63。您也可以使用二进制,如果这对您来说更容易,但它更繁琐,更容易出错。

相关问题