ARM微处理器的指令集-指令系统.ppt

上传人:wuy****n92 文档编号:70725569 上传时间:2023-01-27 格式:PPT 页数:146 大小:1.29MB
返回 下载 相关 举报
ARM微处理器的指令集-指令系统.ppt_第1页
第1页 / 共146页
ARM微处理器的指令集-指令系统.ppt_第2页
第2页 / 共146页
点击查看更多>>
资源描述

《ARM微处理器的指令集-指令系统.ppt》由会员分享,可在线阅读,更多相关《ARM微处理器的指令集-指令系统.ppt(146页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、ARM ARM 微处理器的指令集微处理器的指令集q1.ARM1.ARM处理器寻址方式处理器寻址方式q2.ARM2.ARM指令集指令集Resources:http:/assembler/ARM 微处理器的指令集微处理器的指令集nARM微处理器的工作状态有两种:微处理器的工作状态有两种:nARM状态,此时处理器执行32位的、字对齐的ARM指令;nThumb状态,此时处理器执行16位的、半字对齐的Thumb指令。n在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。ARM 微处理器的指令集微处理器的指令集ARM指令集支持

2、指令集支持ARM核所有的特性,具有高核所有的特性,具有高效、快速的特点。效、快速的特点。nThumb指令集具有灵活、小巧的特点。指令集具有灵活、小巧的特点。ARM状态下的寄存器组织(2)37个个32位寄存器,位寄存器,其中其中31个为通用寄存个为通用寄存器,器,6个为状态寄存个为状态寄存器。器。用户模式、用户模式、系统模式系统模式快速中断快速中断模式模式管理模式管理模式数据访问数据访问终止模式终止模式外部中断外部中断模式模式未定义指未定义指令中止模令中止模式式未分组寄存器R0R7n在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊用途。n在中断或异常处理进行运行模式转

3、换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。分组寄存器R8R12nR8R12:每个寄存器对应两个不同的物理寄存器n当使用fiq模式时,访问寄存器R8_fiqR12_fiq;n当使用除fiq模式以外的其他模式时,访问寄存器R8_usrR12_usr。分组寄存器R13R14R13、R14:每个寄存器对应每个寄存器对应6个不同的物理寄存器个不同的物理寄存器其中的一个是用户模式与系统模式共用,另外其中的一个是用户模式与系统模式共用,另外5个个物理寄存器对应于其他物理寄存器对应于其他5种不同的运行模式种不同的运行模式堆栈指针R13

4、R13在在ARM指令中常用作堆栈指针,但这只是一指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆种习惯用法,用户也可使用其他的寄存器作为堆栈指针。栈指针。在在Thumb指令集中,某些指令强制性的要求使用指令集中,某些指令强制性的要求使用R13作为堆栈指针。作为堆栈指针。由于处理器的每种运行模式均有自己独立的物理由于处理器的每种运行模式均有自己独立的物理寄存器寄存器R13,在初始化部分,都要初始化每种模在初始化部分,都要初始化每种模式下的式下的R13,这样,当程序的运行进入异常模式这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入时,可以将需要保护的寄存器放入

5、R13所指向的所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复堆栈中恢复子程序连接寄存器R14子程序连接寄存器或连接寄存器子程序连接寄存器或连接寄存器LR。当执行当执行BL子程序调用指令时,可以从子程序调用指令时,可以从R14中得到中得到R15(程程序计数器序计数器PC)的备份。在每一种运行模式下,都可用的备份。在每一种运行模式下,都可用R14保存子程序的返回地址,当用保存子程序的返回地址,当用BL或或BLX指令调用子程序指令调用子程序时,将时,将PC的当前值拷贝给的当前值拷贝给R14,执行完子程序后,又将执行完子程序后,又将R14的值拷贝

6、回的值拷贝回PC,即可完成子程序的调用返回。即可完成子程序的调用返回。BLSUB1SUB1:STMFDSP!,LR/*将将R14存入堆栈存入堆栈*/LDMFDSP!,PC/*完成子程序返回完成子程序返回*/程序计数器PC(R15)ARM状态下,位状态下,位1:0为为0,位,位31:2用于保存用于保存PC;Thumb状态下,位状态下,位0为为0,位,位31:1用于保存用于保存PC;R15虽然也可用作通用寄存器,但一般不这么使用虽然也可用作通用寄存器,但一般不这么使用,因为,因为对对R15的使用有一些特殊的限制,当违反了这些限制时,的使用有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的

7、。程序的执行结果是未知的。由于由于ARM体系结构采用了多级流水线技术,对于体系结构采用了多级流水线技术,对于ARM指指令集而言,令集而言,PC总是指向当前指令的下两条指令的地址,总是指向当前指令的下两条指令的地址,即即PC的值为当前指令的地址值加的值为当前指令的地址值加8个字节。个字节。程序状态寄存器(CPSR/SPSR)n寄存器R16用作CPSR(当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态当前处理器模式标志位,以及其他一些相关的控制和状态位。位。每一种运行模式下又都有一

8、个专用的物理状态寄存器,称每一种运行模式下又都有一个专用的物理状态寄存器,称为为SPSR(备份的程序状态寄存器),异常发生时,备份的程序状态寄存器),异常发生时,SPSR用于保存用于保存CPSR的值,从异常退出时则可由的值,从异常退出时则可由SPSR来恢复来恢复CPSR。由于用户模式和系统模式不属于异常模式,他们没有由于用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问当在这两种模式下访问SPSR,结果是未知的。结果是未知的。1 ARM处理器寻址方式处理器寻址方式n寻址方式分类寻址方式分类 寻寻址址方方式式是是根根据据指指令令中中给给出出的的地地址址码码字字段段来来实实现

9、现寻寻找找真真实实操操作作数数地地址址的的方方式式。ARMARM处处理理器具有器具有9 9种基本寻址方式。种基本寻址方式。1.1.寄存器寻址;寄存器寻址;2.2.立即寻址;立即寻址;3.3.寄存器移位寻址;寄存器移位寻址;4.4.寄存器间接寻址;寄存器间接寻址;5.5.基址寻址;基址寻址;6.6.多寄存器寻址;多寄存器寻址;7.7.堆栈寻址;堆栈寻址;8.8.块拷贝寻址;块拷贝寻址;9.9.相对寻址。相对寻址。操操作作数数的的值值在在寄寄存存器器中中,指指令令中中的的地地址址码码字字段段指指出出的的是是寄寄存存器器编编号号,指指令令执执行行时时直直接接取取出出寄寄存存器器值值来来操操作作。寄寄

10、存存器器寻寻址址指指令令举举例如下:例如下:MOV R1,R2 ;将将R2的值存入的值存入R1 SUB R0,R1,R2 ;将将R1的的值值减减去去R2的的值,结果保存到值,结果保存到R0 0 xAA0 x55R2R11 ARM处理器寻址方式处理器寻址方式n寻址方式分类寻址方式分类寄存器寻址寄存器寻址MOV R1,R20 xAA 立立即即寻寻址址指指令令中中的的操操作作码码字字段段后后面面的的地地址址码码部部分分即即是是操操作作数数本本身身,也也就就是是说说,数数据据就就包包含含在在指指令令当当中中,取取出出指指令令也也就就取取出出了了可可以以立立即即使使用用的的操操作作数数(这这样样的的数数

11、称称为为立即数立即数)。立即寻址指令举例如下:。立即寻址指令举例如下:SUBSR0,R0,#1 ;R0减减1,结结果果放入放入R0,并且影响标志位,并且影响标志位MOV R0,#0 xFF000 ;将将立立即即数数0 xFF000装入装入R0寄存器寄存器 0 x55R0MOV R0,#0 xFF00程序存储1 ARM处理器寻址方式处理器寻址方式n寻址方式分类立即寻址MOV R0,#0 xFF000 xFF00从代码中获得数据 寄寄存存器器移移位位寻寻址址是是ARMARM指指令令集集特特有有的的寻寻址址方方式式。当当第第2 2个个操操作作数数是是寄寄存存器器移移位位方方式式时时,第第2 2个个寄

12、寄存存器器操操作作数数在在与与第第1 1个个操操作作数数结结合合之之前前,选选择择进进行行移移位位操操作作。寄寄存存器器移位寻址指令举例如下:移位寻址指令举例如下:MOV R0,R2,LSL#3;R2的的值值左左移移3位位,结结果果放放入入R0,;即是即是R0=R28 ANDSR1,R1,R2,LSL R3;R2的值左移的值左移R3位,然后位,然后 ;和和R1相相“与与”操作,结果放入操作,结果放入R10 x55R0R20 x011 ARM处理器寻址方式处理器寻址方式n寻址方式分类寄存器移位寻址MOV R0,R2,LSL#30 x080 x08逻辑左移3位 寄寄存存器器间间接接寻寻址址指指令令

13、中中的的地地址址码码给给出出的的是是一一个个通通用用寄寄存存器器的的编编号号,所所需需的的操操作作数数保保存存在在寄寄存存器器指指定定地地址址的的存存储储单单元元中中,即即寄寄存存器器为为操操作作数的地址指针。例如:数的地址指针。例如:LDR R1,R2;将将R2指向的存储单元的数据指向的存储单元的数据;读出保存在读出保存在R1中中 SWP R1,R1,R2;将寄存器将寄存器R1的值和的值和R2;指定的存储单元的内容交换指定的存储单元的内容交换 0 x55R0R2 0 x400000000 xAA0 x400000001 ARM处理器寻址方式处理器寻址方式n寻址方式分类寻址方式分类寄存器间接寻

14、址寄存器间接寻址LDR R0,R20 xAA 基基址址寻寻址址就就是是将将基基址址寄寄存存器器的的内内容容与与指指令令中中给给出出的的偏偏移移量量(4K4K)相相加加/减减,形形成成操操作作数数的的有有效效地地址址。基基址址寻寻址址用用于于访访问问基基址址附附近近的的存存储储单单元元,常常用用于于查查表表、数数组组操操作作、功功能能部部件件寄寄存存器器访访问问等等。寄寄存存器器间间接接寻寻址址是偏移量为是偏移量为0 0的基址加偏移寻址。的基址加偏移寻址。基址寻址指令举例如下基址寻址指令举例如下(前索引寻址前索引寻址):LDR R2,R3,#0 x0C;读取读取R3+0 x0C地址上的地址上的

15、;存储单元的内容,放入存储单元的内容,放入R2 STR R1,R0,#-4!;先先R0=R0-4,然后把,然后把R1的值的值;寄存到保存到寄存到保存到R0指定的存储单元指定的存储单元 1 ARM处理器寻址方式处理器寻址方式n寻址方式分类寻址方式分类基址寻址基址寻址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA将R3+0 x0C作为地址装载数据 基址寻址指令举例如下:基址寻址指令举例如下:LDR R0,R1,#4;R0=R1,R1R14 ;后索引基址寻址后索引基址寻址 LDR R0,R1,R2 ;R0=R1+R21 ARM处理

16、器寻址方式处理器寻址方式n寻址方式分类寻址方式分类基址寻址基址寻址 多多寄寄存存器器寻寻址址一一次次可可传传送送几几个个寄寄存存器器值值,允允许许一一条条指指令令传传送送1616个个寄寄存存器器的的任任何何子子集集或或所所有有寄寄存器。多寄存器寻址指令举例如下:存器。多寄存器寻址指令举例如下:LDMIAR1!,R2-R7,R12 ;将将R1指指向向的的单单元元中中的的数数据据读读出出到到R2R7、R12中中(R1自自动动加加4)STMIAR0!,R2-R7,R12 ;将将寄寄存存器器R2R7、R12的的值值保保存存到到R0指指向向的的存存储储;单单元元中中(R0自动加自动加4)0 x40000

17、000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存储器1 ARM处理器寻址方式处理器寻址方式n寻址方式分类寻址方式分类多寄存器寻址多寄存器寻址LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000010 堆堆栈栈是是一一个个按按特特定定顺顺序序进进行行存存取取的的存存储储区区,操操作作顺顺序序为为“后后进进先先出出”。堆堆栈栈寻寻址址是是隐隐含含的的,它它使使用用一一个个专专门门的的寄寄存存器器(堆堆栈栈指指针针)指指

18、向向一一块块存存储储区区域域(堆堆栈栈),指指针针所所指指向向的的存存储储单单元元即即是是堆堆栈栈的的栈栈顶顶。存存储器堆栈可分为两种:储器堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈向下生长:向低地址方向生长,称为递减堆栈1 ARM处理器寻址方式处理器寻址方式n寻址方式分类寻址方式分类堆栈寻址堆栈寻址1 ARM处理器寻址方式处理器寻址方式n寻址方式分类寻址方式分类堆栈寻址堆栈寻址栈底栈底栈顶栈顶栈区栈区SP堆栈存堆栈存储区储区栈顶栈顶栈底栈底栈区栈区SP向下向下增长增长向上向上增长增长0 x12345

19、6780 x12345678堆栈压栈堆栈压栈堆栈压栈堆栈压栈栈顶SP栈顶SP栈底栈底空堆栈空堆栈栈底栈底满堆栈满堆栈 堆堆栈栈指指针针指指向向最最后后压压入入的的堆堆栈栈的的有有效效数数据据项项,称称为为满满堆堆栈栈;堆堆栈栈指指针针指指向向下下一一个个待待压入数据的空位置,称为压入数据的空位置,称为空堆栈空堆栈。1 ARM处理器寻址方式处理器寻址方式n寻址方式分类寻址方式分类堆栈寻址堆栈寻址0 x123456780 x12345678栈顶栈顶SP0 x12345678栈顶栈顶SP压栈压栈压栈压栈所以可以组合出四种类型的堆栈方式:所以可以组合出四种类型的堆栈方式:满满递递增增:堆堆栈栈向向上上

20、增增长长,堆堆栈栈指指针针指指向向内内含含有有效效数数据项的最高地址。指令如据项的最高地址。指令如LDMFALDMFA、STMFASTMFA等;等;空空递递增增:堆堆栈栈向向上上增增长长,堆堆栈栈指指针针指指向向堆堆栈栈上上的的第第一个空位置。指令如一个空位置。指令如LDMEALDMEA、STMEASTMEA等;等;满满递递减减:堆堆栈栈向向下下增增长长,堆堆栈栈指指针针指指向向内内含含有有效效数数据项的最低地址。指令如据项的最低地址。指令如LDMFDLDMFD、STMFDSTMFD等;等;空空递递减减:堆堆栈栈向向下下增增长长,堆堆栈栈指指针针向向堆堆栈栈下下的的第第一一个空位置。指令如个空

21、位置。指令如LDMEDLDMED、STMEDSTMED等。等。1 ARM处理器寻址方式处理器寻址方式n寻址方式分类寻址方式分类堆栈寻址堆栈寻址 多多寄寄存存器器传传送送指指令令用用于于将将一一块块数数据据从从存存储储器的某一位置拷贝到另一位置。器的某一位置拷贝到另一位置。如:如:STMIAR0!,R1-R7;将将R1R7的的数数据据保保存存到到存存储储器器中中。存存储储指指针针R0在在保保存存第第一一个个值值之之后后增加,增长方向为向上增长。增加,增长方向为向上增长。1 ARM处理器寻址方式处理器寻址方式n寻址方式分类寻址方式分类块拷贝寻址块拷贝寻址 相相对对寻寻址址是是基基址址寻寻址址的的一

22、一种种变变通通。由由程程序序计计数数器器PCPC提提供供基基准准地地址址,指指令令中中的的地地址址码码字字段段作作为为偏偏移移量量,两两者者相相加加后后得得到到的的地地址址即即为为操操作作数数的的有有效效地地址址。相对寻址指令举例如下:相对寻址指令举例如下:BL SUBR1;调用到调用到SUBR1子程序子程序 BEQLOOP;条件跳转到条件跳转到LOOP标号处标号处 .LOOP MOVR6,#1.SUBR1.1 ARM处理器寻址方式处理器寻址方式n寻址方式分类寻址方式分类相对寻址相对寻址n1 ARM指令集指令集 简单的简单的ARM程序程序;文件名:文件名:TEST1.S;功能:实现两个寄存器相

23、加功能:实现两个寄存器相加;说明:使用说明:使用ARMulate软件仿真调试软件仿真调试 AREAExample1,CODE,READONLY ;声明代码段声明代码段Example1 ENTRY ;标识程序入口标识程序入口 CODE32 ;声明声明32位位ARM指令指令START MOVR0,#0 ;设置参数设置参数 MOVR1,#10LOOPBLADD_SUB ;调用子程序调用子程序ADD_SUB BLOOP ;跳转到跳转到LOOPADD_SUB ADDSR0,R0,R1 ;R0=R0+R1 MOVPC,LR ;子程序返回子程序返回 END ;文件文件结结束束 使用“;”进行注释标号顶格写实

24、际代码段声明文件结束n简单的ARM程序;文件名:文件名:TEST1.S;功能:实现两个寄存器相加功能:实现两个寄存器相加;说明:使用说明:使用ARMulate软件仿真调试软件仿真调试 AREAExample1,CODE,READONLY ;声明代码段声明代码段Example1 ENTRY ;标识程序入口标识程序入口 CODE32 ;声明声明32位位ARM指令指令START MOVR0,#0 ;设置参数设置参数 MOVR1,#10LOOPBLADD_SUB ;调用子程序调用子程序ADD_SUB BLOOP ;跳转到跳转到LOOPADD_SUB ADDSR0,R0,R1 ;R0=R0+R1 MOV

25、PC,LR ;子程序返回子程序返回 END ;文件文件结结束束 ARM指令小节目录指令小节目录1.1.指令格式指令格式2.2.条件码条件码3.3.存储器访问指令存储器访问指令4.4.数据处理指令数据处理指令5.5.乘法指令乘法指令6.ARM6.ARM分支指令分支指令7.7.杂项指令杂项指令8.8.伪指令伪指令 ARM ARM是三地址指令格式,指令的基本格式如下:是三地址指令格式,指令的基本格式如下:1 ARM指令集介绍指令集介绍nARM指令集指令集基本基本指令格式指令格式 S ,其其中中号号内内的的项项是是必必须须的的,号号内内的的项项是是可可选选的的。各项的说明如下:各项的说明如下:opco

26、de:指令助记符;:指令助记符;cond:执行条件;执行条件;S:是否影响:是否影响CPSRCPSR寄存器的值;寄存器的值;Rd:目标寄存器;:目标寄存器;Rn:第:第1 1个操作数的寄存器;个操作数的寄存器;operand2:第:第2 2个操作数;个操作数;指令语法指令语法目标寄存器目标寄存器(Rd)源寄存器源寄存器1(Rn)源寄存器源寄存器2(Rm)ADD r3,r1,r2r3r1r2例例:ARMARM指令的基本格式如下:指令的基本格式如下:1 ARM指令集介绍指令集介绍nARM指令集指令集第第2个操作数个操作数 S ,灵灵活活的的使使用用第第2 2个个操操作作数数“operand2”能能

27、够够提高代码效率。它有如下的形式:提高代码效率。它有如下的形式:#immed_8r#immed_8r常数表达式;常数表达式;RmRm寄存器方式;寄存器方式;Rm,shiftRm,shift寄存器移位方式;寄存器移位方式;1 ARM指令集介绍指令集介绍nARM指令集指令集第第2个操作数个操作数#immed_8r#immed_8r常数表达式常数表达式例如:例如:ANDR1,R2,#0 x0F说明:说明:ADD条件条件S,dest=op_1+op_2 ADD将把两个操作数加起来,把结果放置到目的寄存器中。将把两个操作数加起来,把结果放置到目的寄存器中。操操作作数数 1 是是一一个个寄寄存存器器,操操

28、作作数数 2 可可以以是是一一个个寄寄存存器器,被被移移位位的的寄寄存存器,或一个立即值器,或一个立即值:1 ARM指令集介绍指令集介绍nARM指令集指令集第第2个操作数个操作数RmRm寄存器方式寄存器方式 在在寄寄存存器器方方式式下下,操操作作数数即即为为寄寄存存器的数值。器的数值。例如:例如:SUB R1,R1,R2说明:说明:SUBSUB条件条件S S,destdest=op_1-op_2 =op_1-op_2 1 ARM指令集介绍指令集介绍nARM指令集指令集第第2个操作数个操作数Rm,shiftRm,shift寄存器移位方式寄存器移位方式 将将寄寄存存器器的的移移位位结结果果作作为为

29、操操作作数数(移移位位操操作作不不消消耗耗额额外外的的时时间间),但但RmRm值值保保持持不不变变,移移位方法如下:位方法如下:ADD R0,R2,R3,LSL#1;R0=R2+(R3 1)操作码操作码说明说明操作码操作码说明说明ASR#n算术右移算术右移n位位ROR#n循环右移循环右移n位位LSL#n逻辑左移逻辑左移n位位RRX带扩展的循环右移带扩展的循环右移1位位LSR#n逻辑右移逻辑右移n位位1 ARM指令集介绍指令集介绍nARM指令集指令集第第2个操作数个操作数LSL移位操作:移位操作:0LSR移位操作:移位操作:0ASR移位操作:移位操作:ROR移位操作:移位操作:RRX移位操作:移

30、位操作:CArithmetic Shift Right Logic Shift RightLogic Shift LeftRotate Right 1 ARM指令集介绍指令集介绍nARM指令集指令集第第2个操作数个操作数Rm,shiftRm,shift寄存器移位方式寄存器移位方式例如:例如:ADDR1,R1,R1,LSL#3 ;R1=R1+R1R3 ARM ARM指令的基本格式如下:指令的基本格式如下:1 ARM指令集介绍指令集介绍nARM指令集指令集条件码条件码 S ,使使用用条条件件码码“cond”可可以以实实现现高高效效的的逻逻辑辑操操作作(节节省省跳转和条件语句跳转和条件语句),提高代

31、码效率。,提高代码效率。所所有有的的ARMARM指指令令都都可可以以条条件件执执行行,而而ThumbThumb指指令令只只有有B B(跳跳转转)指指令令具具有有条条件件执执行行功功能能。如如果果指指令令不不标标明条件代码,将默认为无条件(明条件代码,将默认为无条件(ALAL)执行。)执行。操作码操作码条件助记符条件助记符标志标志含义含义0000EQZ=1相等相等0001NEZ=0不相等不相等0010CS/HSC=1无符号数大于或等于无符号数大于或等于0011CC/LOC=0无符号数小于无符号数小于0100MIN=1负数负数0101PLN=0正数或零正数或零0110VSV=1溢出溢出0111VC

32、V=0没有溢出没有溢出1000HIC=1,Z=0无符号数大于无符号数大于1001LSC=0,Z=1无符号数小于或等于无符号数小于或等于1010GEN=V有符号数大于或等于有符号数大于或等于 1011LTN!=V有符号数小于有符号数小于 1100GTZ=0,N=V有符号数大于有符号数大于 1101LEZ=1,N!=V有符号数小于或等于有符号数小于或等于 1110AL任何任何无条件执行无条件执行(指令默认条件指令默认条件)1111NV任何任何从不执行从不执行(不要使用不要使用)指令条件码表1 ARM指令集介绍指令集介绍nARM指令集指令集条件码条件码C C代码:代码:If(a b)a+;Elseb

33、+;对应的汇编代码:对应的汇编代码:CMPR0,R1 ;R0(a)与)与R1(b)比较)比较ADDHI R0,R0,#1 ;若若R0R1,则,则R0=R0+1ADDLS R1,R1,#1 ;若若R01,则,则R1=R1+1示例:示例:CMP R1,R2 ;SET C ON R1-R2CMN R1,R2 ;SET C ON R1+R2TST R1,R2 ;SET C ON R1 AND R2TEQ R1,R2 ;SET C ON R1 XOR R21 ARM指令集介绍指令集介绍nARM指令集指令集存储器访问指令存储器访问指令 ARMARM处处理理器器是是典典型型的的RISCRISC处处理理器器,

34、对对存存储储器器的的访访问问只只能能使使用用加加载载和和存存储储指指令令实实现现。RAMRAM存存储储空空间间及及I/OI/O映映射射空空间间统统一一编编址址,除除对对RAMRAM操操作作以以外外,对对外外围围IOIO、程程序序数数据据的的访访问均要通过加载问均要通过加载/存储指令进行。存储指令进行。存存储储器器访访问问指指令令分分为为单单寄寄存存器器操操作作指指令令和和多寄存器操作指令多寄存器操作指令。助记符助记符说明说明操作操作条件码位置条件码位置LDR Rd,addressing 加载字数据加载字数据RdRdaddressingaddressing,addressingaddressin

35、g索引索引LDRcondLDRcondLDRB Rd,addressing 加载无符号字节数据加载无符号字节数据RdRdaddressingaddressing,addressingaddressing索引索引LDRcondBLDRcondBLDRT Rd,addressing以用户模式加载字数据以用户模式加载字数据RdRdaddressingaddressing,addressingaddressing索引索引LDRcondTLDRcondTLDRBT Rd,addressing 以用户模式加载无符号以用户模式加载无符号字节数据字节数据RdRdaddressingaddressing,add

36、ressingaddressing索引索引LDRcondBTLDRcondBTLDRH Rd,addressing 加载无符号半字数据加载无符号半字数据RdRdaddressingaddressing,addressingaddressing索引索引LDRcondHLDRcondHLDRSB Rd,addressing 加载有符号字节数据加载有符号字节数据RdRdaddressingaddressing,addressingaddressing索引索引LDRcondSBLDRcondSBLDRSH Rd,addressing加载有符号半字数据加载有符号半字数据 Rdaddressing,add

37、ressing索引索引 LDRcondSH ARM存储器访问指令存储器访问指令单寄存器加载单寄存器加载助记符助记符说明说明操作操作条件码位置条件码位置STR Rd,addressing 存储字数据存储字数据addressingaddressingRdRd,addressingaddressing索引索引STRcondSTRcondSTRB Rd,addressing 存储字节数据存储字节数据addressingaddressingRdRd,addressingaddressing索引索引STRcondBSTRcondBSTRT Rd,addressing 以以用用户户模模式式存存储储字字数数据

38、据addressingaddressingRdRd,addressingaddressing索引索引STRcondTSTRcondTSTRBT Rd,addressing 以以用用户户模模式式存存储储字字节节数据数据addressingaddressingRdRd,addressingaddressing索引索引STRcondBTSTRcondBTSTRH Rd,addressing 存储半字数据存储半字数据addressing addressing RdRd,addressingaddressing索引索引STRcondHSTRcondHARM存储器访问指令存储器访问指令单寄存器存储单寄存器

39、存储 LDR/STRLDR/STR指指令令用用于于对对内内存存变变量量的的访访问问、内内存存缓缓冲冲区区数数据据的的访访问问、查查表表、外外围围部部件件的的控控制制操操作作等等。若若使使用用LDRLDR指指令令加加载载数数据据到到PCPC寄寄存存器器,则则实实现现程程序跳转功能,这样也就实现了程序散转。序跳转功能,这样也就实现了程序散转。所所有有单单寄寄存存器器加加载载/存存储储指指令令可可分分为为“字字和和无无符符号号字字节节加加载载存存储储指指令令”和和“半字和有符号字节加载存储指令。半字和有符号字节加载存储指令。LDRLDR和和STRSTR字和无符号字节加载字和无符号字节加载/存储指令存

40、储指令 LDRLDR指指令令用用于于从从内内存存中中读读取取单单一一字字或或字字节节数数据据存存入入寄寄存存器器中中,STRSTR指指令令用用于于将将寄寄存存器器中中的的单单一一字或字节数据保存到内存。指令格式如下:字或字节数据保存到内存。指令格式如下:ARM存储器访问指令存储器访问指令单寄存器存储单寄存器存储 LDRcondTRd,;将指定地址上的将指定地址上的字数据字数据读入读入Rd STRcondTRd,;将将Rd中的字数据存入指定地址中的字数据存入指定地址 LDRcondBTRd,;将指定地址上的将指定地址上的字节数据字节数据读入读入Rd STRcondBTRd,;将将Rd中的字节数据

41、存入指定地址中的字节数据存入指定地址 其其中中,T T为为可可选选后后缀缀。若若指指令令有有T T,那那么么即即使使处处理理器器是是在在特特权权模模式式下下,存存储储系系统统也也将将访访问问看看成成是是在在用用户户模模式式下下进进行行的的。T T在在用用户户模模式式下下无无效效,不不能能与与前索引偏移一起使用前索引偏移一起使用T T。ARM存储器访问指令存储器访问指令单寄存器存储单寄存器存储LDRLDR和和STRSTR字字和和无无符符号号字字节节加加载载/存存储储指指令令编编码码指令执行的条件码指令执行的条件码I I为为0 0时时,偏偏移移量量为为1212位位立立即即数数,为为1 1时时,偏偏

42、移移量量为为寄寄存存器器移移位位P P表示前表示前/后变址后变址U表示加/减B B为为1 1表表示示字字节节访访问问,为为0 0表示字访问表示字访问WW表示回写表示回写为指令的寻址方式为指令的寻址方式RdRd为源为源/目标寄存器目标寄存器RnRn为基址寄存器为基址寄存器L L用用于于区区别别加加载载(L L为为1 1)或存储(或存储(L L为为0 0)ARM存储器访问指令存储器访问指令单寄存器存储单寄存器存储LDRLDR和和STRSTR字和无符号字节加载字和无符号字节加载/存储指令存储指令 LDR/STRLDR/STR指指令令寻寻址址非非常常灵灵活活,它它由由两两部部分分组组成成,其其中中一一

43、部部分分为为一一个个基基址址寄寄存存器器,可可以以为为任任一一个个通通用用寄寄存存器器;另另一一部部分分为为一一个个地地址址偏偏移移量量。地址偏移量有以下地址偏移量有以下3 3种格式:种格式:立立即即数数。立立即即数数可可以以是是一一个个无无符符号号的的数数值值。这这个个数数据据可可以以加加到到基基址址寄寄存存器,也可以从基址寄存器中减去这个数值。器,也可以从基址寄存器中减去这个数值。如:如:LDR R1,R0,#0 x12;R1-R0+0 x12寄寄存存器器。寄寄存存器器中中的的数数值值可可以以加加到到基基址址寄寄存存器器,也也可可以以从从基基址址寄寄存存器器中中减去这个数值。减去这个数值。

44、如:如:LDR R1,R0,R2 ;R1-R0+R2 LDR R1,R0,-R2 ;R1-R0-R2寄寄存存器器及及移移位位常常数数。寄寄存存器器移移位位后后的的值值可可以以加加到到基基址址寄寄存存器器,也也可可以以从从基址寄存器中减去这个数值。基址寄存器中减去这个数值。如:如:LDR R1,R0,R2,LSL#2;R1-R0+R2*4 LDRLDR和和STRSTR半字和有符号字节加载半字和有符号字节加载/存储指令存储指令 这这类类LDR/STRLDR/STR指指令令可可加加载载有有符符号号半半字字或或字字节节,可可加加载载/存存储储无无符符号号半半字字。偏偏移移量量格格式式、寻寻址址方方式式

45、与与加载加载/存储字和无符号字节指令相同。存储字和无符号字节指令相同。ARM存储器访问指令存储器访问指令单寄存器存储单寄存器存储 LDRcondSB Rd,;将指定地址上的将指定地址上的有符号字节有符号字节读入读入Rd LDRcondSH Rd,;将指定地址上的将指定地址上的有符号半字有符号半字读入读入Rd LDRcondH Rd,;将指定地址上的将指定地址上的半字数据半字数据读入读入Rd STRcondH Rd,;将将Rd中的中的半字数据存入半字数据存入指定地址指定地址注意注意:1.1.有有符符号号位位半半字字/字字节节加加载载是是指指用用符符号号位位加加载载扩扩展展到到3232位位,无无符

46、符号号半半字字加加载载是是指用零扩展到指用零扩展到3232位;位;2.2.半字读写的指定地址必须为半字读写的指定地址必须为偶数偶数,否则将产生不可靠的结果;,否则将产生不可靠的结果;ARM存储器访问指令存储器访问指令单寄存器存储单寄存器存储LDRLDR和和STRSTR半半字字和和有有符符号号字字节节加加载载/存存储储指指令令编编码码指令执行的条件码指令执行的条件码I I为为0 0时时,偏偏移移量量为为1212位位立立即即数数,为为1 1时时,偏偏移移量量为为寄寄存存器器移移位位P P表示前表示前/后变址后变址U U表示加表示加/减减WW表示回写表示回写为指令的寻址方式为指令的寻址方式RdRd为

47、源为源/目标寄存器目标寄存器RnRn为基址寄存器为基址寄存器L L用用于于区区别别加加载载(L L为为1 1)或存储(或存储(L L为为0 0)S S为为1 1表表示示有有符符号号访访问问,为为0 0表示无符号访问表示无符号访问H H为为1 1表表示示半半字字访访问问,为为0 0表示字节访问表示字节访问LDRLDR和和STRSTR指令应用示例:指令应用示例:1.1.加载加载/存储字和无符号字节指令存储字和无符号字节指令LDRR2,R5;将将R5指向地址的字数据存入指向地址的字数据存入R2STRR1,R0,#0 x04;将将R1的数据存储到的数据存储到R0+0 x04地址地址LDRBR3,R2,

48、#-1;将将R2指向地址的字节数据存入指向地址的字节数据存入R3,R2R21STRBR0,R3,-R8 ASR 2;R0-R3-R8/4,存储存储R0的最低有效字节的最低有效字节2.2.加载加载/存储半字和有符号字节指令存储半字和有符号字节指令LDRSB R1,R0,R3;将将R0+R3地址上的字节数据存入地址上的字节数据存入R1,;高高24位用符号扩展位用符号扩展LDRH R6,R2,#2;将将R2指向地址的半字数据存入指向地址的半字数据存入R6,高,高16位用位用0扩展扩展;读出后,读出后,R2=R2+2STRH R1,R0,#2!;将将R1的半字数据保存到的半字数据保存到R0+2地址,地

49、址,;只修改低只修改低2字节数据,然后字节数据,然后R0=R0+2ARM存储器访问指令存储器访问指令单寄存器存储单寄存器存储n(3 3)LDRLDR和和STR STR-双双字字:加加载载/存存储储两两个个相相邻的寄存器,邻的寄存器,6464位双字。其句法有位双字。其句法有4 4种:种:nOp cond D RdOp cond D Rd,Rn Rn 零偏移零偏移nOp cond D RdOp cond D Rd,RnRn,offset!offset!前索引偏移前索引偏移nOp cond D RdOp cond D Rd,label label 程序相对偏移程序相对偏移nOp cond D T R

50、d,Rn,offset 后索引偏移后索引偏移 ARM存储器访问指令存储器访问指令单寄存器存储单寄存器存储 其中:其中:RdRd加加 载载/存存 储储 寄寄 存存 器器 中中 的的 一一 个个,另另 一一 个个 是是R R(d+1d+1)。)。RdRd必须是偶数寄存器,且不是必须是偶数寄存器,且不是R14R14。RnRn除除非非指指令令为为零零偏偏移移,或或不不带带写写回回的的前前索索引引,否则,否则,RnRn不允许与不允许与RdRd和和R R(d+1d+1)相同。)相同。labellabellabellabel必必须须是是在在当当前前指指令令的的上上下下252252字字节节范范围内。围内。例如

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com