gpt4 book ai didi

assembly - 将 ARM 汇编助记符转换为字节

转载 作者:行者123 更新时间:2023-12-02 22:02:21 28 4
gpt4 key购买 nike

我是汇编语言的新手,我需要帮助理解助记符如何直接转换为字节。

例如,我有一句话

b 0x00002B78

位于内存地址0x00002A44。这如何转换为 EA00004B(上述程序集的字节表示)?我的印象是“EA00”表示组件的“b”分支部分,但是“004B”又如何呢?如果有人能对此有一个总体的了解,并提供寻找转换等的资源,我们将不胜感激。我尝试用谷歌搜索这个,但我真的不确定到底要用谷歌搜索什么。我一直在谷歌搜索的东西没有帮助。

最佳答案

您要查找的所有信息都在 ARM Architecture Reference Manual 中。如果您查找 b 指令,您将看到它的编码及其工作原理。以下是您关心的具体说明:

excerpt from ARM docs

E 是条件字段,您可以在此表中查找:

condition fields

对你来说,它是“始终执行”。然后是 A,其二进制形式是 1010,用于匹配位 27:24(您有一条分支指令,而不是分支和链接指令)。最后,指令的其余部分是立即偏移字段。它是 PC 相对偏移量,这就是它被编码为 0x00004b 的原因。

现在让我们看看您的具体示例。您有说明:

b 0x00002B78

位于地址0x00002a44。太好了。首先,我们可以插入操作码位:

cccc 101L xxxx xxxx xxxx xxxx xxxx xxxx

现在,对于我们的情况,L 位为零:

cccc 1010 xxxx xxxx xxxx xxxx xxxx xxxx

我们希望无条件执行该指令,因此我们添加 AL 条件代码位:

1110 1010 xxxx xxxx xxxx xxxx xxxx xxxx

现在我们要做的就是计算偏移量。当这条指令被执行时,PC将是0x2a4c(在ARM中PC始终是“当前指令+8”),所以我们的相对跳转需要是:

0x2b78 - 0x2a4c = 0x12c

太棒了 - 现在我们应用上面文档中描述的相反转换,将 0x12c 右移 2:

0x12c / 4 = 0x4b = 0b1001011

这是最后一个字段:

1110 1010 0000 0000 0000 0000 0100 1011

将该二进制指令转换回十六进制即可获得您正在寻找的指令编码:

0xea00004b

关于assembly - 将 ARM 汇编助记符转换为字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18340750/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com