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