ARM 上的条件指令

逆向工程 手臂
2021-06-13 01:12:22

我试图了解IT用于在 Thumb2 模式下在 ARM 上启用指令的条件执行的指令的语法。

根据我的理解,CPSR 寄存器中的位以及IT指令使 Thumb 模式下的条件执行成为可能。如果我正在编写一些 Thumb2 代码,也许我可以遵循下面提到的过程。

假设我有 4 个条件指令(由 支持的最大限制IT)。

  1. 首先,我用条件指令写下来。假设四个指令的前缀是CLZNE.W, CLZEQ.W, ADDEQ, ADDNEQ
  2. 现在在条件指令之前,我添加了一个形式的指令ITEEE NENE 被添加,因为第一条指令有一个 NE。EEE下面最后3个指令的逆的IT相加NE这就是汇编程序员编写条件拇指2 ARM代码的方式吗?我对流程的理解是否正确?
  3. 为什么条件编码在两者IT后面的说明中?
2个回答

据我了解,您描述了正确使用 IT 说明的过程。这正是我使用过的编译器之一的工作方式。

[编辑]

根据(例如)ARM 体系结构参考手册文档条件未在大多数有条件执行的 Thumb 指令中编码(跳转和其他一些指令除外),它定义了 IT 指令及其所有变体存在的原因。

不幸的是,我找不到确切的 Thumb 2 编码参考,但我认为它的行为与 Thumb 中的相同。

[再次编辑]

是的,这是正确的,我查看的拇指和拇指 II 指令都没有条件字段(例如加法指令和其他 ALU 相关的东西)。我在里面找到的文档是ARMv7-A -R Architecture Reference Manual,下载需要注册。因此,关于您的问题 3 - IT 合规操作中的条件绝对不会在指令本身中编码。

指令后显示的条件代码是反汇编程序的一个便利功能(从前面的IT指令推导出来),单个 Thumb-2 指令不编码条件代码添加条件代码即使它们没有编码也是ARM在编写UAL assembly推荐的做法这有两个目的:

  1. 汇编器可以检查该IT指令是否与以下带条件后缀指令匹配(例如,所有T指令都使用与IT自身相同的条件,所有指令E使用相反的条件),并且没有条件指令出现在IT范围之外

  2. 在为 ARM 模式进行汇编时可以使用相同的汇编 - IT 指令被忽略(或被 隐藏ifdef)并且条件指令作为常规条件 ARM 指令进行汇编。