每天学点ARM汇编 (ARMv4/v5版本汇编) ()

2013-7-16   条件执行

在ARM的指令编码表中,统一占用编码的最高4位[31:28]来表示条件码,即cond。

每种条件码用两个英文缩写字符表示其含义,可添加在指令助记符的后面,表示指令执行时必须要满足的条件。ARM指令根据CPSR中的条件位自动判断是否执行指令。在条件满足时,指令执行;否则,指令被忽略(可认为执行了一条NOP伪指令)。


指令的条件码:

操作码[31:28]

助记符扩展

解释

用于执行的标志位状态

0000

EQ

相等/等于0

Z置位

0001

NE

不等

Z清零

0010

CS/HS

进位/无符号数高于或等于

C置位

0011

CC/LO

无进位/无符号数小于

C清零

0100

MI

负数

N置位

0101

PL

正数或0

N清零

0110

VS

溢出

V置位

0111

VC

未溢出

V清零

1000

HI

无符号数高于

C置位Z清零

1001

LS

无符号数小于或等于

C清零Z置位

1010

GE

有符号数大于或等于

N等于V

1011

LT

有符号数小于

N不等于V

1100

GT

有符号数大于

Z清零且N等于V

1101

LE

有符号数小于或等于

Z置位且N不等于V

1110

AL

总是

任何状态

1111

NV

从不(不使用)

 



指令的条件码针对的对象是CPSR中的条件码标志。

CPSR的[31:28],最高4位称为条件标记位,注意这和指令的条件码很像,但不是同一个东西。

CPSR[31]:N,Negative。在结果是有符号的二进制补码情况下,如果结果是负数,则N=1;如果结果为非负数,则N=0。

CPSR[30]:Z,Zero。如果结果为0,则Z=1;如果结果为非0,则Z=0。

CPSR[29]:C,Carry。其设置分以下几种情况:

                                      1).对于加法指令(包括比较指令CMN),如果产生进位,则C=1;否则C=0。

                                      2).对于减法指令(包括比较指令CMP),如果产生借位,则C=0;否则C=1。

                                      3).对于有移位操作的非加减法指令,C为移位操作中最后移出位的值。

                                      4).对于其他指令,C通常不变。


CPSR[28]:V,Overflow。其设置分为以下2种情况:

                                      1).对于加减法指令,在操作数和结果是有符号的整数时,如果发生溢出,则V=1;如果无溢出发生,则V=0。

                                      2).对于其他指令,V通常不发生变化。



2013-7-17 指令分类及指令格式

1.指令分类简述

ARM指令集是Load/Store型的,只能通过Load/Store指令实现对系统存储器的访问,而其他类型的指令是基于处理器内部的寄存器操作完成。

ARM指令集可分为6大类:数据处理指令、Load/store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。


2.指令格式

ARM指令使用的基本格式如下:

<opcode> {<cond>}{S}         <Rd>,<Rn> {,<operand2>}


3.基本指令格式说明

指令格式中所用的英文缩写符号说明如下:

opcode  操作码;指令助记符,如LDR、STR等。

cond  可选的条件码;执行条件,如EQ、NE等。

S        可选后缀;若指定S,则根据指令执行结果更新CPSR中的条件码。

Rd     目标寄存器。

Rn     存放第1操作数的寄存器。

operand2 第2个操作数。

指令基本格式中“<>”和“{}”的说明:

“<>”内的项是必需的,例如,<opcode>是指令助记符,这是必须书写的。

“{}”内的项是可选的,例如,{<cond>}为指令执行条件,是可选项。若不书写,则使用默认条件AL(无条件执行)


4.指令格式举例

LDR   R0,[R1]    ;读取R1地址上的存储单元内容到R0,执行条件AL

BEQ    DATAEVEN ;条件执行分支指令,执行条件EQ,即相等则跳转到DATAEVEN

ADDS   R2,R1,#1  ;加法指令,R2 = R1 + 1,影响CPSR寄存器(S)

SUBNES  R2,R1,#0x20  ;条件执行的减法运算,执行条件NE,R2 = R1 - 0x20,影响CPSR寄存器(S)





你可能感兴趣的:(汇编,体系结构,ARM,ARMv4,ARMv5)