- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.2.4批量LoadStore指令的寻址方式.doc
ARM体系结构与编程(第2版)
第2章 ARM指令分类及其寻址方式
PAGE 60
PAGE 59
第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
cond0 0 1opcodeS Rn Rdshifter_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中条件标志位值0000EQ相等Z=10001NE不相等Z=00010CS/HS无符号数大于/等于C=10011CC/LO无符号数小于C=00100MI负数N=10101PL非负数N=00110VS上溢出V=10111VC没有上溢出V=01000HI无符号数大于(Higher)C=1且Z=01001LS无符号数小于等于C=0或Z=11010GE带符号数大于等于N=1且V=1 或N=0且V=01011LT带符号数小于N=1且V=0 或N=0 且V=11100GT带符号数大于Z=0且N=V1101LE带符号数小于/等于Z=1或N!=V1110AL无条件执行1111NV该指令从不执行ARMv3之前未定义该指令执行结果不可预知ARMv3及ARMv4AL该指令无条件执行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通常有下
文档评论(0)