每天学点ARM汇编 (ARMv4/v5版本汇编) ()
来源:互联网 发布:网络传播概论新编 pdf 编辑:程序博客网 时间:2024/05/21 07:46
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/v5版本汇编) ()
- ARM汇编
- ARM汇编
- ARM汇编
- arm汇编
- ARM汇编
- ARM汇编
- arm 汇编
- arm 汇编
- ARM汇编
- arm 汇编
- ARM汇编
- ARM 汇编
- arm 汇编
- ARM汇编
- ARM 汇编
- ARM汇编
- arm汇编
- 一个古老的下载者
- fckeditor <= 2.6.4 任意文件上传漏洞
- java中volatile关键字的用法,它不能保证原子性操作
- 设计模式真的很重要
- 使用 Apache CXF 和 Aegis 开发 Web 服务
- 每天学点ARM汇编 (ARMv4/v5版本汇编) ()
- 建立远程物化视图
- Android adb命令
- cmake error when compiling ros_rt_wmp
- “asm/semaphore.h: No such file or directory”
- Linux系统监控工具之sar 命令详解
- android initlogo.rle 在32位LCD上显示
- java netty之decoder与encoder的使用
- MySQL,重新安装时,配置不成功的原因以及解决办法