- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章 ARM指令分类及其寻址方式
在本章中,将介绍ARM指令分类以及各类指令对应的寻址方式。
2.1 ARM指令集概要介绍
在本节中,将介绍ARM指令相关的一些基本概念,包括指令的分类、指令的一般编码格式以及ARM指令中的条件码。
2.1.1 ARM指令的分类
ARM指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)传输指令、Load/Store指令、协处理器指令和异常中断产生指令6类。
2.1.2 ARM指令的一般编码格式
ARM指令字长为固定的32位。一条典型的ARM指令编码格式如下:
31 28 27 25 24 21 20 19 16 15 12 11 8 7 0
cond
0 0 1
opcode
S
Rn
Rd
shifter_operand
其中的符号及参数说明如下。
opcode:指令操作符编码。
cond:指令执行的条件编码。
S:决定指令的操作是否影响CPSR的值。
Rd:目标寄存器编码。
Rn:包含第1个操作数的寄存器编码。
shifter_operand:表示第2个操作数。
一条典型的ARM指令语法格式如下所示:
opcode{cond}{S} Rd,Rn,shifter_operand
其中的符号及参数说明如下。
opcode:是指令助记符,如ADD表示算术加操作指令。
{cond}:表示指令执行的条件。
{S}:决定指令的操作是否影响CPSR的值。
Rd:表示目标寄存器。
Rn:表示包含第1个操作数的寄存器。
shifter_operand:表示第2个操作数。
2.1.3 ARM指令的条件码域
大多数ARM指令都可以有条件地执行,也就是根据CPSR中的条件标志位决定是否执行该指令。当条件满足时执行该指令,条件不满足时该指令被当作一条NOP指令,这时处理器进行判断中断请求等操作,然后转向下一条指令。
在ARMv5之前的版本中,所有的指令都是有条件执行的,从ARMv5版本开始,引入了一些必须无条件执行的指令。
每一条ARM指令包含4位的条件码,如下所示:
31 28 27 0
cond
条件码共有16个,各条件码的含义和助记符如表2.1所示。可条件执行的指令可以在其助记符的扩展域加上条件码助记符,从而在特定的条件下执行。
表2.1 指令的条件码
条件码
cond
条件码
助记符
含 义
CPSR中条件标志位值
0000
EQ
相等
Z=1
0001
NE
不相等
Z=0
0010
CS/HS
无符号数大于/等于
C=1
0011
CC/LO
无符号数小于
C=0
0100
MI
负数
N=1
0101
PL
非负数
N=0
0110
VS
上溢出
V=1
0111
VC
没有上溢出
V=0
1000
HI
无符号数大于(Higher)
C=1且Z=0
1001
LS
无符号数小于等于
C=0或Z=1
1010
GE
带符号数大于等于
N=1且V=1 或N=0且V=0
1011
LT
带符号数小于
N=1且V=0 或N=0 且V=1
1100
GT
带符号数大于
Z=0且N=V
1101
LE
带符号数小于/等于
Z=1或N!=V
1110
AL
无条件执行
1111
NV
该指令从不执行
ARMv3之前
未定义
该指令执行结果不可预知
ARMv3及ARMv4
AL
该指令无条件执行
ARMv5及以上版本
2.2 ARM指令的寻址方式
ARM指令的寻址方式有以下几种,分别进行讨论:
数据处理指令的操作数的寻址方式。
字及无符号字节的Load/Store指令的寻址方式。
杂类Load/Store指令的寻址方式。
批量Load/Store指令的寻址方式。
协处理器Load/Store指令的寻址方式。
2.2.1 数据处理指令的操作数的寻址方式
通常数据处理指令的格式如下所示:
opcode{cond}{S} Rd,Rn,shifter_operand
其中的符号及参数说明如下。
opcode:是指令助记符,如ADD表示算术加操作指令。
{cond}:表示指令执行的条件。
{S}:决定指令的操作是否影响CPSR的值。
Rd:表示目标寄存器。
Rn:表示包含第1个操作数的寄存器。
shifter_operand:表示第2个操作数。
shifter_operand通常有下面3种格式。
(1) 立即数方式。每个立即数由一个8位的常数循环右移偶数位得到。其中循环右移的位数由一个4位二进制的两倍表示。如果立即数记作immediate,8位常数记作imm
文档评论(0)