encoding - 为什么 ARMv7 中的一条指令有多种编码

标签 encoding binary arm thumb instruction-set

我目前正在尝试为 ARM cortex A9 实现一个反汇编程序,它实现了 ARMv7 指令集。

为此,我正在使用可以在此处下载的手册“DDI0406C_b_arm_architecture_reference_manual.pdf”(在 arm 网站上注册后):

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.set.architecture/index.html

在本手册中,在 A8.8 部分的指令详细信息中,我不明白为什么一条指令有多种编码(如 A1、A2、...),似乎都是用 ARMv7 实现的。

此外,由于 ARM cortex A9 使用了 thumb-2,它是否也实现了 A1/A2/... 编码,还是仅实现了 T1/T2... ?

我真的阅读了本手册的所有部分都与编码相关,但我仍然不明白我们如何知道程序使用了哪种编码。

最佳答案

指令的不同编码在功能上做不同的事情。

使用不同编码的一个例子是 A8.9.12 ADR

This instruction adds an immediate value to the PC value to form a PC-relative address, and writes the result to the destination register.



如果指令编码为 A1如果被编码为 A2,则偏移量必须被解释为零或正数。那么偏移量是负的。

另一个例子是 A8.8.132 POP

If the list contains more than one register, the instruction is assembled to encoding A1. If the list contains exactly one register, the instruction is assembled to encoding A2.



我可以想象不同的POP出于性能原因,可能会创建编码以创建不同的微代码。

对于您问题的第二部分,Cortex-A9 是 ARMv7-A 架构 CPU,它支持您所指的手册中指定的所有指令。也许你还应该阅读Cortex™-A9 Technical Reference Manual .

关于encoding - 为什么 ARMv7 中的一条指令有多种编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107929/

相关文章:

spring - 特殊字符的 Spring 资源包的 UTF-8 编码问题

c - 重用已编译的 .exe 文件中的字符

c - 在 arm 上的 docker 容器中运行 C musl 应用程序时的 time() 问题

java - Informix JDBC ISO-8859-2 编码问题

python - 有效地指定具有相同前缀的多个列名称

java - 二值图像数据的高效存储

c++从二进制文件中读取整数,缺少一些数据

java - Android Force 在 io.realm 库上使用 ARMv7

arm - Libtool 声称在交叉编译期间不支持共享库

html - 使用 HTML 代码和特殊字符的优缺点