ARM体系结构与编程:第4章 ARM微处理器指令系统_第1页
ARM体系结构与编程:第4章 ARM微处理器指令系统_第2页
ARM体系结构与编程:第4章 ARM微处理器指令系统_第3页
ARM体系结构与编程:第4章 ARM微处理器指令系统_第4页
ARM体系结构与编程:第4章 ARM微处理器指令系统_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章 ARM微处理器指令系统目标学员:嵌入式初级开发者课程时长:6学时,270分钟ARM微处理器指令系统本章目录1324ARM微处理器的指令集概述 ARM指令集 ARM指令的寻址方式 Thumb指令及应用 课程目标掌握ARM指令集的分类与具体应用 掌握ARM指令集;深入理解C和汇编相互调用的过程;了解Thumb指令集简介及应用场合;重点难点 ARM指令集 ARM指令的寻址方式 汇编与C语言互调课程目录1324ARM微处理器的指令集概述 ARM指令集 ARM指令的寻址方式 Thumb指令及应用 ARM微处理器的指令向后兼容:新版本增加指令,并保持指令向后兼容;Load-store 结构*loa

2、d/store 从存储器中读某个值,操作完后再将其放回存储器中只对存放在寄存器的数据进行处理;对于存储器中的数据,只能使用load/store指令进行存取ARM微处理器的指令的分类与格式 指令的分类(九大类): 数据处理指令移位指令乘法指令与乘加指令跳转指令程序状态寄存器(PSR)处理指令加载/存储指令批量数据加载/存储指令协处理器指令和异常产生指令ARM指令编码格式说明Cond指令执行的条件编码Opcode指令操作符编码S决定指令的操作是否影响CPSR的值Rd操作目标寄存器编码Rn包含第一操作数的寄存器编码Shifter_operand表示第二操作数cond001opcodesRnRdShi

3、fter_operand 31 28 27 25 24 21 20 19 16 15 12 11 8 7 0课程目录1324ARM微处理器的指令集概述 ARM指令集 ARM指令的寻址方式 Thumb指令及应用 数据处理指令 数据传送指令: 用于在寄存器和存储器之间进行数据的双向传输。算术逻辑运算指令: 完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中的相应条件标志位。移位指令: ARM微处理器内嵌的桶型移位器(BarrelShifter),支持数据的各种移位操作。比较指令: 不保存运算结果,只更新CPSR中相应的条件标志位。 数据处理指令可分为数据传送指

4、令、算术逻辑运算指令、移位指令和比较指令等。数据处理指令ADD r0, r1, r2r0 := r1 + r2ADC r0, r1, r2r0 := r1 + r2 + CSUB r0, r1, r2r0 := r1 - r2SBC r0, r1, r2r0 := r1 - r2 + C - 1RSB r0, r1, r2r0 := r2 r1RSC r0, r1, r2r0 := r2 r1 + C - 1算术操作按位逻辑操作AND r0, r1, r2r0 := r1 and r2ORR r0, r1, r2r0 := r1 or r2EOR r0, r1, r2r0 := r1 xor

5、r2BIC r0, r1, r2r0 := r1 and (not) r2寄存器移位MOV r0, r2r0 := r2MVN r0, r2r0 := not r2比较操作CMP r1, r2set cc on r1 - r2CMN r1, r2set cc on r1 + r2TST r1, r2set cc on r1 and r2TEQ r1, r2set cc on r1 xor r2数据处理指令 - MOVMOV指令是把一个数N送到目标寄存器中,N可以是寄存器,也可以是立即数。MOV指令语法: MOV条件S目的寄存器,源操作数 例: MOV R0,#0 x10 ; 把立即数0 x10

6、载入到R0寄存器,R0-0 x10 MOV R2,R0 ;把寄存器R0中的数据载入到R2寄存器R2-R0数据处理指令 - MVNMVN指令可完成从另一个寄存器、被移位的寄存器、或将一个立即数加载到目的寄存器。与MOV指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。 MVN指令语法: MVN条件S目的寄存器,源操作数 例: MVN R0, #0 ; 把0逻辑取反后载入到R0寄存器中,R0 = -1 MVN R1, #0 xffffff00 ;把寄存器R0中的数据载入到R2寄存器R2-R0数据处理指令 - CMPCMP指令用于把一个寄存器的内容和另一个寄存器的内容或立即

7、数进行比较,同时更新CPSR中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标志位。 。CMP指令语法: CMP条件 操作数1,操作数2 例:CMPR1,R0 ;将寄存器R1的值与寄存器R0的值相减,并 根据结果设置CPSR的标志位 CMPR1,100 ; 将寄存器R1的值与立即数100相减,并根 据结果设置CPSR的标志位 数据处理指令 - CMNCMN指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,同时更新CPSR中条件标志位的值。该指令实际完成操作数1和操作数2相加,并根据结果更改条件标志位 。CMN指令语法: CMN条件 操作数1,操作数2 例:

8、 CMNR1,R0 ;将寄存器R1的值与寄存器R0的值相加,并 根据结果设置CPSR的标志位CMN R1,100 ;将寄存器R1的值与立即数100相加,并根 据结果设置CPSR的标志位 数据处理指令 - TSTTST 指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值。操作数1是要测试的数据,而操作数2是一个位掩码,该指令一般用来检测是否设置了特定的位 。TST指令语法: TST 条件 操作数1,操作数2 例:TSTR1,0 x1 ;先进行and运算,如果结果为 零,则设置标志位Z=1 数据处理指令 - TEQTEQ指令用于把一个

9、寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,并根据运算结果更新CPSR中条件标志位的值。该指令通常用于比较操作数1和操作数2是否相等 。TEQ指令语法: TEQ条件 操作数1,操作数2 例:TEQR1,R2 ; 将寄存器R1的值与寄存器R2的值按位异或 ,并根据结果设置CPSR的标志位 综合示例MOV R0,#0 x31MOV R2,#0 x50MOV R3,#0 x100TST R0, #0 x01;测试是否影响标志位ZMOVEQ R2,#0 x3000TST R1,#0 x0f;CMP R2,R3ANDEQ R2,R2,#0 x3 ;如果R2等于R3则执行该语句,否则跳过数

10、据处理指令 - ADDADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数 。ADD指令语法: ADD条件S , , MOV R1, #3MOV R2, #5ADD R0, R1, R2 ; 寄存器与寄存器之间的加法操作, R0 = R1 + R2ADD R0, R1, #2 ; 寄存器与立即数之间的加法操作, R0 = R1 + 2ADD R0, R2, R1,LSL#1 ; 包含移位运算的加法操作,先进行 移位操作,再进行加法操作R0 = R2 + (R1 1)数据处理指令 - SUBSUB 用操作数 1

11、减去操作数 2,把结果放置到目的寄存器中。操作数 1 是一个寄存器,操作数 2 可以是一个寄存器、被移位的寄存器、或一个立即值。SUB指令语法: SUB条件S , , SUB R0, R1, R2 ; R0 = R1 - R2SUB R0, R1, #256 ; R0 = R1 256SUB R2, R1, R3,LSL#1 ; R0 = R2 - (R3 1)数据处理指令 - RSBRSB 用操作数 2 减去操作数 1,把结果放置到目的寄存器中。操作数 1 是一个寄存器,操作数 2 可以是一个寄存器、被移位的寄存器、或一个立即值。RSB指令语法: RSB条件S , , RSB R0, R1,

12、 R2 ; R0 = R2 - R1RSB R0, R1, #256 ; R0 = 256 - R1RSB R0, R2, R3,LSL#1 ; R0 = (R3 1) - R2桶形移位器ALU桶形移位器Rd结果N预处理未预处理RmRn移位操作LSL:逻辑左移(Logical Shift Left)。寄存器中字的低端空 出的位补0。 LSR:逻辑右移(Logical Shift Right)。寄存器中字的高端空 出的位补0。 ASR:算术右移(Arithmetic Shift Right)。算术移位的对象 是带符号数,在移位过程中必须保持操作数的符号不变。若 源操作数为正数,则字的高端空出的位

13、补0。若源操作数为 负数,则字的高端空出的位补1。 ROR:循环右移(Rotate Right)。从字的最低端移出的位填入 字的高端空出的位。 移位操作在任何数据处理指令中,第二个寄存器操作数可以有应用该操作数的移位操作.逻辑移位LSL:逻辑左移字的最小位空位清零LSR:逻辑右移字的最大位空位清零.移位操作算术移位ASR: = LSRASL: 算术左移循环移位: ROR, RRX案例分析一AREAExample,CODE,READONLY;声明代码段ExampleENTRYCODE32STARTMOV R0,#0 x10MOV R1,#0MOV R2,R0MOV R3,R2MOV R5,#0

14、xf000000fMVN R0, #0MVN R1,#0 xffffff00MOV R0,#0 xf案例分析二 TSTR1,#0 x01 ; 先进行and运算,如果结果为零,则设置zero=1 (继续下面的LDR指令);否则,zero=0(跳到 NEXT处执行)。BNE NEXTMOV R0,#0 x0MOV R4,R0,LSR #1MOV R3,R0,LSR #2NEXTMOV R1,#0 xf0000000MOV R4,R1,ASR #1MOV R3,R1,ASR #2B STARTEND运行效果乘法指令与乘加指令 ARM微处理器支持的乘法指令与乘加指令共有6条 : MUL 32位乘法指令

15、(常见)MLA 32位乘加指令(常见)SMULL64位有符号数乘法指令SMLAL64位有符号数乘加指令UMULL64位无符号数乘法指令UMLAL64位无符号数乘加指令数据处理指令 - MULMUL指令完成将操作数1与操作数2的乘法运算,并把结果放置到目的寄存器中,同时可以根据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均为32位的有符号数或无符号数 。MUL指令语法: MUL条件S, , 例:MUL R0,R1,R2 ; R0 = R1 R2 MULSR0,R1,R2 ;R0 = R1 R2,同时设置CPSR 中的相关条件标志位 数据处理指令 - MLAMLA指令完成将操作

16、数1与操作数2的乘法运算,再将乘积加上操作数3,并把结果放置到目的寄存器中,同时可以根据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均为32位的有符号数或无符号数。 MLA指令语法: MLA条件S, , , 例:MLAR0,R1,R2,R3;R0 = R1 R2 + R3MLASR0,R1,R2,R3 ;R0 = R1 R2 + R3,同时设置 CPSR中的相关条件标志位 案例分析一AREA Example,CODE,READONLY;声明代码段ExampleENTRY;标识程序入口CODE32;声明32位ARM指令STARTMOV R1, #3 MOV R2, #5 AD

17、D R0, R1, R2 ; R0 = R1 + R2 ADD R0, R1, #2 ; R0 = R1 + 2 ADD R0, R2, R1,LSL#1 ; R0 = R2 + (R1 1) MOV R1, #0 xf1000000 MOV R2, #0 x80000000 ADD R0, R1, R2 ; R0 = R1 + R2 查看CPSR寄存器中 ;的C位是否变化ADDS R3, R1, R2 ; 查看CPSR寄存器中的C位是否 ;变化案例分析二MOV R4, #0 x5fffffff MOV R5, #0 x6eADDS R0, R4, R8SUB R0, R2, R1 ; R0

18、= R2 - R1 SUBS R0, R2, R1 ; R0 = R2 - R1SUB R0, R1, #2 ; R0 = R1 - 2 SUB R0, R2, R3,LSL#1 ; R0 = R2 - (R3 1)RSB R0, R1, R2 ; R0 = R2 - R1 RSB R0, R1, #256 ; R0 = 256 - R1 RSB R0, R1, R3,LSL#1 ; R0 = (R3 1) - R1MOV R1, #3 MOV R2, #5 MUL R3, R1, R2B START END运行效果数据处理指令 ANDAND 将在两个操作数上进行逻辑与,把结果放置到目的寄存器

19、中; 操作数1是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即值 。AND指令语法: AND条件S , , ;dest = op1&op2 例:MOV R0,#0 x02AND R0,R0,#0 x01;R0=R0&0 x01 取出最低位数据MOV R1,#0 x07MOV R3,#0 x05AND R2,R1,R3;R2=R1&R3数据处理指令 ORRORR 将在两个操作数上进行逻辑或,把结果放置到目的寄存器中;对设置特定的位有用。操作数 1 是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即值 。ORR指令语法: ORR条件S , , ;dest =

20、op1 | op2 例:MOV R0,#0 x01ORR R0,R0,#0 x0F ;将R0的低4位置1数据处理指令 EOREOR 将在两个操作数上进行逻辑异或,把结果放置到目的寄存器中;对反转特定的位有用。操作数 1 是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即值。 EOR指令语法: EOR条件S , , ;dest = op1 op 2例:EOR R1,R1,#0 x0F;将R1的低4位取反EOR R2,R1,R0 ;R2 = R1 R0数据处理指令 BICBIC 是在一个字中清除位的一种方法,与 ORR 位设置是相反的操作。操作数 2 是一个 32 位位掩码(m

21、ask)。如果在掩码中设置了某一位,则清除这一位。未设置的掩码位指示此位保持不变 。 BIC指令语法: BIC条件S , , ;dest = op_1 AND (!op_2)例:BIC R1,R1,#0 x0F;将R1的低4位清0,其他位保持不变 案例分析一AREA Example,CODE,READONLY ;声明代码段ExampleENTRY ;标识程序入口CODE32 ;声明32位ARM指令STARTMOV R0,#0 x02AND R0,R0,#0 x01;R0=R0&0 x01 取出最低位数据 MOV R1,#0 x0f7 MOV R3,#0 x05 AND R2,R1,R3;R2=

22、R1&R3MOV R0,#0 x0c1案例分析二ORR R0,R0,#0 x0F;将R0的低4位置1EOR R1,R1,#0 x0F;将R1的低4位取反EOR R2,R1,R0;R2 = R1 R0 BIC R1,R1,#0 x0F;将R1的低4位清0,其他位保持不变 BIC R1,R2,R3;这句是什么含义呢?B STARTEND运行效果跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的跳转:使用专门的跳转指令。直接向程序计数器PC写入跳转地址值。 ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令:B跳转指令B

23、L带返回的跳转指令BLX带返回和状态切换的跳转指令BX带状态切换的跳转指令数据处理指令 BB指令是最简单的跳转指令。一旦遇到一个 B 指令,ARM 处理器将立即跳转到给定的目标地址,从那里继续执行。 B指令语法: B条件目标地址例:B Label ;程序无条件跳转到标号Label处执行CMPR1,0 ;当CPSR寄存器中的Z条件码置位时,程序跳转到 标号Label处执行BEQLabel数据处理指令 BLBL 是另一个跳转指令,但跳转之前,会在寄存器R14中保存PC的当前内容,因此,可以通过将R14 的内容重新加载到PC中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个基本但

24、常用的手段。 BL指令语法: BL条件目标地址例:BLLabel;当程序无条件跳转到标号Label处执行时, 同时将当前的PC值保存到R14中 数据处理指令 BLXBLX指令从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到寄存器R14中。 BLX指令语法: BLX条件目标地址程序状态寄存器访问指令 ARM微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传送数据,程序状态寄存器访问指令包括以下两条:MRS程序状态寄存器到通用寄存器的数据传送指令MSR通用寄存器到程序状态寄存器的数据传送指令数

25、据处理指令 MRSMRS指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下几种情况: 当需要改变程序状态寄存器的内容时,可用MRS将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。 当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存 。 MRS指令语法: MRS条件 通用寄存器,程序状态寄存器(CPSR或SPSR)例:MRSR0,CPSR;传送CPSR的内容到R0MRSR0,SPSR;传送SPSR的内容到R0数据处理指令 MRSMSR指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中,操作数可以为通用寄存

26、器或立即数。用于设置程序状态寄存器中需要操作的位。该指令通常用于恢复或改变程序状态寄存器的内容,在使用时,一般要在MSR指令中指明将要操作的域。MRS指令语法: MSR条件 程序状态寄存器(CPSR或SPSR)_,操作数 例:MSRCPSR,R0;传送R0的内容到CPSRMSRSPSR,R0;传送R0的内容到SPSRMSRCPSR_c,R0;传送R0的内容到CPSR,但仅仅修 改CPSR中的控制位域案例分析AREAExample,CODE,READONLY;声明代码段Example1 ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令STARTMOV R1,#0 x1 MOV R

27、2,#0 x2 SUBS R1,R1,R2;改变CPSR中的条件标志位 MRS R0,CPSR ;取出CPSR中的值 BIC R0,R0,#0 x1F;改变R0中的值,为模式切换做准备 ORR R0,R0,#0 x1F MSR CPSR_cxsf,R0;cxsf分别代表着CPSR不同的位域END运行效果单寄存器传送指令LDR把一个字装入一个寄存器Rdmem32addressSTR从一个寄存器保存一个字或者一个字节Rdmem32addressLDRB把一个字节装入一个寄存器Rdmem8addressSTRB从一个寄存器保存一个字节Rdmem8addressLDRH把一个半字节装入一个寄存器Rdm

28、em16addressSTRH从一个寄存器保存一个半字Rdmem16address数据处理指令 LDRLDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理 。LDR指令语法: LDR条件 目的寄存器,例:LDR R0,R1 ;将存储器地址为R1的字数据读入寄存器R0。LDR R0,R1,R2 ;将存储器地址为R1+R2的字数据读入寄存器R0 寻址方式变址模式数据基址寄存器示例回写前变址membase+offset基址寄存器加上偏移LDR r0,r1,#4!前变址membase+offset不变LDR r0,r

29、1,#4后变址membase基址寄存器加上偏移LDR r0,r1,#4例子PRE r0=0 x00000000, r1=0 x00009000, Mem320 x00009000=0 x01010101 Mem320 x00009004=0 x02020202回写型前变址寻址: LDR r0, r1, #0 x4!POST r0=0 x02020202, r1=0 x00009004前变址寻址: LDR r0, r1,#0 x4 POST r0=0 x02020202, r1=0 x00009000后变址寻址: LDR r0, r1 ,#0 x4 POST r0=0 x01010101, r1

30、=0 x00009004数据处理指令 STRSTR指令用于从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令LDR 。STR指令语法: STR条件 源寄存器,例:STRR0,R1,8 ;将R0中的字数据写入以R1为地址的存储器中, 并将新地址R18写入R1STRR0,R1,8 ;将R0中的字数据写入以R18为地址的存储器中数据处理指令 SWPSWP从操作数2所指向的内存装载一个字并把这个字放置到目的寄存器 中。 把寄存器操作数1的内容存储到同一个地址中。 如果目的和操作1是同一个寄存器,则把寄存器的内容和给定内存位置的内容进行交换

31、。SWP指令语法:例:SWP R0,R1,R2SWP R0,R0,R1SWPB R0,R1,R2;将R2所指向的存储器中的字节数据传送到R0,R0的 高3个字节;置零,同时将R1中的低一个字节数据传 送到R2指向的存储单元SWPB R0,R0,R1;将R1所指向的存储器中的字节数据与R0中的低8位 数据交换案例分析一AREA Example,CODE,READONLY;声明代码段ExampleENTRY;标识程序入口CODE32;声明32位ARM指令STARTMOV R1,#0 x1000000MOV R4,#0 x1100000MOV R2,#0 x1600000MOV R3,#0 x120

32、0MOV R0,#0 x1STR R0,R1;R1-R0,寄存器间接寻址LDR R5,R1;R0-R1,寄存器间接寻址案例分析二ADD R5,R1,#4MOV R5,#0 x7LDR R0,R1,#4;R0-R1+4LDR R0, R1, #-4 ;R0-R1-4,还可以从基址上减去偏移量来寻址LDR R0,R1,#4! ;R0-R1+4, R1-R1+4,R1中的值?LDR R0,R1,#4;R0-R1, R1-R1+4,观察R0中的值,R1?LDR R0,R1,R2 ;R0-R1+R2,可以在方括号后附加“!”控制 写回R1=R1+R2STR R2,R4SWP R0,R1,R4SWP R0

33、,R0,R1B STARTEND协处理器指令 ARM的协处理器指令主要用于ARM处理器初始化ARM协处理器的数据处理操作,以及在ARM处理器的寄存器和协处理器的寄存器之间传送数据,和在ARM协处理器的寄存器和存储器之间传送数据。 CDP 协处理器数操作指令LDC 协处理器数据加载指令STC 协处理器数据存储指令MCR ARM处理器寄存器到协处理器寄存器的数据传送指令MRC 协处理器寄存器到ARM处理器寄存器的数据传送指令注:此部分不做为重点,了解一下即可异常产生指令 ARM微处理器所支持的异常指令有如下两条:SWI 软件中断指令 SWI指令用于产生软件中断,以便用户程序能调用操作系统的系统例程

34、。操作系统在SWI的异常处理程序中提供相应的系统服务, BKPT 断点中断指令(了解) SWI 0 x02 ;该指令调用操作系统编号位02的系统例程。 本环节主要学习ARM微处理器的,数据处理指令、移位指令、乘法指令与乘加指令、逻辑指令、跳转指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令九大类指令语法并举例说明其功能。 课程目录1324ARM微处理器的指令集概述 ARM指令集 ARM指令的寻址方式 Thumb指令及应用 ARM指令的寻址方式一 立即寻址:也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。 ADD

35、R0,R0,0 x3f ;R0R00 x3f定义:所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式寄存器寻址: 就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处 理器经常采用的一种方式 ADD R0,R1,R2 ;R0R1R2ARM指令的寻址方式二 寄存器间接寻址:就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。 ADD R0,R1,R2 ;R0R1R2LDR R0,R1 ;R0R1基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址 LDR R0,R1,4 ;R0R14LDR R0,R

36、1,4! ;R0R14、R1R14 ARM指令的寻址方式三多寄存器寻址:一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多16个通用寄存器的值 。 LDMIA R0,R1,R2,R3,R4;R1R0 ;R2R04 ;R3R08 ;R4R012相对寻址:以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址 BLNEXT;跳转到子程序NEXT处执行NEXT堆栈寻址 堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。AR

37、M微处理器所支持批量数据加载/存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送数据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作 堆栈操作ARM使用多寄存器Load/Store指令来完成堆栈操作; 使用堆栈时,需要确定堆栈在存储空间中是向上生长(递增的“A”)还是向下生长(递减的“D”); 满堆栈(“F”)是指堆栈指针指向堆栈的最后一个已使用的地址或满位置;相反,空堆栈(“E”)是指SP指向堆栈的第一个没有使用的地址或空位置;堆栈操作寻址方式寻址方式说明pop=LDMpush=STMFA递增满LDMFALDMDASTMFASTMIBFD

38、递减满LDMFDLDMIASTMFDSTMDBEA递增空LDMEALDMDBSTMEASTMIAED递减空LDMEDLDMIBSTMEDSTMDALDMFD sp!,r4-r7,pcSP100FF1234AOBE80341010123484209753r41r514544r60r712lr9048pc9020r4100100FFr5FF1234r61234A0BEr7A0BE8034pc8034堆栈r4100r5FFr61234r7A0BElr8034ABCD8765102E16FFFF1010123484209753存储器顶SPSP100FF1234A0BE8034SPOld SP100FF

39、1234A0BE8034ARM堆栈操作通过块传送指令来完成:STMFD(Push)块存储- Full Descending stack STMDBLDMFD(Pop)块装载- Full Descending stack LDMIASTMFD sp!,r4-r7,lr例:把寄存器内容放入堆栈,更新sp0 x800180 x000000010 x800140 x000000020 x80010Empty0 x8000cEmpty0 x800180 x000000010 x800140 x000000020 x800100 x000000030 x8000c0 x00000002PRE 地址 数据POST 地址 数据SPSPPRE : r1=0 x0000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论