ARM 汇编比较指令-条件执行指令

比较指令用来比较两个数大小,或者是否相等,比较指令的运算结果会影响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

END

你可能感兴趣的:(汇编,arm开发)