arm汇编指令之指令后面的条件探究

格式可以是如下这种的:

​​​​​​​MRS{cond} Rd, spec_reg

条件执行:

大部分处理器指令可以根据操作指令码决定是否更新APSR寄存器中的条件标记,有些指令需要更新全部的标记位,有些指令只更新某一些位。如果标记位没有被更新,起始值将得到保护,具体可参考标记位寄存器APSR的详细描述,

你可以根据条件标记位是否置决定要不要执行某条指令,

以下是可以影响条件标记位的一些后缀:

可以参考如下例程:

演示如何使用条件指令来查找一个数的绝对值

MOVS R0, R1; R0 = R1, setting flags
IT MI ; IT instruction for the negative condition //它指示负条件
RSBMI R0, R1, #0; If negative, R0 = -R1
显示条件指令的使用,如果签名值R0和R2分别大于R1和R3,则更新R4的值

CMP R0, R1 ; compare R0 and R1, setting flags
ITT GT ; IT instruction for the two GT conditions //IT指令为两个GT条件
CMPGT R2, R3; if 'greater than', compare R2 and R3, setting flags
MOVGT R4, R5 ; if still 'greater than', do R4 = R5

 

条件指令除了branch分支指令之外,其他一定要在if-then指令块之内,可以查看 IT(if-then)指令的详细描述

上面截图的翻译:

IT指令

if-Then 条件指令

语法

IT{X{Y{Z}}} cond

x,y, z, cond的解释:

x   指定IT块中第二条指令的条件开关

y  指定IT块中第三条指令的条件开关

z  指定IT块中第四条指令的条件开关

cond  指定IT块中的第一条指令的条件

IT块中的第二、第三和第四条指令的条件开关可以是其中之一

  T:Then.    将条件cond应用于指令

  E:Else.    将条件cond取反应用于指令

在It指令中,可以对cond使用AL (always条件)。如果这样做了,IT块中的所有指令都必须是无条件的,x、y和z必须是T或者省略,但不能是E。

以下指令是不能在IT块内出现的指令

• IT
• CBZ and CBNZ
• CPSID and CPSIE

其他相关的限制在使用IT指令的时候:

一个分支或任何修改PC的指令必须在IT块之外或必须是IT块内的最后一条指令。这些都是:

– ADD PC, PC, Rm
– MOV PC, Rm
– B, BL, BX, BLX
– any LDM, LDR, or POP instruction that writes to the PC
– TBB and TBH

下面是英文原文:


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值