ARM体系结构与编程(第2版)-ppt.ppt
《ARM体系结构与编程(第2版)-ppt.ppt》由会员分享,可在线阅读,更多相关《ARM体系结构与编程(第2版)-ppt.ppt(342页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2第第2章章 ARM指令分类及其寻址方式指令分类及其寻址方式在本章中,将介绍在本章中,将介绍ARM指令分类以及各类指令对指令分类以及各类指令对应的寻址方式。应的寻址方式。32.1 ARM指令集概要介绍指令集概要介绍在本节中,将介绍在本节中,将介绍ARM指令相关的一些基本概念,指令相关的一些基本概念,包括指令的分类、指令的一般编码格式以及包括指令的分类、指令的一般编码格式以及ARM指令中的条件码。指令中的条件码。42.1.1 ARM指令的分类指令的分类ARM指令集可以分为跳转指令、数据处理指令、指令集可以分为跳转指令、数据处理指令、程序状态寄存器程序状态寄存器(PSR)传输指令、传输指令、Loa
2、d/Store指令、协处理器指令和异常中断产生指令指令、协处理器指令和异常中断产生指令6类。类。52.1.2 ARM指令的一般编码格式指令的一般编码格式ARM指令字长为固定的指令字长为固定的32位。一条典型的位。一条典型的ARM指指令编码格式如下:令编码格式如下:31 28 27 25 24 21 20 19 16 15 12 11 8 7 0其中的符号及参数说明如下。其中的符号及参数说明如下。opcode:指令操作符编码。cond:指令执行的条件编码。S:决定指令的操作是否影响CPSR的值。Rd:目标寄存器编码。Rn:包含第1个操作数的寄存器编码。shifter_operand:表示第2个操
3、作数。62.1.3 ARM指令的条件码域指令的条件码域条件码共有条件码共有16个,各条件码的含义和助记符如表个,各条件码的含义和助记符如表2.1所示。可条件执行的指令可以在其助记符的扩所示。可条件执行的指令可以在其助记符的扩展域加上条件码助记符,从而在特定的条件下执行。展域加上条件码助记符,从而在特定的条件下执行。参见教材P2372.2 ARM指令的寻址方式指令的寻址方式ARM指令的寻址方式有以下几种,分别进行讨论:指令的寻址方式有以下几种,分别进行讨论:数据处理指令的操作数的寻址方式。字及无符号字节的Load/Store指令的寻址方式。杂类Load/Store指令的寻址方式。批量Load/S
4、tore指令的寻址方式。协处理器Load/Store指令的寻址方式。82.2.1 数据处理指令的操作数的寻址方式数据处理指令的操作数的寻址方式通常数据处理指令的格式如下所示:通常数据处理指令的格式如下所示: S , 其中的符号及参数说明如下。其中的符号及参数说明如下。:是指令助记符,如ADD表示算术加操作指令。:表示指令执行的条件。S:决定指令的操作是否影响CPSR的值。:表示目标寄存器。:表示包含第1个操作数的寄存器。:表示第2个操作数。92.2.1 数据处理指令的操作数的寻址方式数据处理指令的操作数的寻址方式通常有下面通常有下面3种格式。种格式。(1)立即数方式。(2)寄存器方式。(3)寄
5、存器移位方式。数据处理指令操作数的具体寻址方式有下面数据处理指令操作数的具体寻址方式有下面11种。种。#, LSL #, LSL , LSR #, LSR , ASR #, ASR , ROR #, ROR , RRX102.2.2 字及无符号字节的字及无符号字节的Load/Store指令的寻址方式指令的寻址方式各种类型的各种类型的Load/Store指令的寻址方式由两部分组指令的寻址方式由两部分组成。一部分为一个的基址寄存器;另一部分为一个成。一部分为一个的基址寄存器;另一部分为一个地址偏移量。基址寄存器可以为任一个通用寄存地址偏移量。基址寄存器可以为任一个通用寄存器;地址偏移量可以有以下器
6、;地址偏移量可以有以下3种格式:种格式:立即数。寄存器。寄存器及一个移位常数。同样,寻址方式的地址计算方法有如下同样,寻址方式的地址计算方法有如下3种:种:偏移量方法。事先更新方法。事后更新方法。112.2.2 字及无符号字节的字及无符号字节的Load/Store指令的寻址方式指令的寻址方式LDR指令的语法格式如下所示:指令的语法格式如下所示: LDRB T,其中,其中,表示第表示第2个操作数的内存个操作数的内存地址,共有如下地址,共有如下9种格式:种格式:, #+/, +/, +/,#, #+/!, +/!, +/,#!, #+/, +/, +/,#122.2.3 杂类杂类Load/Stor
7、e指令的寻址方式指令的寻址方式这里所说的杂类这里所说的杂类Load/Store指令,包括操作数为半字指令,包括操作数为半字(无符无符号数或带符号数号数或带符号数)数据的数据的Load/Store指令;操作数为带符号指令;操作数为带符号的字节数据的的字节数据的Load 指令;双字的指令;双字的Load/Store指令。这类指指令。这类指令的语法格式为:令的语法格式为: LDR|STRH|SH|SB|D , 其中,其中,是指令中内存单元的寻址方是指令中内存单元的寻址方式,具体有以下式,具体有以下6种格式:种格式:, #+/, +/, #+/!, +/!, #+/, +/132.2.4 批量批量Lo
8、ad/Store指令的寻址方式指令的寻址方式一条批量一条批量Load/Store指令可以实现在一组寄存器和指令可以实现在一组寄存器和一块连续的内存单元之间传输数据。其语法格式如一块连续的内存单元之间传输数据。其语法格式如下:下:DM|STM !, 其中,指令中寄存器和内存单元的对应关系满足这其中,指令中寄存器和内存单元的对应关系满足这样的规则,即编号低的寄存器对应于内存中的低地样的规则,即编号低的寄存器对应于内存中的低地址单元,编号高的寄存器对应于内存中的高地址单址单元,编号高的寄存器对应于内存中的高地址单元,元,中存放地址块的最低地址值。中存放地址块的最低地址值。142.2.4 批量批量Lo
9、ad/Store指令的寻址方式指令的寻址方式表示地址的变化方式,有以表示地址的变化方式,有以下下4种方式。种方式。IA (Increment After):事后递增方式。IB (Increment Before):事先递增方式。DA (Decrement After):事后递减方式。DB (Decrement Before):事先递减方式。批量批量Load/Store指令的编码格式如下:指令的编码格式如下:152.2.4 批量批量Load/Store指令的寻址方式指令的寻址方式1. 事后递增方式事后递增方式IA2. 事先递增方式事先递增方式IB3. 事后递减方式事后递减方式DA4. 事先递减方
10、式事先递减方式DB5. 对应于栈操作的寻址方式对应于栈操作的寻址方式162.2.5 协处理器协处理器Load/Store指令的寻址方式指令的寻址方式一条协处理器一条协处理器Load/Store指令可以在指令可以在ARM处理器和协处理处理器和协处理器之间传输批量数据。其语法格式如下:器之间传输批量数据。其语法格式如下:L ,其中,其中,表示地址的变化方式,有以下表示地址的变化方式,有以下4种格式:种格式:,#+/*4,#+/*4!,#+/*4,协处理器协处理器Load/Store指令的编码格式如下所示。指令的编码格式如下所示。172.2.5 协处理器协处理器Load/Store指令的寻址方式指令
11、的寻址方式1. 偏移量偏移量 ,#+/*42. 事先更新事先更新 ,#+/*4!3. 事先更新事先更新,#+/*44. 非索引非索引 ,19第第3章章 ARM指令集介绍指令集介绍在本章中,将详细介绍各在本章中,将详细介绍各ARM指令,并给指令,并给出一些典型的出一些典型的ARM功能代码段。功能代码段。203.1 ARM指令集指令集ARM指令集可以分为指令集可以分为6类,即跳转指令、数据处理类,即跳转指令、数据处理指令、程序状态寄存器指令、程序状态寄存器(PSR)传输指令、传输指令、Load/Store指令、协处理器指令和异常中断产生指指令、协处理器指令和异常中断产生指令。令。为了更清楚地描述这
12、些指令,将一些大类的指令进为了更清楚地描述这些指令,将一些大类的指令进一步分为几个小类分别讲述。一步分为几个小类分别讲述。213.1.1 跳转指令跳转指令在在ARM中,有两种方式可以实现程序的跳转:一种是跳转中,有两种方式可以实现程序的跳转:一种是跳转指令;另一种是直接向指令;另一种是直接向PC寄存器寄存器(R15)中写入目标地址值。中写入目标地址值。在在ARM版本版本5以前的体系中,传送到以前的体系中,传送到PC寄存器中的目标地寄存器中的目标地址值的低两位址值的低两位bits1:0被忽略,跳转指令只能在被忽略,跳转指令只能在ARM指令指令集中执行,即程序不能从集中执行,即程序不能从ARM状态
13、切换到状态切换到Thumb状态。状态。非非T系列版本系列版本5的的ARM体系不含体系不含Thumb指令,当程序试图切指令,当程序试图切换到换到Thumb状态时,将产生未定义指令异常中断。状态时,将产生未定义指令异常中断。ARM的跳转指令可以从当前指令向前或向后的跳转指令可以从当前指令向前或向后32MB的地址空的地址空间跳转。这类跳转指令有以下间跳转。这类跳转指令有以下4种。种。B:跳转指令。BL:带返回的跳转指令。BLX:带返回和状态切换的跳转指令。BX:带状态切换的跳转指令。223.1.1 跳转指令跳转指令1. B(跳转指令跳转指令)及及BL(带返回的跳转指令带返回的跳转指令)2. BLX(
14、1) 3. BLX(2)4. BX指令指令233.1.2 数据处理指令数据处理指令数据处理指令又可大致分为数据处理指令又可大致分为3类:数据传送指令,类:数据传送指令,如如MOV;算术逻辑运算指令,如;算术逻辑运算指令,如ADD、SUB和和AND等;比较指令,如等;比较指令,如TST。数据处理指令包括以下指令。数据处理指令包括以下指令。MOV:数据传送指令。MVN:数据求反传送指令。CMP:比较指令。CMN:基于相反数的比较指令。TST:位测试指令。TEQ:相等测试指令。ADD:加法指令。SUB:减法指令。243.1.2 数据处理指令数据处理指令RSB:逆向减法指令。ADC:带位加法指令。SB
15、C:带位减法指令。RSC:带位逆向减法指令。AND:逻辑与操作指令。BIC:位清除指令。EOR:逻辑异或操作指令。ORR:逻辑或操作指令。253.1.3 乘法指令乘法指令ARM有两类乘法指令:一类为有两类乘法指令:一类为32位的乘法指令,位的乘法指令,即乘法操作的结果为即乘法操作的结果为32位;另一类为位;另一类为64位的乘法指位的乘法指令,即乘法操作的结果为令,即乘法操作的结果为64位。两类指令共有以下位。两类指令共有以下6条。条。MUL:32位乘法指令。MLA:32位带加数的乘法指令。SMULL:64位有符号数乘法指令。SMLAL:64位带加数的有符号数乘法指令。UMULL:64位无符号数
16、乘法指令。UMLAL:64位带加数的无符号数乘法指令。263.1.4 杂类的算术指令杂类的算术指令在在ARMv5及以上的版本中,包含一条特别的指令及以上的版本中,包含一条特别的指令CLZ,用,用于计算操作数最高端于计算操作数最高端0的个数。这条指令主要用于以下两种的个数。这条指令主要用于以下两种场合:场合:计算操作数规范化(使其最高位为1)时需要左移的位数。确定一个优先级掩码中的最高优先级(最高位的优先级)。CLZ 前导前导0个数计数指令个数计数指令CLZ指令用于计算寄存器中操作数最高端指令用于计算寄存器中操作数最高端0的个数。如果操的个数。如果操作数的作数的bit31为为1,则指令返回,则指
17、令返回0;如果操作数为;如果操作数为0,则指令,则指令返回返回32。指令的编码格式指令的编码格式273.1.5 状态寄存器访问指令状态寄存器访问指令ARM中有两条指令用于在状态寄存器和通用寄存器中有两条指令用于在状态寄存器和通用寄存器之间传送数据。之间传送数据。关于状态寄存器,这里仅强调以下几点。关于状态寄存器,这里仅强调以下几点。(1)状态寄存器中,有些位是当前没有使用的,但在ARM将来的版本中有可能使用这些位,因此用户程序不要使用这些位。(2)程序不能通过直接修改CPSR中的T控制位直接将程序状态切换到Thumb状态,必须通过BX等指令完成程序状态的切换。(3)通常修改状态寄存器是通过“读
18、取-修改-写回”的操作序列来实现的。(4)状态寄存器访问指令包括以下两条。MRS:状态寄存器到通用寄存器的传送指令。MSR:通用寄存器到状态寄存器的传送指令。283.1.6 Load/Store 内存访问指令内存访问指令Load指令用于从内存中读取数据放入寄存器中;指令用于从内存中读取数据放入寄存器中;Store指令用于将寄存器中的数据保存到内存。指令用于将寄存器中的数据保存到内存。ARM有两大类的有两大类的Load/Store指令:一类用于操作指令:一类用于操作32位的字类型数据以及位的字类型数据以及8位无符号的字节类型数位无符号的字节类型数据;另一类用于操作据;另一类用于操作16位半字类型
19、的数据以及位半字类型的数据以及8位位的有符号字节类型的数据。的有符号字节类型的数据。Load/Store 内存访问指令的一个操作数放在寄存内存访问指令的一个操作数放在寄存器中,另一个操作数的寻址方式参见器中,另一个操作数的寻址方式参见2.2节。节。293.1.6 Load/Store 内存访问指令内存访问指令用于操作用于操作32位的字类型数据以及位的字类型数据以及8位无符号的字节类型数据位无符号的字节类型数据的的Load/Store指令有以下指令。指令有以下指令。LDR:字数据读取指令。LDRB:字节数据读取指令。LDRBT:用户模式的字节数据读取指令。LDRH:半字数据读取指令。LDRSB:
20、有符号的字节数据读取指令。LDRSH:有符号的半字数据读取指令。LDRT:用户模式的字数据读取指令。STR:字数据写入指令。STRB:字节数据写入指令。STRBT:用户模式字节数据写入指令。STRH:半字数据写入指令。STRT:用户模式字数据写入指令。303.1.7 批量批量 Load/Store 内存访问指令内存访问指令批量批量 Load 内存访问指令可以一次从连续的内存单内存访问指令可以一次从连续的内存单元中读取数据,传送到指令中的内存列表中的各个元中读取数据,传送到指令中的内存列表中的各个寄存器中。寄存器中。批量批量Store内存访问指令可以将指令中寄存器列表内存访问指令可以将指令中寄存
21、器列表中的各个寄存器值写入到内存中,内存的地址由指中的各个寄存器值写入到内存中,内存的地址由指令中的寻址模式确定。令中的寻址模式确定。批量批量Load/Store内存访问指令的语法格式如下:内存访问指令的语法格式如下: LDM|STM Rn!, 其中,操作数的寻址方式参见其中,操作数的寻址方式参见2.2节。节。313.1.7 批量批量 Load/Store 内存访问指令内存访问指令批量批量 Load/Store 内存访问指令主要有以下几条。内存访问指令主要有以下几条。LDM(1):批量内存字数据读取指令。LDM(2):用户模式的批量内存字数据读取指令。LDM(3):带状态寄存器的批量内存字数据
22、读取指令。STM(1):批量内存字数据写入指令。STM(2):用户模式的批量内存字数据写入指令。323.1.8 信号量操作指令信号量操作指令信号量用于进程间的同步和互斥。对信号量的操作信号量用于进程间的同步和互斥。对信号量的操作通常要求是一个原子操作,即在一条指令中完成信通常要求是一个原子操作,即在一条指令中完成信号量的读取和修改操作。号量的读取和修改操作。ARM提供了如下两条指令提供了如下两条指令来完成信号量的操作。来完成信号量的操作。SWP:交换指令。SWPB:字节交换指令。333.1.9 异常中断产生指令异常中断产生指令ARM有两条异常中断产生指令。有两条异常中断产生指令。SWI:软中断
23、指令。SWI用于产生SWI异常中断,ARM正是通过这种机制实现在用户模式中对操作系统中特权模式的程序的调用。BKPT:断点中断指令。BKPT在ARMv5及以上的版本中引入,主要用于产生软件断点,供调试程序使用。343.1.10 ARM协处理器指令协处理器指令ARM支持支持16个协处理器。个协处理器。ARM协处理器可以部分地执行一条指令,然后产生异常中协处理器可以部分地执行一条指令,然后产生异常中断,如像除法运算除数为断,如像除法运算除数为0的情况。所有这些操作均由的情况。所有这些操作均由ARM协处理器决定,协处理器决定,ARM处理器并不参与这些操作。同样,处理器并不参与这些操作。同样,ARM协
24、处理器指令中的协处理器的寄存器标识符以及操作协处理器指令中的协处理器的寄存器标识符以及操作类型助记符也有各种不同的实现定义,程序员可以通过宏来类型助记符也有各种不同的实现定义,程序员可以通过宏来定义这些指令的语法格式。定义这些指令的语法格式。ARM协处理器指令包括以下协处理器指令包括以下3类:类:用于ARM处理器初始化ARM协处理器的数据处理操作。用于ARM处理器的寄存器和ARM协处理器的寄存器间的数据传送操作。用于在ARM协处理器的寄存器和内存单元之间传送数据。353.1.10 ARM协处理器指令协处理器指令这些指令包括以下这些指令包括以下5条。条。CDP:协处理器数据操作指令。LDC:协处
25、理器数据读取指令。STC:协处理器数据写入指令。MCR:ARM寄存器到协处理器寄存器的数据传送指令。MRC:协处理器寄存器到ARM寄存器的数据传送指令。363.2 一些基本的一些基本的ARM指令功能段指令功能段本节介绍一些基本的本节介绍一些基本的ARM指令代码段。通过对这些指令代码段。通过对这些代码段的分析,进一步理解相关的代码段的分析,进一步理解相关的ARM指令的用指令的用法,逐步学习如何使用法,逐步学习如何使用ARM指令编写高效率的程指令编写高效率的程序。本节主要包括以下几部分的内容:序。本节主要包括以下几部分的内容:算术逻辑运算指令的应用。跳转指令的应用。Load/Store指令的应用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 体系结构 编程 ppt
限制150内