比较指令用来比较两个数大小,或者是否相等,比较指令的运算结果会影响CPSR寄存器的N\Z\C、V标识位,具体的标志位可以参考前面的CPSR寄存器介绍,比较指令的格式如下/
CMP {cond} Rn, operand2 比较两个数大小
CMN {cond}Rn, operand2 取负比较
比较指令的使用示例及说明如下。
CMP R1, #10
CMP R1,R2
CMP R0, #1
比较指令的运行结果Z=1时,表示运算结果为0,两个数相乘,N=1表示运算结果为负,N=0 表示运算结果为非负,即运算结果为正或者为零。
3.2.6 条件执行指令
为了提高代码密度,减少ARM指令的数量, 几乎所有的ARM指令都可以根据CPSR寄存器中的标识为,通过指令组合实现条件执行,如无条件跳转指令B,我们呢可以在后面加上条件码组成BEQ,BNE组合指令,BEQ指令表示两个数比较,结果相等时跳转;BNE指令则表示结果不想等时跳转,CPSR寄存器中的标识位根据需要可以任意搭配成不同的条件码,和ARM指令一起组合使用,ARM指令的条件码如表3-3所示。
表 3-3 ARM指令的条件码
条件码 |
CPSR 标识位 |
说明 |
条件码 |
CPSR标志位 |
说明 |
EQ |
Z=1 |
相等 |
HI |
C置位,Z清零 |
无符号数大于 |
NE |
Z=0 |
不相等 |
LS |
C清零,Z置位 |
有符号数小于或等于 |
CS/HS |
C=1 |
无符号数大于或等于 |
GE |
N=V |
有符号数大于或等于 |
CC/LO |
C=0 |
无符号数小于 |
LT |
N!=V |
有符号数小于 |
MI |
N置位 |
负数 |
GT |
Z清零,N=V |
有符号数大于 |
PL |
N清零 |
整数或零 |
LE |
Z置位,N!=V |
有符号数小于或等于 |
VS |
V置位 |
溢出 |
AL |
忽略 |
无条件执行 |
VC |
V清零 |
未溢出 |
NV |
忽略 |
从不执行 |
条件执行经常出现在跳转或循环的程序结构中。如下面的汇编程序,通过循环结构,我们可以实现数据块搬运功能,我们可以将无条件跳转指令B和条件码NE组合在一起使用。构成一个循环程序结构。
AREA COPY,CODE,READONLY
Entry
START
LDR R0, =SRC
LDR R1, =DST
MOV R2, #10
LOOP
LDR R3,[R0] #4
STR R3, [R1], #4
SUBS R2, R2, #1
BNE LOOP
AREA COPYDATA, DATA, READWRITE
SRC DCD 1,2,3,4,5,6,7,8,9,0
DST DCD 0,0,0,0,0,0,0,,0,0,0,0文章来源:https://www.toymoban.com/news/detail-770282.html
END文章来源地址https://www.toymoban.com/news/detail-770282.html
到了这里,关于ARM 汇编比较指令-条件执行指令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!