版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ARM状态下的寄存器组织(2)37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。用户模式、系统模式快速中断模式管理模式数据访问终止模式外部中断模式未定义指令中止模式第第2页页/共共70页页第1页/共70页1 ARM处理器寻址方式寻址方式分类寻址方式分类 寻址方式是根据指令中给出的地址码字段来实现寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式寻找真实操作数地址的方式。ARMARM处理器具有处理器具有9 9种基本寻种基本寻址方式。址方式。1. 1.寄存器寻址;寄存器寻址; 2.2.立即寻址;立即寻址;3.3.寄存器移位寻址;寄存器移位寻址;4.4.寄存器间接寻址;寄
2、存器间接寻址;5.5.基址寻址;基址寻址;6.6.多寄存器寻址;多寄存器寻址;7.7.堆栈寻址;堆栈寻址;8.8.块拷贝寻址;块拷贝寻址;9.9.相对寻址。相对寻址。第第3页页/共共70页页第2页/共70页 操作数的值在寄存器中,指令中的地址操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举接取出寄存器值来操作。寄存器寻址指令举例如下:例如下: MOV R1,R2 ;将将R2的值存入的值存入R1 SUB R0,R1,R2 ;将将R1的值减去的值减去R2的值,结果保存到的值,结果保存到R0 0 xA
3、A0 x55R2R11 ARM处理器寻址方式寻址方式分类寻址方式分类寄存器寻址寄存器寻址MOV R1,R20 xAA第第4页页/共共70页页第3页/共70页 立即寻址指令中的操作码字段后面的立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数出了可以立即使用的操作数( (这样的数称为这样的数称为立即数立即数) )。立即寻址指令举例如下:。立即寻址指令举例如下: SUBSR0,R0,#1 ;R0减减1,结果,结果放入放入R0,并且影响标志位,并且影响
4、标志位MOV R0,#0 xFF000 ;将立即数将立即数0 xFF000装入装入R0寄存器寄存器 0 x55R0MOV R0,#0 xFF00程序存储1 ARM处理器寻址方式寻址方式分类立即寻址MOV R0,#0 xFF000 xFF00从代码中获得数据第第5页页/共共70页页第4页/共70页 寄存器移位寻址是寄存器移位寻址是ARMARM指令集特有的寻址方式。当指令集特有的寻址方式。当第第2 2个操作数是寄存器移位方式时,第个操作数是寄存器移位方式时,第2 2个寄存器操作数个寄存器操作数在与第在与第1 1个操作数结合之前,选择进行移位操作。寄存器个操作数结合之前,选择进行移位操作。寄存器移位
5、寻址指令举例如下:移位寻址指令举例如下:MOV R0,R2,LSL #3;R2的值左移的值左移3位,结果放入位,结果放入R0, ;即是即是R0=R28 ANDS R1,R1,R2,LSL R3;R2的值左移的值左移R3位,然后位,然后 ;和和R1相相“与与”操作,结果放入操作,结果放入R10 x55R0R20 x011 ARM处理器寻址方式寻址方式分类寄存器移位寻址MOV R0,R2,LSL #30 x080 x08逻辑左移3位第第6页页/共共70页页第5页/共70页 寄存器间接寻址指令中的地址码给出的是一寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄个通用寄存
6、器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作存器指定地址的存储单元中,即寄存器为操作数的地址指针。例如:数的地址指针。例如: LDR R1,R2 ;将将R2指向的存储单元的数据指向的存储单元的数据;读出保存在读出保存在R1中中 SWP R1,R1,R2 ;将寄存器将寄存器R1的值和的值和R2;指定的存储单元的内容交换指定的存储单元的内容交换 0 x55R0R2 0 x400000000 xAA0 x400000001 ARM处理器寻址方式 寻址方式分类寄存器间接寻址LDR R0,R20 xAA第第7页页/共共70页页第6页/共70页 基址寻址就是将基址寄存器的内容与指
7、令中给出基址寻址就是将基址寄存器的内容与指令中给出的偏移量(的偏移量(4K4K)相加)相加/ /减,形成操作数的有效地址。减,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。寄存器间接寻址数组操作、功能部件寄存器访问等。寄存器间接寻址是偏移量为是偏移量为0 0的基址加偏移寻址。的基址加偏移寻址。基址寻址指令举例如下基址寻址指令举例如下( (前索引寻址前索引寻址) ): LDR R2,R3,#0 x0C ;读取读取R3+0 x0C地址上的地址上的 ;存储单元的内容,放入存储单元的内容,放入R2
8、STR R1,R0,#-4!;先先R0=R0-4,然后把,然后把R1的值的值;寄存到保存到寄存到保存到R0指定的存储单元指定的存储单元 1 ARM处理器寻址方式 寻址方式分类寻址方式分类基址寻址基址寻址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA将R3+0 x0C作为地址装载数据第第8页页/共共70页页第7页/共70页 基址寻址指令举例如下:基址寻址指令举例如下: LDR R0,R1,#4;R0=R1,R1R14 ;后索引基址寻址后索引基址寻址 LDR R0,R1,R2 ;R0=R1+R21 ARM处理器寻址方式 寻址方式
9、分类基址寻址第第9页页/共共70页页第8页/共70页 多寄存器寻址一次可传送几个寄存器值,允多寄存器寻址一次可传送几个寄存器值,允许一条指令传送许一条指令传送1616个寄存器的任何子集或所有寄个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:存器。多寄存器寻址指令举例如下: LDMIAR1!,R2-R7,R12 ;将将R1指向的指向的单元中的数据读出到单元中的数据读出到R2R7、R12中中(R1自动加自动加4) STMIAR0!,R2-R7,R12 ;将寄存器将寄存器R2R7、R12的值保存到的值保存到R0指向的存储指向的存储; 单元中单元中(R0自动加自动加4)0 x40000000
10、R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存储器1 ARM处理器寻址方式 寻址方式分类寻址方式分类多寄存器寻址多寄存器寻址LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000010第第10页页/共共70页页第9页/共70页 堆栈是一个按特定顺序进行存取的存储区,操堆栈是一个按特定顺序进行存取的存储区,操作顺序为作顺序为“后进先出后进先出” 。堆栈寻址是隐含的,它使。堆栈寻址是隐含的,它使用一个专门的寄存器用一个专门的
11、寄存器( (堆栈指针堆栈指针) )指向一块存储区域指向一块存储区域( (堆栈堆栈) ),指针所指向的存储单元即是堆栈的栈顶。存,指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:储器堆栈可分为两种: 向上生长:向高地址方向生长,称为递增堆栈向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈向下生长:向低地址方向生长,称为递减堆栈1 ARM处理器寻址方式寻址方式分类堆栈寻址第第11页页/共共70页页第10页/共70页1 ARM处理器寻址方式寻址方式分类寻址方式分类堆栈寻址堆栈寻址栈底栈底栈顶栈顶栈区栈区SP堆栈存堆栈存储区储区栈顶栈顶栈底栈底栈区栈区SP向下
12、向下增长增长向上向上增长增长0 x123456780 x12345678堆栈压栈堆栈压栈堆栈压栈堆栈压栈第第12页页/共共70页页第11页/共70页栈顶SP栈顶SP栈底栈底空堆栈空堆栈栈底栈底满堆栈满堆栈 堆栈指针指向最后压入的堆栈的有效数堆栈指针指向最后压入的堆栈的有效数据项,称为据项,称为满堆栈满堆栈;堆栈指针指向下一个待;堆栈指针指向下一个待压入数据的空位置,称为压入数据的空位置,称为空堆栈空堆栈。 1 ARM处理器寻址方式寻址方式分类寻址方式分类堆栈寻址堆栈寻址0 x123456780 x12345678栈顶栈顶SP0 x12345678栈顶栈顶SP压栈压栈压栈压栈第第13页页/共共7
13、0页页第12页/共70页所以可以组合出四种类型的堆栈方式:所以可以组合出四种类型的堆栈方式:满递增满递增:堆栈向上增长,堆栈指针指向内含有效数:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如据项的最高地址。指令如LDMFALDMFA、STMFASTMFA等;等; 空递增空递增:堆栈向上增长,堆栈指针指向堆栈上的第:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如一个空位置。指令如LDMEALDMEA、STMEASTMEA等;等; 满递减满递减:堆栈向下增长,堆栈指针指向内含有效数:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如据项的最低地址。指令如LDMFDLDM
14、FD、STMFDSTMFD等;等;空递减空递减:堆栈向下增长,堆栈指针向堆栈下的第一:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如个空位置。指令如LDMEDLDMED、STMEDSTMED等。等。 1 ARM处理器寻址方式寻址方式分类寻址方式分类堆栈寻址堆栈寻址第第14页页/共共70页页第13页/共70页 多寄存器传送指令用于将一块数据从存储多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。器的某一位置拷贝到另一位置。 如:如:STMIAR0!,R1-R7;将将R1R7的数据保的数据保存到存储器中。存储指针存到存储器中。存储指针R0在保存在保存第一个值之第一个值之后后增加
15、,增长方向为向上增长。增加,增长方向为向上增长。1 ARM处理器寻址方式寻址方式分类寻址方式分类块拷贝寻址块拷贝寻址第第15页页/共共70页页第14页/共70页 相对寻址是基址寻址的一种变通。由相对寻址是基址寻址的一种变通。由程序计数程序计数器器PCPC提供基准地址提供基准地址,指令中的地址码字段作为偏移,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:相对寻址指令举例如下: BL SUBR1;调用到调用到SUBR1子程序子程序 BEQLOOP;条件跳转到条件跳转到LOOP标号处标号处 .LOOP MO
16、VR6,#1.SUBR1. 1 ARM处理器寻址方式寻址方式分类寻址方式分类相对寻址相对寻址第第16页页/共共70页页第15页/共70页 1 ARM指令集 简单的ARM程序;文件名:文件名:TEST1.S;功能:实现两个寄存器相加功能:实现两个寄存器相加 ;说明:使用说明:使用ARMulate软件仿真调试软件仿真调试 AREAExample1,CODE,READONLY ;声明代码段声明代码段Example1 ENTRY ;标识程序入口标识程序入口 CODE32 ;声明声明32位位ARM指令指令START MOVR0,#0 ;设置参数设置参数 MOVR1,#10LOOPBLADD_SUB ;调
17、用子程序调用子程序ADD_SUB BLOOP ;跳转到跳转到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回子程序返回 END ;文件结束文件结束 使用“;”进行注释标号顶格写实际代码段声明文件结束第第17页页/共共70页页第16页/共70页 ARM指令小节目录1.指令格式2.条件码3.存储器访问指令4.数据处理指令5.乘法指令6.ARM分支指令7.杂项指令8.伪指令第第18页页/共共70页页第17页/共70页 ARM ARM是三地址指令格式,指令的基本格式如下:是三地址指令格式,指令的基本格式如下:1 ARM指令集介绍 ARM指令集
18、基本指令格式 S , 其中其中号内的项是必须的,号内的项是必须的, 号内的项是可选的。号内的项是可选的。各项的说明如下:各项的说明如下:opcode:指令助记符;:指令助记符;cond:执行条件;执行条件;S:是否影响:是否影响CPSRCPSR寄存器的值;寄存器的值;Rd:目标寄存器;:目标寄存器; Rn:第:第1 1个操作数的寄存器;个操作数的寄存器;operand2:第:第2 2个操作数;个操作数;指令语法指令语法目标寄存器(目标寄存器(Rd) 源寄存器源寄存器1(Rn)源寄存器源寄存器2(Rm)ADD r3,r1,r2r3r1r2例例:第第19页页/共共70页页第18页/共70页 ARM
19、ARM指令的基本格式如下:指令的基本格式如下:1 ARM指令集介绍ARM指令集第2个操作数 S , 灵活的使用第灵活的使用第2 2个操作数个操作数“operand2”能能够提高代码效率。它有如下的形式:够提高代码效率。它有如下的形式:#immed_8r#immed_8r常数表达式;常数表达式;RmRm寄存器方式;寄存器方式;Rm,shiftRm,shift寄存器移位方式;寄存器移位方式;第第20页页/共共70页页第19页/共70页1 ARM指令集介绍ARM指令集第2个操作数#immed_8r#immed_8r常数表达式常数表达式例如:例如:ADD R1,R2,#0 x0F说明:说明:ADD条件
20、条件S , , dest = op_1 + op_2 将把两个操作数加起来,把结果放置到目的寄存器中。将把两个操作数加起来,把结果放置到目的寄存器中。操作数操作数 1 是一个寄存器,操作数是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存可以是一个寄存器,被移位的寄存器,或一个立即值器,或一个立即值: 第第21页页/共共70页页第20页/共70页1 ARM指令集介绍ARM指令集第2个操作数RmRm寄存器方式寄存器方式 在寄存器方式下,操作数即为寄存在寄存器方式下,操作数即为寄存器的数值。器的数值。例如:例如:SUB R1,R1,R2说明:说明:SUBSUB条件条件S , , S , ,
21、dest = op_1 - op_2 dest = op_1 - op_2 第第22页页/共共70页页第21页/共70页1 ARM指令集介绍ARM指令集第2个操作数Rm,shiftRm,shift寄存器移位方式寄存器移位方式 将寄存器的移位结果作为操作数(移位操将寄存器的移位结果作为操作数(移位操作不消耗额外的时间),但作不消耗额外的时间),但RmRm值保持不变,值保持不变,移位方法如下:移位方法如下:ADD R0, R2, R3,LSL#1 ; R0 = R2 + (R3 1) ADD R0, R2, R3,LSL#1 ; R0 = R2 + (R3 1) 操作码操作码说明说明操作码操作码说
22、明说明ASR #n算术右移算术右移n位位ROR #n循环右移循环右移n位位LSL #n逻辑左移逻辑左移n位位RRX带扩展的循环右移带扩展的循环右移1位位LSR #n逻辑右移逻辑右移n位位第第23页页/共共70页页第22页/共70页1 ARM指令集介绍ARM指令集第2个操作数LSL移位操作:移位操作:0LSR移位操作:移位操作:0ASR移位操作:移位操作:ROR移位操作:移位操作:RRX移位操作:移位操作:CArithmetic Shift Right Logic Shift RightLogic Shift LeftRotate Right 第第24页页/共共70页页第23页/共70页1 AR
23、M指令集介绍ARM指令集第2个操作数Rm,shiftRm,shift寄存器移位方式寄存器移位方式例如:例如:A D D R 1 , R 1 , R 1 , L S L #3 ;R1=R1+R1R3第第25页页/共共70页页第24页/共70页 ARM ARM指令的基本格式如下:指令的基本格式如下:1 ARM指令集介绍ARM指令集条件码 S , 使用条件码使用条件码“cond”可以实现高效的逻辑操作可以实现高效的逻辑操作( (节省节省跳转和条件语句跳转和条件语句) ),提高代码效率。,提高代码效率。 所有的所有的ARMARM指令都可以条件执行,而指令都可以条件执行,而ThumbThumb指令指令只
24、有只有B B(跳转)指令具有条件执行功能。如果指令不标(跳转)指令具有条件执行功能。如果指令不标明条件代码,将默认为无条件(明条件代码,将默认为无条件(ALAL)执行。)执行。第第26页页/共共70页页第25页/共70页1 ARM指令集介绍ARM指令集条件码示例:示例:第第27页页/共共70页页第26页/共70页1 ARM指令集介绍ARM指令集存储器访问指令 ARM ARM处理器是典型的处理器是典型的RISCRISC处理器,对存处理器,对存储器的访问只能使用储器的访问只能使用加载和存储加载和存储指令实现。指令实现。RAMRAM存储空间及存储空间及I/OI/O映射空间统一编址,除映射空间统一编址
25、,除对对RAMRAM操作以外,对外围操作以外,对外围IOIO、程序数据的访、程序数据的访问均要通过加载问均要通过加载/ /存储指令进行。存储指令进行。 存储器访问指令分为存储器访问指令分为单寄存器操作指令单寄存器操作指令和和多寄存器操作指令多寄存器操作指令。第第28页页/共共70页页第27页/共70页助记符助记符说明说明操作操作条件码位置条件码位置LDR Rd,addressing 加载字数据加载字数据RdRdaddressingaddressing,addressingaddressing索引索引LDRcondLDRcondLDRB Rd,addressing 加载无符号字节数据加载无符号字
26、节数据RdRdaddressingaddressing,addressingaddressing索引索引LDRcondBLDRcondBLDRT Rd,addressing以用户模式加载字数据以用户模式加载字数据RdRdaddressingaddressing,addressingaddressing索引索引LDRcondTLDRcondTLDRBT Rd, addressing 以用户模式加载无符号以用户模式加载无符号字节数据字节数据RdRdaddressingaddressing,addressingaddressing索引索引LDRcondBTLDRcondBTLDRH Rd, addr
27、essing 加载无符号半字数据加载无符号半字数据RdRdaddressingaddressing,addressingaddressing索引索引LDRcondHLDRcondHLDRSB Rd, addressing 加载有符号字节数据加载有符号字节数据RdRdaddressingaddressing,addressingaddressing索引索引LDRcondSBLDRcondSBLDRSH Rd, addressing加载有符号半字数据加载有符号半字数据 Rdaddressing,addressing索引索引 LDRcondSH ARM存储器访问指令单寄存器加载第第29页页/共共70
28、页页第28页/共70页助记符助记符说明说明操作操作条件码位置条件码位置STR Rd, addressing 存储字数据存储字数据addressingaddressingRdRd,addressingaddressing索引索引STRcondSTRcondSTRB Rd,addressing 存储字节数据存储字节数据addressingaddressingRdRd,addressingaddressing索引索引STRcondBSTRcondBSTRT Rd,addressing 以用户模式存储字数以用户模式存储字数据据addressingaddressingRdRd, addressingad
29、dressing索引索引STRcondTSTRcondTSTRBT Rd,addressing 以用户模式存储字节以用户模式存储字节数据数据addressingaddressingRdRd,addressingaddressing索引索引STRcondBTSTRcondBTSTRH Rd,addressing 存储半字数据存储半字数据addressing addressing RdRd,addressingaddressing索引索引STRcondHSTRcondHARM存储器访问指令单寄存器存储 LDR/STRLDR/STR指令用于对指令用于对内存变量的访问、内存缓冲区数据的访问、查表、内存
30、变量的访问、内存缓冲区数据的访问、查表、外围部件的控制操外围部件的控制操作等。若使用作等。若使用LDRLDR指令加载数据到指令加载数据到PCPC寄存器,则实现程寄存器,则实现程序跳转功能,这样也就实现了程序散转。序跳转功能,这样也就实现了程序散转。 所有单寄存器加载所有单寄存器加载/ /存储指令可分为存储指令可分为“字和无符号字节加载存储指令字和无符号字节加载存储指令”和和“半字和有符号字节加载存储指令。半字和有符号字节加载存储指令。第第30页页/共共70页页第29页/共70页LDRLDR和和STRSTR字和无符号字节加载字和无符号字节加载/ /存储指令存储指令 LDRLDR指令用于从内存中读
31、取单一字或字节数指令用于从内存中读取单一字或字节数据存入寄存器中,据存入寄存器中,STRSTR指令用于将寄存器中的单一指令用于将寄存器中的单一字或字节数据保存到内存。指令格式如下:字或字节数据保存到内存。指令格式如下:ARM存储器访问指令单寄存器存储 LDRcondTRd, ;将指定地址上的将指定地址上的字数据字数据读入读入Rd STRcondTRd, ;将将Rd中的字数据存入指定地址中的字数据存入指定地址 LDRcondBTRd, ;将指定地址上的将指定地址上的字节数据字节数据读入读入Rd STRcondBTRd, ;将将Rd中的字节数据存入指定地址中的字节数据存入指定地址 其中,其中,T
32、T为可选后缀。若指令有为可选后缀。若指令有T T,那么即使处,那么即使处理器是在特权模式下,存储系统也将访问看成是在理器是在特权模式下,存储系统也将访问看成是在用户模式下进行的。用户模式下进行的。T T在用户模式下无效,不能与在用户模式下无效,不能与前索引偏移一起使用前索引偏移一起使用T T。 第第31页页/共共70页页第30页/共70页ARM存储器访问指令单寄存器存储LDRLDR和和STRSTR字和无符号字节加载字和无符号字节加载/ /存储指令存储指令 LDR/STRLDR/STR指令寻址非常灵活,它由两部分组成,其中一部分为一个指令寻址非常灵活,它由两部分组成,其中一部分为一个基址寄存器,
33、可以为任一个通用寄存器;另一部分为一个地址偏移量。基址寄存器,可以为任一个通用寄存器;另一部分为一个地址偏移量。地址偏移量有以下地址偏移量有以下3 3种格式:种格式: 立即数立即数。立即数可以是一个无符号的数值。这个数据可以加到基址寄存。立即数可以是一个无符号的数值。这个数据可以加到基址寄存器,也可以从基址寄存器中减去这个数值。器,也可以从基址寄存器中减去这个数值。 如:如:LDR R1,R0,#0 x12 ;R1-R0+0 x12寄存器寄存器。寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中。寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。减去这个数值。 如:如:L
34、DR R1,R0,R2 ; R1-R0+R2 LDR R1,R0,-R2 ; R1-R0-R2寄存器及移位常数寄存器及移位常数。寄存器移位后的值可以加到基址寄存器,也可以从。寄存器移位后的值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。基址寄存器中减去这个数值。 如:如:LDR R1,R0,R2,LSL #2 ;R1-R0+R2*4 第第32页页/共共70页页第31页/共70页LDRLDR和和STRSTR半字和有符号字节加载半字和有符号字节加载/ /存储指令存储指令 这类这类LDR/STRLDR/STR指令可加载有符号半字或字节,指令可加载有符号半字或字节,可加载可加载/ /存储无符号
35、半字。偏移量格式、寻址方式与存储无符号半字。偏移量格式、寻址方式与加载加载/ /存储字和无符号字节指令相同。存储字和无符号字节指令相同。 ARM存储器访问指令单寄存器存储 LDRcondSB Rd,;将指定地址上的将指定地址上的有符号字节有符号字节读入读入Rd LDRcondSH Rd,;将指定地址上的将指定地址上的有符号半字有符号半字读入读入Rd LDRcondH Rd,;将指定地址上的将指定地址上的半字数据半字数据读入读入Rd STRcondH Rd,;将将Rd中的中的半字数据存入半字数据存入指定地址指定地址注意注意:1. 1.有符号位半字有符号位半字/ /字节加载是指用符号位加载扩展到字
36、节加载是指用符号位加载扩展到3232位,无符号半字加载是位,无符号半字加载是指用零扩展到指用零扩展到3232位;位;2.2.半字读写的指定地址必须为半字读写的指定地址必须为偶数偶数,否则将产生不可靠的结果;,否则将产生不可靠的结果;第第33页页/共共70页页第32页/共70页LDRLDR和和STRSTR指令应用示例:指令应用示例:1. 1.加载加载/ /存储字和无符号字节指令存储字和无符号字节指令LDRR2,R5;将将R5指向地址的字数据存入指向地址的字数据存入R2STRR1,R0,#0 x04 ;将将R1的数据存储到的数据存储到R0+0 x04地址地址LDRBR3,R2,#-1 ;将将R2指
37、向地址的字节数据存入指向地址的字节数据存入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地址,地址,;只修改
38、低只修改低2字节数据,然后字节数据,然后R0=R0+2ARM存储器访问指令单寄存器存储第第34页页/共共70页页第33页/共70页 (3 3)LDRLDR和STRSTR ARM存储器访问指令单寄存器存储第第35页页/共共70页页第34页/共70页助记符助记符说明说明操作操作条件码位置条件码位置LDMmode Rn!,reglist 多寄存器加载多寄存器加载reglistreglistRn.Rn.,RnRn回写等回写等LDMcondLDMcondmodemodeSTMmode Rn!,reglist 多寄存器存储多寄存器存储Rn.reglist,RnRn.reglist,Rn回回写等写等STMc
39、ondSTMcondmodemode ARM存储器访问指令多寄存器存取第第36页页/共共70页页第35页/共70页ARM存储器访问指令多寄存器存取 多寄存器加载多寄存器加载/ /存储指令格式如下:存储指令格式如下: LDMcond Rn!,reglist STMcond Rn!,reglistcondcond:指令执行的条件;:指令执行的条件;模式模式:控制地址的增长方式,一共有:控制地址的增长方式,一共有8 8种模式;种模式;! !:表示在操作结束后,将最后的地址写回:表示在操作结束后,将最后的地址写回RnRn中;中;reglistreglist :表示寄存器列表,可以包含多个寄存器,它们使
40、用:表示寄存器列表,可以包含多个寄存器,它们使用“, ,”隔开,如隔开,如R1,R2,R6-R9R1,R2,R6-R9,寄存器由小到大排列;,寄存器由小到大排列;:可选后缀。允许在用户模式或系统模式下使用。它有以下两个功能:可选后缀。允许在用户模式或系统模式下使用。它有以下两个功能:1 1)若)若opop是是LDMLDM且寄存器列表包含且寄存器列表包含R15R15时,那么除了正常的多寄存器传送外,时,那么除了正常的多寄存器传送外,还将还将SPSRSPSR也复制到也复制到CPSRCPSR中。这用于异常处理返回,仅在异常模式下使用。中。这用于异常处理返回,仅在异常模式下使用。2 2)如寄存器列表包
41、含)如寄存器列表包含R15R15时,数据传入或传出的是用户模式下的寄存器,而时,数据传入或传出的是用户模式下的寄存器,而不是当前模式的寄存器。不是当前模式的寄存器。第第37页页/共共70页页第36页/共70页ARM存储器访问指令多寄存器存取LDMLDM和和STMSTM多寄存器加载多寄存器加载/ /存储指令编码存储指令编码指令执行的条件码指令执行的条件码S S 对 应 于 指 令 中对 应 于 指 令 中的的”符号符号P P表示前表示前/ /后变址后变址U U表示加表示加/ /减减WW表示回写表示回写寄存器列表寄存器列表RnRn为基址寄存器为基址寄存器L L用于区别加载(用于区别加载(L L为为
42、1 1)或存储(或存储(L L为为0 0)第第38页页/共共70页页第37页/共70页ARM存储器访问指令多寄存器存取 多寄存器加载多寄存器加载/ /存储指令的存储指令的8 8种模式如下表所示,右边四种为堆栈种模式如下表所示,右边四种为堆栈操作、左边四种为数据传送操作。操作、左边四种为数据传送操作。模式模式说明说明模式模式说明说明IA每次传送后地址加每次传送后地址加4FD满递减堆栈满递减堆栈IB每次传送前地址加每次传送前地址加4ED空递减堆栈空递减堆栈DA每次传送后地址减每次传送后地址减4FA满递增堆栈满递增堆栈DB每次传送前地址减每次传送前地址减4EA空递增堆栈空递增堆栈数据块传送操作数据块
43、传送操作堆栈操作堆栈操作 进行数据复制时,进行数据复制时,先设置好源数据指针和目标指针,然后使用块先设置好源数据指针和目标指针,然后使用块拷贝寻址指令拷贝寻址指令LDMIA/STMIALDMIA/STMIA、LDMIB/STMIBLDMIB/STMIB、LDMDA/STMDALDMDA/STMDA、LDMDB/STMDBLDMDB/STMDB进行读取和存储进行读取和存储 。 进行堆栈操作操作时,进行堆栈操作操作时,要先设置堆栈指针(要先设置堆栈指针(SPSP),然后使用堆栈),然后使用堆栈寻址指令寻址指令STMFD/LDMFD STMFD/LDMFD 、STMED/LDMEDSTMED/LDM
44、ED、STMFA/LDMFASTMFA/LDMFA和和STMEA/LDMEASTMEA/LDMEA实现堆栈操作。实现堆栈操作。第第39页页/共共70页页第38页/共70页ARM存储器访问指令多寄存器存取数据块传送指数据块传送指令令操作过程如操作过程如右图所示,其右图所示,其中中R1R1为指令执为指令执行前的基址寄行前的基址寄存器,存器,R1R1则为则为指令执行后的指令执行后的基址寄存器。基址寄存器。R5R6R7R1 R1 指令指令STMIA R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令指令STMDA R1!,R5-R74008H40
45、04H4000H4014H4010H400CHR5R6R7R1 R1 指令指令STMIB R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令指令STMDB R1!,R5-R74008H4004H4000H4014H4010H400CH第第40页页/共共70页页第39页/共70页ARM存储器访问指令多寄存器存取数据块传送数据块传送存储存储堆栈操作堆栈操作压栈压栈说明说明数据块传送数据块传送加载加载堆栈操作堆栈操作出栈出栈说明说明STMDASTMED空递减空递减LDMDALDMFA满递减满递减STMIASTMEA空递增空递增LDMIALDMF
46、D满递增满递增STMDBSTMFD满递减满递减LDMDBLDMEA空递减空递减STMIBSTMFA满递增满递增LDMIBLDMED空递增空递增;使用数据块传送指令进行堆栈操作使用数据块传送指令进行堆栈操作STMDAR0!,R5-R6. . .LDMIBR0!,R5-R6;使用堆栈指令进行堆栈操作使用堆栈指令进行堆栈操作STMEDR13!,R5-R6. . .LDMEDR13!,R5-R6 两段代码的执行结果是一样的,但是使用堆栈指令的压栈和出栈两段代码的执行结果是一样的,但是使用堆栈指令的压栈和出栈操作编程很简单(只要前后一致即可),而使用数据块指令进行压栈操作编程很简单(只要前后一致即可),
47、而使用数据块指令进行压栈和出栈操作则需要考虑空与满、加与减对应的问题。和出栈操作则需要考虑空与满、加与减对应的问题。 堆栈操作(详见堆栈操作(详见“4.1 4.1 寻址方式堆栈寻址寻址方式堆栈寻址”)和数据块传送指令)和数据块传送指令类似,也有类似,也有4 4种模式,它们之间的关系如下表所示:种模式,它们之间的关系如下表所示:第第41页页/共共70页页第40页/共70页助记符助记符说明说明操作操作条件码位置条件码位置SWP Rd,Rm,Rn 寄存器和存储器字数寄存器和存储器字数据交换据交换RdRdRnRn,RnRnRm Rm (Rn(RnRdRd或或Rm)Rm)SWPcondSWPcondSW
48、PB Rd,Rm,Rn 寄存器和存储器字节寄存器和存储器字节数据交换数据交换RdRdRnRn,RnRnRm Rm (Rn(RnRdRd或或Rm)Rm)SWPcondBSWPcondBARM存储器访问指令寄存器和存储器交换指令 SWP SWP指令用于将一个内存单元指令用于将一个内存单元( (该单元地址放在寄存器该单元地址放在寄存器RnRn中中) )的的内容读取到一个寄存器内容读取到一个寄存器RdRd中,同时将另一个寄存器中,同时将另一个寄存器RmRm的内容写入的内容写入到该内存单元中。使用到该内存单元中。使用SWPSWP可实现信号量操作。可实现信号量操作。 指令格式如下:指令格式如下:SWPco
49、ndB Rd,Rm,Rn 其中,其中,B B为可选后缀,若有为可选后缀,若有B B,则交换字节,否则交换,则交换字节,否则交换3232位字;位字;RdRd用于保存从存储器中读入的数据;用于保存从存储器中读入的数据;RmRm的数据用于存储到存储器的数据用于存储到存储器中,若中,若RmRm与与RdRd相同,则为寄存器与存储器内容进行互换;相同,则为寄存器与存储器内容进行互换;RnRn为要为要进行数据交换的存储器地址,进行数据交换的存储器地址,RnRn不能与不能与RdRd和和RmRm相同。相同。 第第42页页/共共70页页第41页/共70页1 ARM指令集介绍ARMARM指令集指令集ARMARM数据
50、处理指令数据处理指令 数据处理指令大致可分为数据处理指令大致可分为3 3类:类: 数据传送指令;数据传送指令;算术逻辑运算指令;算术逻辑运算指令;比较指令。比较指令。 数据处理指令数据处理指令只能对寄存器只能对寄存器的内容进行的内容进行操作,而不能对内存中的数据进行操作。所操作,而不能对内存中的数据进行操作。所有有ARMARM数据处理指令均可选择使用数据处理指令均可选择使用S S后缀,以后缀,以使指令影响状态标志。使指令影响状态标志。 第第43页页/共共70页页第42页/共70页ARM数据处理指令指令编码带进位加法ADC0101带进位减法指令SBC0110带进位逆向减法指令RSC0111位测试
51、指令TST1000相等测试指令TEQ1001比较指令CMP1010负数比较指令CMN1011逻辑或操作指令ORR1100数据传送MOV1101位清除指令BIC1110数据非传送MVN1111加法运算指令ADD0100逆向减法指令RSB0011减法运算指令SUB0010逻辑异或操作指令EOR0001逻辑与操作指令AND0000说明指令助记符操作码opcode操作码功能表第第44页页/共共70页页第43页/共70页助记符助记符说明说明操作操作条件码位置条件码位置MOV Rd,operand2 Rd,operand2数据传送数据传送RdRdoperand2 operand2 MOVcondSMOVc
52、ondSMVN Rd,operand2 Rd,operand2数据非传送数据非传送RdRd(operand2)(operand2)MVNcondSMVNcondSARM数据处理指令数据传送注:当后缀注:当后缀S S时,这些指令根据结果更新标时,这些指令根据结果更新标志志N N和和Z Z,在计算,在计算Operand2Operand2时更新标志时更新标志C C,不,不影响标志影响标志V V。第第45页页/共共70页页第44页/共70页助记符说明操作条件码位置MOV Rd,operand2MOV Rd,operand2数据传送数据传送RdRdoperand2 operand2 MOVcondSMO
53、VcondSMVN Rd,operand2MVN Rd,operand2数据非传送数据非传送RdRd(operand2)(operand2)MVNcondSMVNcondSARM数据处理指令数据传送 MVNMVN指令将指令将8 8位立即数或寄存器(位立即数或寄存器(operand2operand2)按位按位取反取反后传送到目标寄存器(后传送到目标寄存器(RdRd),因为其具有取反功能,),因为其具有取反功能,所以可以装载范围更广的立即数。指令格式如下:所以可以装载范围更广的立即数。指令格式如下: MVNcondS Rd,operand2 MVNMVN指令举例如下:指令举例如下: MVNR1,#
54、0 xFF;R1=0 xFFFFFF00R1=0 xFFFFFF00 MVNR1,R2 ;将将R2R2按位取反,结果存到按位取反,结果存到R1R1第第46页页/共共70页页第45页/共70页助记符助记符说明说明操作操作条件码位置条件码位置ADD Rd, Rn, operand2ADD Rd, Rn, operand2加法运算指令加法运算指令RdRdRn+operand2Rn+operand2ADDcondSADDcondSSUB Rd, Rn, operand2SUB Rd, Rn, operand2减法运算指令减法运算指令RdRdRn-operand2Rn-operand2SUBcondSS
55、UBcondSRSB Rd, Rn, operand2RSB Rd, Rn, operand2逆向减法指令逆向减法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondSADC Rd, Rn, operand2ADC Rd, Rn, operand2带进位加法带进位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondSSBC Rd, Rn, operand2SBC Rd, Rn, operand2带进位减法指带进位减法指令令RdRdRn-operand2-Rn-operand2-(NOT)Carry(NO
56、T)CarrySBCcondSSBCcondSRSC Rd, Rn, operand2RSC Rd, Rn, operand2带进位逆向减带进位逆向减法指令法指令RdRdoperand2-Rn-operand2-Rn-(NOT)Carry(NOT)CarryRSCcondSRSCcondSARM数据处理指令算术运算 加法运算指令加法运算指令ADDADD指令将指令将operand2operand2的值与的值与RnRn的值相加,的值相加,结果保存到结果保存到RdRd寄存器。指令格式如下:寄存器。指令格式如下: ADDcondS Rd,Rn,operand2 应用示例:应用示例: ADDS R1,R
57、1,#1020; R1=R1+1020; R1=R1+1020,并影响标志位,并影响标志位 ADD R1,R1,R2,LSL #2;R1=R1+R22;R1=R1+R22 第第47页页/共共70页页第46页/共70页助记符助记符说明说明操作操作条件码位置条件码位置AND Rd, Rn, operand2AND Rd, Rn, operand2逻 辑 与 操逻 辑 与 操作指令作指令RdRdRn & operand2Rn & operand2ANDcondSANDcondSORR Rd, Rn, operand2ORR Rd, Rn, operand2逻 辑 或 操逻 辑 或 操作指令作指令Rd
58、RdRn | operand2Rn | operand2ORRcondSORRcondSEOR Rd, Rn, operand2EOR Rd, Rn, operand2逻 辑 异 或逻 辑 异 或操作指令操作指令RdRdRn operand2Rn operand2EORcondSEORcondSBIC Rd, Rn, operand2BIC Rd, Rn, operand2位 清 除 指位 清 除 指令令RdRdRn & (operand2)Rn & (operand2) BICcondSBICcondSARM数据处理指令逻辑运算指令第第48页页/共共70页页第47页/共70页助记符助记符说明
59、说明操作操作条件码位置条件码位置CMP Rn, operand2CMP Rn, operand2比较指令比较指令标 志标 志 N N 、 Z Z 、 C C 、V VRn-operand2Rn-operand2CMPcondCMPcondCMN Rn, operand2CMN Rn, operand2负数比较指令负数比较指令标 志标 志 N N 、 Z Z 、 C C 、V VRn+operand2Rn+operand2CMNcondCMNcondTST Rn, operand2TST Rn, operand2位测试指令位测试指令标志标志N N、Z Z、C C、V VRn Rn & opera
60、nd2& operand2TSTcondTSTcondTEQ Rn, operand2TEQ Rn, operand2相等测试指令相等测试指令标志标志N N、Z Z、C C、V VRn Rn operand2 operand2TEQcondTEQcondARM数据处理指令比较指令注:这些指令影响注:这些指令影响N,Z,C和和V标志位。标志位。第第49页页/共共70页页第48页/共70页助记符助记符说明说明操作操作条件码位置条件码位置MUL Rd,Rm,RsMUL Rd,Rm,Rs3232位乘法指位乘法指令令RdRdRmRm* *Rs Rs (Rd(RdRm)Rm)MULcondSMULcond
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年财产分配:离婚股权清晰分割协议
- 苏北四市(徐州、宿迁、淮安、连云港)2025届高三第一次调研考试(一模)生物试卷(含答案)
- 2024移动医疗APP开发与推广合同
- 2025年度博物馆楼顶观光平台租赁合同3篇
- 2025年度夜店娱乐DJ艺人签约管理合同3篇
- 2025年水电站行业发展前景分析:我国共有水电站8600余座
- 2024版家庭护理保姆雇佣合同样本
- 2024环境检测合同
- 2024年学生宿舍消防安全管理协议3篇
- 2024年车站自助咖啡机投放与运营合同3篇
- 小说与散文的区别课件
- 景德镇绿地昌南里项目视频讨论会ua根据0108意见修改
- 豆腐的制作工艺及配方
- DB-T 29-202-2022 天津市建筑基坑工程技术规程
- 福建省社会体育指导员信息表
- DB51∕T 5060-2013 四川省预拌砂浆生产与应用技术规程
- 珠心算习题汇总(可以打印版A4)
- 设备润滑注油周期表.doc
- 医用红外热像仪
- 有限空间作业应急预案及现场处置方案
- (完整版)宴会预定单
评论
0/150
提交评论