(32位)arm 汇编学习(2)

条件码

在指令中,有4位用来表示条件,也就是有16种条件。如果当前条件满足,则继续执行,否则这条指令将被忽略。

结果标志主要是被数据操作指令设置和清除,这些指令只有在你强调其应该操作标志位的时候才会影响标志位,比如MOV不会影响标志位,但是MOVS(mov with set)就会设置标志位。

接下来我们就要看一些指令条件,是通过在指令后面加上2个字母的后缀来表明的。

AL(ALways)

这个指令即表示总是,也就是指令将总是会被执行,如果没有表明条件,这个条件将会是默认的。

NV(NeVer)

所有的ARM条件指令都有相对应的相反的条件指令,AL就对应NV,NV就表示永不执行,可以用来占位或者消耗掉很小的一段时间。

EQ(EQual)

这个条件在Z标志位为1的时候被认为是true(关于标志位可参见第一篇)。Z标志位主要是由比较指令和一些可能会使得目标为0的指令来产生。

NE(Not Equal)

和EQ正好相反。

VS(oVerflow Set)

这个条件在V(溢出标志)为1的时候被认为是true,加法减法和比较指令会影响这个标志位。

VC (oVerflow Clear)

和VS相反

MI (MInus)

这个条件在N(负数标志)为1的时候被认为是true。N标志在最后一个数据操作使得数据为负的时候被设置。

PL(PLus)

和MI正好相反

CS (Carry Set)

从本指令开始的4个指令常被用来比较2个无符号数

CS指令的意思是当C(进位标志)是1的时候认为为true。C标志被算术操作,比如加法、减法、比较、移位等影响。
用作比较的时候,可以被翻译为大于等于,所以也可以用HS(Higher or Same)来代替这个标志。

CC(Carry Clear)

为CS的相反情况,在比较的时候,也可以用来表示小于,所以也可以写作LO(LOwer than)

HI(HIgher)

这个标志位在C标志为1且Z标志为0的时候被认为是true,在比较或者减法之后,这个组合可以被解释为左边的操作数大于右边的数(无符号数)。 (根据前几条命令,我们可以知道C表示大于等于,Z表示等于,大于等于且不等于,则为大于。)

LS(Lower or Same)

和上一条条件相反,C为0Z为1时为true,即左边的数小于等于右边的数。

GE(Greater than or Equal

从本指令开始的4条指令常被用来比较有符号数

本指令在N为0,V为0或者N为1V为1时为true。(大于等于)

LT(Less Than)

为上一条指令的相反,N为1V为0或者N为0V为1。小于

GT(Greater Than)

和GE类似,不过Z必须为0。 表示大于

LE(Less than or Equal)

和LT类似,不过在Z为1的时候始终为true。 表示小于等于

第一类-数据操作

这一类包含16个指令,指令语法较为相似,我们以ADD为例,然后其他指令说一下不同的部分。

汇编典型格式

以add为例:

 ADD{cond}{S} <dest>, <lhs>, <rhs>

花括号里的是可选的。

  • cond:条件码,如果忽略则为AL
  • S:如果有S,则这条指令影响标志位。
  • dest:目的地,即存储结果的寄存器号,比如R0,R1等等。
  • lhs:永远是一个寄存器号,左边的操作数
  • rhs:右操作数比较复杂,再解释完移位操作再详细解释,其语法为
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值