我目前正在尝试为 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/