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

本文介绍了ARMv8 Aarch32架构中的指令类型,包括A32、T32及T16,并重点分析了条件跳转指令的工作原理。通过观察状态寄存器PSTATE的NCZV标志位,可以确定条件是否满足。此外,还对比了A32和T32指令的不同之处,并提供了IT指令的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

Armv8 条件按跳转指令需要观察状态寄存器(PSTATE)的NCZV (condition flag)来确定条件的满足情况:
condtion flag
注意:PSTATE寄存器可以通过访问CPSR Current Program Status Register 得到其具体的数值.
Condition flag NCZV有如下16种情况。
这里写图片描述
举例说明, 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指令

bpu例子1
bpu例子2

2.T32指令

T32指令和 A32 指令的区别是:thumb指令不支持条件执行。此时,需要加入IT指令,指定之后指令执行的条件。
有如下的例子:
这里写图片描述

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指令的相关连接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值