- 1、本文档共22页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
徐春雷ARM体系结构域编程第3章
第3章 ARM指令集介绍 在本章中将详细介绍各ARM指令,并给出了一些典型的ARM功能代码段。 3.1 ARM指令集 ARM指令集可以分为6类,即跳转指令、数据处理指令、程序状态寄存器(PSR)传输指令、Load/Store指令、协处理器指令和异常中断产生指令。 3.1.1 跳转指令 在ARM中有两种方式可以实现程序的跳转:一种是跳转指令;另一种是直接向PC寄存器(R15)中写入目标地址值。 ARM的跳转指令可以从当前指令向前或向后的32 MB的地址空间跳转。这类跳转指令有以下4种: B 跳转指令。 BL 带返回的跳转指令。 BLX 带返回和状态切换的跳转指令。 BX 带状态切换的跳转指令。 3.1.2 数据处理指令 数据处理指令包括以下指令: MOV 数据传送指令。 MVN 数据求反传送指令。 CMP 比较指令。 CMN 基于相反数的比较指令。 TST 位测试指令。 TEQ 相等测试指令。 ADD 加法指令。 SUB 减法指令。 RSB 逆向减法指令。 ADC 带位加法指令。 SBC 带位减法指令。 RSC 带位逆向减法指令。 AND 逻辑与操作指令。 BIC 位清除指令。 EOR 逻辑异或操作指令。 ORR 逻辑或操作指令。 3.1.3 乘法指令 ARM有两类乘法指令:一类为32位的乘法指令,即乘法操作的结果为32位;另一类为64位的乘法指令,即乘法操作的结果为64位。两类指令共有以下6条: MUL 32位乘法指令。 MLA 32位带加数的乘法指令。 SMULL 64位有符号数乘法指令。 SMLAL 64位带加数的有符号数乘法指令。 UMULL 64位无符号数乘法指令。 UMLAL 64位带加数的无符号数乘法指令。 3.1.4 杂类的算术指令 在ARM v5及以上的版本中包含一条特别的指令CLZ,用于计算操作数最高端0的个数。这条指令主要用于以下两种场合: 计算操作数规范化(使其最高位为1)时需要左移的位数。 确定一个优先级掩码中最高优先级(最高位的优先级)。 CLZ 前导0个数计数指令 CLZ指令用于计算寄存器中操作数最高端0的个数。如果操作数的bit[31]为1,则指令返回0;如果操作数为0,则指令返回32。 3.1.5 状态寄存器访问指令 ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。 状态寄存器访问指令包括以下两条: MRS 状态寄存器到通用寄存器的传送指令。 MSR 通用寄存器到状态寄存器的传送指令。 3.1.6 Load/Store 内存访问指令 用于操作32位的字类型数据以及8位无符号的字节类型数据的Load/Store指令有以下指令。 LDR 字数据读取指令。 LDRB 字节数据读取指令。 LDRBT 用户模式的字节数据读取指令。 LDRH 半字数据读取指令。 LDRSB 有符号的字节数据读取指令。 LDRSH 有符号的半字数据读取指令。 LDRT 用户模式的字数据读取指令。 STR 字数据写入指令。 STRB 字节数据写入指令。 STRBT 用户模式字节数据写入指令。 STRH 半字数据写入指令。 STRT 用户模式字数据写入指令。 3.1.7 批量 Load/Store 内存访问指令 批量Load/Store 内存访问指令的语法格式如下: LDM|STM{cond}addressing_mode Rn{!}, registers{^} 其中,操作数的寻址方式参见2.2节。 批量 Load/Store 内存访问指令主要有以下几条: LDM(1) 批量内存字数据读取指令。 LDM(2) 用户模式的批量内存字数据读取指令。 LDM(3) 带状态寄存器的批量内存字数据读取指令。 STM(1) 批量内存字数据写入指令。 STM(2) 用户模式的批量内存字数据写入指令。 3.1.8 信号量操作指令 信号量用于进程间的同步和互斥。对信号量的操作通常要求是一个原子操作,即在一条指令中完成信号量的读取和修改操作。ARM提供了如下两条指令完成信号量的操作: SWP 交换指令。 SWPB 字节交换指令。 3.1.9 异常中断产生指令 ARM有两条异常中断产生指令:软中断指令SWI用于产生SWI异常中断,ARM正是通过这种机制实现在用户模式对操作系统中特权模式的程序的调用;断点中断指令BKPT在ARM v5及以上的版本中引入,主要用于产生软件断点,供调试程序使用。 SWI 软中断指令。 BKPT 断点中断指令。 3.1.10 ARM协处理器指令 ARM协处理器指令包括以下3类: 用于ARM处理器初始化ARM协处理器的数据处理操作。 用于ARM处理器的寄存器和ARM协处理器的寄存器间的数据传送操
文档评论(0)