ARM Aarch32 中 A32 和 T32 的汇编编程的例子(call return stack 结构相关的指令)

Aarch32架构的指令分为A32,T32 和 T16 三种类型的指令。
Aarch64的架构指令有A64一种。

下面指令是ARMv8的aarch32的部分跳转指令例子

0.条件跳转指令(condition branch)的发生的条件

Armv8 条件按跳转指令需要观察状态寄存器(PSTATE)的NCZV (condition flag)来确定条件的满足情况:
ARM Aarch32 中 A32 和 T32 的汇编编程的例子(call return stack 结构相关的指令)_第1张图片
注意:PSTATE寄存器可以通过访问CPSR Current Program Status Register 得到其具体的数值.
Condition flag NCZV有如下16种情况。
ARM Aarch32 中 A32 和 T32 的汇编编程的例子(call return stack 结构相关的指令)_第2张图片
举例说明, B.cond 指令(A64指令):

mov x0, #0x0
cmp x0, #0xf
B.EQ label
nop
nop

label:
    mov x1, #0xff 
    nop

假如x0 寄存器的值等于 0xf, 程序就会跳转到 label 函数处。

除了最后一种情况 AL,其他的条件都需要观察condtion flage的状态。对AL条件,举例:

B.AL  label

这个指令代表程序一定跳转到 label 函数处,不管 condition flag 的具体值是多少。

1.A32指令

ARM Aarch32 中 A32 和 T32 的汇编编程的例子(call return stack 结构相关的指令)_第3张图片
ARM Aarch32 中 A32 和 T32 的汇编编程的例子(call return stack 结构相关的指令)_第4张图片

2.T32指令

T32指令和 A32 指令的区别是:thumb指令不支持条件执行。此时,需要加入IT指令,指定之后指令执行的条件。
有如下的例子:
ARM Aarch32 中 A32 和 T32 的汇编编程的例子(call return stack 结构相关的指令)_第5张图片

IT 可以理解为:

IF ... 
Then ...

例如 ITET NE 的意思是:

if ne:
    带 *.ne 指令
then if eq:
    带 *.eq 指令
then if ne:
    带 *.ne 指令

ITET NE中 : ITET 中的 T 代表符合 NE 条件, E 代表与 NE 条件相反。
T32的IT指令最多带四个条件,用来确定后续四个指令的执行条件。
IT指令的相关连接


你可能感兴趣的:(ARM)