嵌入式系统原理与开发Ch3-ARM指令系统课件.ppt

上传人(卖家):三亚风情 文档编号:3497399 上传时间:2022-09-07 格式:PPT 页数:103 大小:3.23MB
下载 相关 举报
嵌入式系统原理与开发Ch3-ARM指令系统课件.ppt_第1页
第1页 / 共103页
嵌入式系统原理与开发Ch3-ARM指令系统课件.ppt_第2页
第2页 / 共103页
嵌入式系统原理与开发Ch3-ARM指令系统课件.ppt_第3页
第3页 / 共103页
嵌入式系统原理与开发Ch3-ARM指令系统课件.ppt_第4页
第4页 / 共103页
嵌入式系统原理与开发Ch3-ARM指令系统课件.ppt_第5页
第5页 / 共103页
点击查看更多>>
资源描述

1、ARM指令系统指令系统本课程的主要内容本课程的主要内容u从从ARM指令集的编码、条件执行、指令分类及指令指令集的编码、条件执行、指令分类及指令格式等几个方面对格式等几个方面对ARM指令集进行概述。指令集进行概述。uARM指令集的指令编码长度是以指令集的指令编码长度是以32位定长二进制给位定长二进制给出的。出的。u编码格式编码格式lARM指令集的指令编码格式是三操作数指令格式:包括操作指令集的指令编码格式是三操作数指令格式:包括操作码、第一操作数(源操作数)、第二操作数、目的操作数、条码、第一操作数(源操作数)、第二操作数、目的操作数、条件标志位等部分。件标志位等部分。lPUWLABSNR#的位

2、含义:在寻址方式中,的位含义:在寻址方式中,P=1表示前变址,表示前变址,P=0表示后变址;在长乘法中,表示后变址;在长乘法中,U=1表示无符号;在非长乘法表示无符号;在非长乘法中,中,U=1表示地址递增,表示地址递增,U=0表示地址递减;表示地址递减;W=1表示回写修表示回写修改基址寄存器,改基址寄存器,W=0表示不回写修改基址寄存器;在分支指令表示不回写修改基址寄存器;在分支指令中,中,L=1表示带链接的转移;在非分支指令中表示带链接的转移;在非分支指令中L=1表示是表示是Load指令,指令,L=0表示是表示是Store指令;指令;A表示累加器;表示累加器;B=1表示字节表示字节;在多寄存

3、器操作中,;在多寄存器操作中,S=1表示有符号;在非多寄存器操作中表示有符号;在非多寄存器操作中,S=1表示更新条件码;表示更新条件码;N=1表示协处理器;表示协处理器;R=1表示是表示是SPSR,R=0表示是表示是CPSR;#=1表示立即数。表示立即数。u编码格式编码格式表表4.1ARM指令集编码指令集编码31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 98765 4 3 2 1 0说明说明Cond0 0 1Opcode SRnRdOperand2数据处理数据处理/PSR状态转换状态转换Cond0 0 0 0

4、 0 0 A SRdRnRs1 D 0 1Rm 乘法乘法Cond0 0 0 0 1 U A SRdHiRdLoRn1 D 0 1Rm 长乘法长乘法Cond0 0 0 1 0 B 0 0RnRd0 0 0 0 1 D 0 1Rm 数据交换数据交换Cond0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1Rm 分支与交换分支与交换Cond0 0 0 P U 0 W LRnRd0 0 0 0 1 S H 1Rm 半字存取寄存器偏移量半字存取寄存器偏移量Cond0 0 0 P U 1 W LRnRdOffset1 S H 1Rm 半字存取立即数偏移量半字存取

5、立即数偏移量Cond0 1 1 P U B W LRnRdOffset单数据存取单数据存取Cond0 0 0 1 0 R 0 0 1 1 1 1Rd0 0 0 0 0 0 0 0 0 0 0 0 状态寄存器传输指令状态寄存器传输指令Cond0 1 11未定义未定义Cond1 0 0 P U S W LRnREGISTER LIST数据块存取数据块存取Cond1 0 1Offset分支分支Cond1 1 0 P U N W LRnCRdCP#OFFSET协处理器数据存取协处理器数据存取Cond1 1 1OpcodeCRnCRdCP#CP0 GRm 协处理器数据操作协处理器数据操作Cond1 1

6、1Opcode LCRnRdCP#CP1 GRm 协处理寄存器传送协处理寄存器传送Cond1 1 1Ignored by Processor软中断软中断31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 98 7 65 4 3 2 1 0u编码说明编码说明l假设指令编码用假设指令编码用Code31:00表示,简写为表示,简写为C31:00。lC31:28部分是条件码,通常用部分是条件码,通常用Cond表示,共有表示,共有16种组合种组合,可对应,可对应16个条件。个条件。lC27:20部分是操作码,表征指令的操作功

7、能。部分是操作码,表征指令的操作功能。lC19:16部分是源操作数,共有部分是源操作数,共有16种组合,指定一个寄存种组合,指定一个寄存器作为源操作数(第一操作数)。器作为源操作数(第一操作数)。lC15:12部分是目的操作数,共有部分是目的操作数,共有16种组合,指定一个寄种组合,指定一个寄存器作为目的作数。存器作为目的作数。lC11:00部分是第二操作数,可以指定一个规格化的立即部分是第二操作数,可以指定一个规格化的立即数、地址偏移量、寄存器移位操作等。数、地址偏移量、寄存器移位操作等。uARM指令可以根据条件执行。因此,在指令可以根据条件执行。因此,在ARM指令的编指令的编码中,必须包含

8、条件编码码中,必须包含条件编码Cond。u条件码表条件码表lARM指令条件码如表指令条件码如表4.2所示。所示。u条件码说明条件码说明lCond:Cond条件码使用条件码使用C31:28四位。每种条件使用两四位。每种条件使用两个英文缩写字符表示其含义,可以添加在指令助记符后面,组个英文缩写字符表示其含义,可以添加在指令助记符后面,组成带条件执行的指令助记符。成带条件执行的指令助记符。lARM指令根据指令根据CPSR中的条件位自动判断中的条件位自动判断Cond条件是否满足条件是否满足、进而决定指令是否被执行。当、进而决定指令是否被执行。当Cond指定的条件满足时,指指定的条件满足时,指令被执行;

9、当令被执行;当Cond指定的条件不满足时,指令被忽略,忽略指定的条件不满足时,指令被忽略,忽略时相当于一条时相当于一条NOP指令。指令。u条件码表条件码表l例如:例如:MOVEQ是指令助记符是指令助记符MOV和条件码和条件码EQ的组合,要求根的组合,要求根据前面指令执行的结果来判断,如果相等则执行传送数据,不据前面指令执行的结果来判断,如果相等则执行传送数据,不相等则不传送数据。即相等则不传送数据。即CPSR.Z=1时,执行指令。时,执行指令。表表4.2 ARM指令的条件码指令的条件码Cond31:28 助记符扩展助记符扩展解释解释CPSR0000EQ相等相等/等于等于0Z置位置位0001NE

10、不等不等Z清零清零0010CS/HS进位进位/无符号数高于或等于无符号数高于或等于 C置位置位0011CC/LO无进位无进位/无符号数小于无符号数小于C清零清零0100MI负数负数N置位置位0101PL正数或正数或0N清零清零0110VS溢出溢出V置位置位0111VC未溢出未溢出V清零清零1000HI无符号数高于无符号数高于C置位置位Z清零清零1001LS无符号数大于或等于无符号数大于或等于C清零清零Z置位置位1010GE有符号数小于或等于有符号数小于或等于N等于等于V1011LT有符号数小于有符号数小于N不等于不等于V1100GT有符号数大于有符号数大于Z清零且清零且N等于等于V1101LE

11、有符号数小于或等于有符号数小于或等于Z置位且置位且N不等于不等于V1110总是总是任何状态任何状态1111NV从不从不无无uARM指令集是指令集是Load/Store型的。型的。l只能通过只能通过Load/Store指令对存储器访问;指令对存储器访问;l其它类型的指令只能基于处理器内部寄存器进行操作。其它类型的指令只能基于处理器内部寄存器进行操作。u指令分类指令分类lARM指令集可分为指令集可分为6大类型:数据处理类指令、大类型:数据处理类指令、LOAD/STORE类指令、跳转类指令、程序状态寄存器处理类指令、协处理器类指令、跳转类指令、程序状态寄存器处理类指令、协处理器类指令、异常产生类指令

12、。类指令、异常产生类指令。u指令格式:指令格式:lS,u格式说明格式说明lOpcode:操作码助记符,如:操作码助记符,如MOV、LDR、STR等;等;lCond:可选执行条件助记符,如:可选执行条件助记符,如EQ、NE等;等;u格式说明格式说明lS:可选后缀;若指定:可选后缀;若指定S,则根据指令执行结果更新,则根据指令执行结果更新CPSR的的条件码条件码NZCV;lRd:目标操作数的寄存器,可以是:目标操作数的寄存器,可以是R0R15中任意一个;中任意一个;lRn:源操作数的寄存器,可以是:源操作数的寄存器,可以是R0R15中任意一个;中任意一个;lOperand2:第二个操作数;:第二个

13、操作数;l:表示:表示内的部分是必须的,如内的部分是必须的,如是指令助记符是指令助记符,Opcode是必须书写的;是必须书写的;l:表示:表示内的部分是可选的;若不书写,则使用默认条内的部分是可选的;若不书写,则使用默认条件件AL(无条件执行);(无条件执行);l、S之间没有任何分隔符;之间没有任何分隔符;l操作数之间可以用操作数之间可以用“,”、空格或、空格或Tab分割;分割;u实例实例4.1:ARM7TDMI指令格式实例。指令格式实例。lLDRR0,R1;读取读取R1指向的地址的内容,执行条指向的地址的内容,执行条件件ALlBEQDATAEVEN;条件执行分支指令,执行条件条件执行分支指令

14、,执行条件EQ,相等则转移到相等则转移到DATAEVENlADDSR2,R1,#1;加法指令,加法指令,R2 R1+1,影响,影响CPSR的的S位位lSUBNES R2,R1,#x20;条件执行的减法指令,执行条件执行的减法指令,执行条件条件NE,R2 R1-x20,影响,影响CPSR的的S位位表表4.3 ARM指令列表指令列表助记符助记符操作操作描述描述注注ADCRd:=Rn+Op2+C带进位加法。带进位加法。ADDRd:=Rn+Op2将常数或寄存器与另一个寄存器相加。将常数或寄存器与另一个寄存器相加。ANDRd:=Rn AND Op2逻辑与。逻辑与。BR15:=address分支转跳。分支

15、转跳。BICRd:=Rn AND NOT Op2位清除。位清除。BKPT进入调试状态进入调试状态断点。断点。1BLR14:=下条指令地址,下条指令地址,R15:=转跳地址。转跳地址。带链条转跳。带链条转跳。BLXR14:=下条指令地址,下条指令地址,R15:=Rm31:1,当当地址地址0位为位为1时转跳到时转跳到Thumb 态。态。带链条和状态切换转跳。带链条和状态切换转跳。1BXR15:=Rn,change to Thumb if address bit 0 is 1带状态切换转跳。带状态切换转跳。CDP协处理器指令协处理器指令协处理器数据操作。协处理器数据操作。CDP2协处理指令协处理指令

16、可选择的数据操作。可选择的数据操作。1CLZRd:=Rm中前导零的数目中前导零的数目计数前导零。计数前导零。1CMNCPSR flags:=Rn+Op2负数比较指令。负数比较指令。1CMPCPSR flags:=Rn-Op2常数或寄存器之间比较。常数或寄存器之间比较。EORRd:=Rn EOR Op2异或操作。异或操作。LDC协处理器数据读取指令协处理器数据读取指令从内存某一连续单元加载到协处理器寄从内存某一连续单元加载到协处理器寄存器中。存器中。表表4.3 ARM指令列表指令列表助记符助记符操作操作描述描述注注LDC2特殊协处理器加载特殊协处理器加载可选择的加载。可选择的加载。1LDM栈操作

17、栈操作(Pop)加载多个寄存器。加载多个寄存器。LDRRd:=address31:0从内存中加载一个从内存中加载一个32位数据。位数据。LDRBRd:=ZeroExtend(address7:0)从内存中加载一个字节数据。从内存中加载一个字节数据。LDRHRd:=ZeroExtend(address15:0)从内存中加载一个从内存中加载一个16位半字数据。位半字数据。LDRSBRd:=SignExtend(address7:0)从内存中加载一个有符号的字节数据。从内存中加载一个有符号的字节数据。LDRSHRd:=SignExtend(address15:0)从内存中加载一个有符号的半字数据。从

18、内存中加载一个有符号的半字数据。LDRDRd:=address31:0 Rd+1:=address+431:0从内存中加载一个双字从内存中加载一个双字Rd 和和 Rd+1。MCRcRn:=rRn cRm数据从数据从CPU寄存器传送到协处理器寄存器。寄存器传送到协处理器寄存器。MCR2协处理器指定协处理器指定可选传送。可选传送。1MCRR协处理器指定协处理器指定2个个ARM寄存器传送。寄存器传送。1MLARd:=(Rm*Rs)+Rn乘加指令。乘加指令。MOVRd:=Op2将常数或寄存器传送给另一个寄存器。将常数或寄存器传送给另一个寄存器。MRCRn:=cRncRm数据从协处理器寄存器传送到数据从

19、协处理器寄存器传送到CPU寄存器。寄存器。MRC2协处理器指定协处理器指定可选传送。可选传送。1MRRC协处理器指定协处理器指定2个个ARM寄存器传送。寄存器传送。1MRSRn:=PSR读状态寄存器指令。读状态寄存器指令。MSRPSR:=Rm写状态寄存器指令。写状态寄存器指令。表表4.3 ARM指令列表指令列表助记符助记符操作操作描述描述注注MULRd:=Rm*Rs乘法指令。乘法指令。MVNRd:=NOT Rm数据非传送指令。数据非传送指令。NOP无无空操作。空操作。1ORRRd:=Rn OR Op2或操作。或操作。PLD内存从预定地址加载内存从预定地址加载内存预装载。内存预装载。1QADDR

20、d:=SAT(Rm+Rn)饱和加。饱和加。1QDADDRd:=SAT(Rm+SAT(Rn*2)双精度饱和加。双精度饱和加。1QSUBRd:=SAT(Rm-Rn)饱和减。饱和减。1QDSUBRd:=SAT(Rm-SAT(Rn*2)双精度饱和减。双精度饱和减。1RSBRd:=Op2 Rn逆向减法指令。逆向减法指令。RSCRd:=Op2-Rn-1+Carry带进位逆向减法指令。带进位逆向减法指令。SBCRd:=Rn-Op2-1+Carry带进位减法。带进位减法。SMULxyRd:=Rmx*Rsy饱和乘。饱和乘。1SMULWy Rd:=(Rm*Rsy)47:16饱和乘。饱和乘。1SMLAxyRd:=R

21、n+Rmx*Rsy饱和乘。饱和乘。1SMLAWy Rd:=Rn+(Rm*Rsy)47:16饱和乘。饱和乘。1SMLALxy RdHi,RdLo:=RdHi,RdLo+Rmx*Rsy 饱和乘。饱和乘。1STCaddress:=CRn存储协处理器寄存器。存储协处理器寄存器。STC2协处理器指定协处理器指定可选存储。可选存储。1表表4.3 ARM指令列表指令列表助记符助记符操作操作描述描述注注STM栈操作栈操作(Push)存储多个寄存器寄存器。存储多个寄存器寄存器。STR:=Rd保存一个寄存器到内存。保存一个寄存器到内存。STRBaddress7:0:=Rd7:0存储寄存器字节到内存。存储寄存器字节

22、到内存。STRHaddress15:0:=Rd15:0存储寄存器半字到内存。存储寄存器半字到内存。STRDaddress31:0:=Rd address+431:0:=Rd+1存储寄存器双字存储寄存器双字 Rd 和和 Rd+1。1SUBRd:=Rn-Op2减法。减法。SWIOS 调用调用软中断。软中断。SWPRd:=Rn,Rn:=Rm寄存器和存储器交换指令。寄存器和存储器交换指令。SWPBRd:=ZeroExtendedRn7:0,Rn7:0:=Rm寄存器和存储器交换字节指令。寄存器和存储器交换字节指令。TEQCPSR flags:=Rn EOR Op2相等测试指令。相等测试指令。TSTCPS

23、R flags:=Rn AND Op2位测试。位测试。1:ARM9之后的处理器才具有的指令。之后的处理器才具有的指令。u定义:操作数就包含在定义:操作数就包含在32位指令编码中,只要取出位指令编码中,只要取出指令,就可以得到立即数;指令,就可以得到立即数;l实例实例4.2:简单立即数寻址实例。:简单立即数寻址实例。ADDSR0,R0,#1;R0R0+#1ANDR8,R7,#xF0;R8R7 and#xF0;#为立即数前缀为立即数前缀;0 x或或&是是16进制前缀;进制前缀;0d是是10进制前缀;进制前缀;0b是是2进制前缀进制前缀u合法的立即数合法的立即数定义定义l显然,定长的显然,定长的32

24、位指令是无法完整表示位指令是无法完整表示32位立即数的。在位立即数的。在A R M 指 令 集 中,合 法 的 立 即 数 是 通 过指 令 集 中,合 法 的 立 即 数 是 通 过 8 位 立 即 数位 立 即 数循环右移生成的,因此能够使用的立即数是循环右移生成的,因此能够使用的立即数是32位整数的一个子集。位整数的一个子集。u合法的立即数合法的立即数定义定义l的生成方法:的生成方法:=对对 循 环 右 移循 环 右 移(2*)位位其中,其中,是是32位合法立即数;位合法立即数;是给是给定的定的8位立即数;位立即数;是指定的是指定的4位移位位数,实位移位位数,实际移位位数为际移位位数为2

25、*位。因此,一个能够被合法位。因此,一个能够被合法使用的立即数使用的立即数必须能够的编码为必须能够的编码为其编码长度为其编码长度为12位,使用位,使用32位指令编码的低位指令编码的低12位。位。l实例实例4.3:合法立即数实例:合法立即数实例L1MOVR0,#0 x0000F200;编译:编译:E3A00CF2,后,后12位位CF2,0 xF200是是#F2循环右移循环右移2*C=24位位L2MOVR0,#0 x00012800;编译:编译:E3A00B4A,后,后12位位B4A,0 x12800是是#4A循环右移循环右移2*B=22位位u合法的立即数合法的立即数定义定义l说 明:说 明:L

26、2 中 的中 的 0 x 1 2 8 0 0 编 码 后 是编 码 后 是 B 4 A,=B、=#4A,右循环右移右循环右移2*B=22位后就是位后就是0 x12800。u定义:寄存器的内容是操作数。定义:寄存器的内容是操作数。u实例实例4.4:寄存器寻址:寄存器寻址lL1 ADD R0,R1,R2;R0R1+R2。lL2 ADD R3,R2,R1,LSR#2;R3R2+(R1逻逻辑右移辑右移2位后的值,即为位后的值,即为R1/22)。lL3 ADD R3,R2,R1,LSRR4;R3R2+(R1逻逻辑右移辑右移R4位后的值,即为位后的值,即为R1/2R4)。l说明:说明:L3的功能是将的功能

27、是将R1逻辑右移逻辑右移R4位后的值,再与位后的值,再与R2的的内容相加,结果存放到内容相加,结果存放到R3中。中。u第二操作数的移位操作第二操作数的移位操作l在第二操作数为寄存器类型时,若在执行寄存器寻址操作,在第二操作数为寄存器类型时,若在执行寄存器寻址操作,则可选择是否对寄存器进行移位。则可选择是否对寄存器进行移位。l移位格式移位格式,shiftbit;为为移位方式,移位方式,shiftbit移位位数。移位位数。在移位操作中,移位位数可以是通用寄存器,也可以是立即数(在移位操作中,移位位数可以是通用寄存器,也可以是立即数(031)。)。l移位方式:移位方式:ShiftTypeLSL:Lo

28、gical Shift Left,逻辑左移,空出的最低位用,逻辑左移,空出的最低位用0填充;填充;LSR:Logical Shift Right,逻辑右移,空出的最高位用,逻辑右移,空出的最高位用0填充;填充;ASL:Arithmetic Shift Left,算术左移,算术移位的对象是有,算术左移,算术移位的对象是有符号数,空出的最低位用符号数,空出的最低位用0填充;与填充;与LSL含义相同;含义相同;u第二操作数的移位操作第二操作数的移位操作l移位方式:移位方式:ShiftTypeASR:Arithmetic Shift Right,算术右移,算术移位的对象是有,算术右移,算术移位的对象是

29、有符号数,移位后保持正负数不变。空出的最高位用符号位填充符号数,移位后保持正负数不变。空出的最高位用符号位填充,即:如即:如果是正数用果是正数用0填充,如果是正数用填充,如果是正数用1填充;填充;ROR:Rotate Right,循环右移,移出的最低位依次填入空出的最高,循环右移,移出的最低位依次填入空出的最高位;位;RRX:Rotate Right Extended by 1 Place,带扩展的循环右移,带扩展的循环右移,寄存器的内容循环右移一位,移出的最低位到,寄存器的内容循环右移一位,移出的最低位到C标志位,空出的最高位标志位,空出的最高位用用C标志位填充,只有当标志位填充,只有当RR

30、X是不需指定移位位数;是不需指定移位位数;l移位位数:移位位数:shiftbit移位位数移位位数shiftbit可用立即数或者寄存器给出;指令实例见实例可用立即数或者寄存器给出;指令实例见实例4.4的的L2和和L3。u定义:寄存器的内容是操作数的有效地址,寄存器定义:寄存器的内容是操作数的有效地址,寄存器相当于一个指针。相当于一个指针。u实例实例4.5:寄存器间址实例。:寄存器间址实例。lLDRR0,R1;R0MEM32R1。lSTRR0,R1;R0MEM32R1。l;LDR=Load,STR=Storel;ARM的存储器访问指令的存储器访问指令Load/Store都是基于寄存器间接寻都是基于

31、寄存器间接寻址的。址的。u定义:基址加偏址寻址简称变址寻址。基址寄存器定义:基址加偏址寻址简称变址寻址。基址寄存器的内容加上指令中给出的偏移量作为操作数的有效地的内容加上指令中给出的偏移量作为操作数的有效地址,用于访问基址附近的存储单元。址,用于访问基址附近的存储单元。u变址寻址格式变址寻址格式l变址寻址方式有前变址、自动变址、后变址;变址寻址方式有前变址、自动变址、后变址;l前变址(前变址(pre-indexed):先生成存储器有效地址但基址):先生成存储器有效地址但基址寄存器保持不变,然后按生成的存储器有效地址进行操作数寻寄存器保持不变,然后按生成的存储器有效地址进行操作数寻址、执行指令操

32、作;址、执行指令操作;l自动变址(自动变址(Auto-indexed):先生成存储器有效地址并修):先生成存储器有效地址并修改到基址寄存器,然后按生成的存储器有效地址进行操作数寻改到基址寄存器,然后按生成的存储器有效地址进行操作数寻址、执行指令操作;址、执行指令操作;l后变址(后变址(Post-indexed):先按基址寄存器中的有效地址):先按基址寄存器中的有效地址进行操作数寻址、执行指令操作,然后再生成存储器新有效地进行操作数寻址、执行指令操作,然后再生成存储器新有效地址并修改到基址寄存器;址并修改到基址寄存器;u实例实例4.6:变址寻址的简单实例。:变址寻址的简单实例。L1 LDR R0

33、,R1+#4;前变址:前变址:R0MEM32R1+#4L2 LDR R0,R1+#4!;自动变址:自动变址:R0MEM32R1+#4;R1 R1+#4L3 LDR R0,R1,#4;后变址:后变址:R0MEM32R1;R1R1+#4;“!”表示在完成数据传送后,自动修改基址寄存器的内容。后变址无表示在完成数据传送后,自动修改基址寄存器的内容。后变址无须添加须添加“!”。;总是具有高优先级,因此,在总是具有高优先级,因此,在L3中,是先从中,是先从R1中取出数据作为存中取出数据作为存储器地址,加载储器地址,加载R0,后修改,后修改R0;;在在L2中,是先计算中,是先计算R1+4,其结果作为存储器

34、地址,加载,其结果作为存储器地址,加载R0,后修改,后修改R0;;在在L1中,是先计算中,是先计算R1+4,其结果作为存储器地址,加载,其结果作为存储器地址,加载R0,但不修,但不修改改R0;u偏移地址偏移地址l在指令编码中,偏移量(偏移地址)占有在指令编码中,偏移量(偏移地址)占有12位,因此其范围位,因此其范围在在4KB以内;以内;l偏移地址可以是立即数地址、寄存器、寄存器移位;偏移地址可以是立即数地址、寄存器、寄存器移位;l寄存器间址实质上就是偏移量为寄存器间址实质上就是偏移量为0的基址加偏址寻址;的基址加偏址寻址;l这种寻址方式具有很高的执行效率且编程技巧很高。这种寻址方式具有很高的执

35、行效率且编程技巧很高。u实例实例4.7:偏移地址类型实例。:偏移地址类型实例。lLDR R0,R1+#4 ;立即数:立即数:R0MEM32R1+#4。lLDR R0,R1+R2!;寄存器:寄存器:R0MEM32R1+R2;R1R1+R2lLDR R0,R1+R2,LSR#2;寄存器移位:寄存器移位:R0MEM32R1+R2*4;R1 R1+R2*4u传送数据类型传送数据类型l传送数据类型可以是有符号和无符号的传送数据类型可以是有符号和无符号的8位字节操作、位字节操作、16位位半字操作、半字操作、32位字操作;位字操作;l字节操作:助记符为字节操作:助记符为LDRB/LDRSB、STRB(B代表

36、字节,代表字节,S代表有符号数),加载或存储有符号或无符号的代表有符号数),加载或存储有符号或无符号的8位字节数据位字节数据到寄存器或存储器;到寄存器或存储器;l半字操作:助记符为半字操作:助记符为LDRH/LDRSH、STRH(H代表半字,代表半字,S代表有符号数),加载或存储有符号或无符号的代表有符号数),加载或存储有符号或无符号的16位半字数位半字数据到寄存器或存储器;据到寄存器或存储器;l字操作:助记符为字操作:助记符为LDR、STR,加载或存储有符号或无符号,加载或存储有符号或无符号的的32位字数据到寄存器或存储器;位字数据到寄存器或存储器;l在有符号数中,最高位为符号位;在有符号数

37、中,最高位为符号位;u实例实例4.8:传送数据类型实例:传送数据类型实例lLDRBR0,R1;R0MEM8R1,加载无符号,加载无符号8位位字节数据到字节数据到R0,零扩展到,零扩展到32位位lLDRSHR0,R1;R0MEM16R1,加载有符号,加载有符号16位半字数据到位半字数据到R0,符号扩展到,符号扩展到32位位lLDRR0,R1;R0MEM32R1l说明:说明:STR部分有符号和无符号指令。部分有符号和无符号指令。u堆栈是一种数据结构,按先进后出(堆栈是一种数据结构,按先进后出(FILO,First In Last Out)的方式工作,使用一个称作堆栈指针)的方式工作,使用一个称作堆

38、栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。当堆栈指针指向最后压入堆栈的数据时,称向栈顶。当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(为满堆栈(Full Stack);而当堆栈指针指向下一);而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(个将要放入数据的空位置时,称为空堆栈(Empty Stack)。另外,根据堆栈的生成方式,又可以分为)。另外,根据堆栈的生成方式,又可以分为递增堆栈(递增堆栈(Ascending Stack)和递减堆栈()和递减堆栈(Decending Stack)。当堆栈由低地址向高地址生)。当堆

39、栈由低地址向高地址生成时,称为递增堆栈;当堆栈由高地址向低地址生成成时,称为递增堆栈;当堆栈由高地址向低地址生成时,称为递减堆栈。时,称为递减堆栈。u堆栈的四种形式堆栈的四种形式l堆栈的空与满、递增与递减交叉生成四种类型的堆栈工作方式。堆栈的空与满、递增与递减交叉生成四种类型的堆栈工作方式。l满递增:用满递增:用FA表示。压栈方向是随着存储器地址的增大而向上增长(大表示。压栈方向是随着存储器地址的增大而向上增长(大地址),堆栈指针地址),堆栈指针/基址寄存器指向存储有效数据的最高地址或者指向第基址寄存器指向存储有效数据的最高地址或者指向第一个要读出的数据的位置;一个要读出的数据的位置;l空递增

40、:用空递增:用EA表示。压栈方向是随着存储器地址的增大而向上增长(大表示。压栈方向是随着存储器地址的增大而向上增长(大地址),堆栈指针地址),堆栈指针/基址寄存器指向存储有效数据的最高地址之上的一个基址寄存器指向存储有效数据的最高地址之上的一个空位置或者指向第一个要读出的数据位置之上的一个空位置;空位置或者指向第一个要读出的数据位置之上的一个空位置;l满递减:用满递减:用FD表示。压栈方向是随着存储器地址的减小而向下增长(小表示。压栈方向是随着存储器地址的减小而向下增长(小地址),堆栈指针地址),堆栈指针/基址寄存器指向存储有效数据的最低地址或者指向第基址寄存器指向存储有效数据的最低地址或者指

41、向第一个要读出的数据的位置;一个要读出的数据的位置;l空递减:用空递减:用ED表示。压栈方向是随着存储器地址的减小而向上增长(小表示。压栈方向是随着存储器地址的减小而向上增长(小地址),堆栈指针地址),堆栈指针/基址寄存器指向存储有效数据的最高地址之下的一个基址寄存器指向存储有效数据的最高地址之下的一个空位置或者指向第一个要读出的数据位置之下的一个空位置;空位置或者指向第一个要读出的数据位置之下的一个空位置;u堆栈说明堆栈说明l堆栈指针:堆栈指针:SP,堆栈地址寄存器,通常由,堆栈地址寄存器,通常由R13来担任。来担任。lARM指令中,堆栈操作通过多寄存器加载指令中,堆栈操作通过多寄存器加载/

42、存储指令存储指令LDM/STM实现,通常在实现,通常在LDM/STM之后添加堆栈类型,如之后添加堆栈类型,如LDMFD/STMFD。不同的堆栈类型,其实际操作是不同的。不同的堆栈类型,其实际操作是不同的。l堆栈操作总是要指定自动变址的,否则会覆盖以前保存的内堆栈操作总是要指定自动变址的,否则会覆盖以前保存的内容。容。l无论何种堆栈,小编号寄存器总是压入小地址存储单元、大无论何种堆栈,小编号寄存器总是压入小地址存储单元、大编号寄存器总是压入大地址存储单元。因此,递增栈就按照由编号寄存器总是压入大地址存储单元。因此,递增栈就按照由小到大的顺序进栈、递减栈就按照由大到小的顺序进栈。反之小到大的顺序进

43、栈、递减栈就按照由大到小的顺序进栈。反之,出栈亦然。即,满足大大小小的对应关系。,出栈亦然。即,满足大大小小的对应关系。l压栈和出栈指令必须使用相同的站类型,即成对出现。压栈和出栈指令必须使用相同的站类型,即成对出现。lThumb指令中,堆栈操作用指令中,堆栈操作用PUSH/POP指令。指令。u实例实例4.9:堆栈操作实例:堆栈操作实例lSTMFDSP!,R1 R7,LR;数据压栈,将数据压栈,将R1 R7,LR中的数据中的数据FD压栈压栈lLDMFDSP!,R1 R7,LR;数据出栈,将数据出栈,将FD堆堆栈中的数据弹入栈中的数据弹入R1 R7,LRu块拷贝寻址采用多寄存器寻址方式,一条指令

44、可以块拷贝寻址采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多指令完成传送最多16个通用寄存器个通用寄存器R0R15的值。的值。u块拷贝寻址方式块拷贝寻址方式l块拷贝使用多寄存器传送指令块拷贝使用多寄存器传送指令LDM/STM;LDM可以把存储器可以把存储器中的一个数据块加载到多个寄存器;中的一个数据块加载到多个寄存器;STM可以把多个寄存器的可以把多个寄存器的内容保存到存储器中;内容保存到存储器中;lLDM/STM的寻址依照其后缀来确定,如的寻址依照其后缀来确定,如LDMDA/STMIB。不。不同的

45、后缀,其实际操作是不同的。同的后缀,其实际操作是不同的。LDM/STM的后缀包括的后缀包括IA、IB、DA、DB、FD、ED、FA、EA,其中,其中IA、IB、DA、DB称称为块拷贝寻址方式,为块拷贝寻址方式,FD、ED、FA、EA称为堆栈寻址方式。二称为堆栈寻址方式。二者关系如表者关系如表4.4和表和表4.5所示。所示。u块拷贝寻址方式块拷贝寻址方式lIA:Increment After,操作完成后地址递增;,操作完成后地址递增;lIB:Increment Before,地址先递增后完成操作;,地址先递增后完成操作;lDA:Decrement After,操作完成后地址递减;,操作完成后地址

46、递减;lDB:Decrement Before,地址先递减后完成操作;,地址先递减后完成操作;lFD:Full Decrement,满递减堆栈,堆栈操作;,满递减堆栈,堆栈操作;lED:Empty Decrement,空递减堆栈,堆栈操作;,空递减堆栈,堆栈操作;lFA:Full Aggrandizement,满递增堆栈,堆栈操作;,满递增堆栈,堆栈操作;lEA:Empty Aggrandizement;空递增堆栈,堆栈操作;空递增堆栈,堆栈操作;u实例实例4.10:堆栈与块操作图解:堆栈与块操作图解堆栈与块操作图解如图堆栈与块操作图解如图4.1所示:所示:R90 x1018R9R50 x10

47、18R5R1R1R0R9R00 xR90 x0 x10000 x1000块操作块操作STMIAR9!,(R0,R1,R5)STMIBR9!,(R0,R1,R5)栈操作栈操作STMEAR13!,(R0,R1,R5)STMFAR13!,(R0,R1,R5)0 x10180 x1018R9R50 xR90 xR1R5R0R1R90 x1000R9R00 x1000块操作块操作STMDAR9!,(R0,R1,R5)STMDBR9!,(R0,R1,R5)栈操作栈操作STMEDSP!,(R0,R1,R5)STMFDSP!,(R0,R1,R5)u实例实例4.10:堆栈与块操作图解:堆栈与块操作图解STMIA

48、R0!,R2 R9;将寄存器将寄存器R2 R9中的数据存储到存储器,中的数据存储到存储器,R0=R0+32LDMIAR1,R2 R9;将存储器中的数据加载寄存器将存储器中的数据加载寄存器R2 R9,R1不变不变u与基址变址寻址方式相类似,相对寻址以程序计数与基址变址寻址方式相类似,相对寻址以程序计数器器PC的当前值为基地址,指令中的地址标号作为偏移的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。量,将两者相加之后得到操作数的有效地址。u定义:以定义:以PC为基址寄存器加上偏移地址形成存储器为基址寄存器加上偏移地址形成存储器有效地址。有效地址。u实例实例4.11

49、:相对寻址实例:相对寻址实例lBLSUBR;转移到转移到SUBRl;返回到此返回到此lSUBR;子程序入口子程序入口lMOVPC,R4;返回返回l该程序段完成子程序的调用和返回,跳转指令该程序段完成子程序的调用和返回,跳转指令BL采用了相对采用了相对寻址方式:寻址方式:BL SUBR跳转到子程序跳转到子程序SUBR处执行。处执行。u程序结构程序结构;*;符号说明:符号说明:;#&表示十六进制立即数表示十六进制立即数:#&0F;#0 x表示十六进制立即数表示十六进制立即数:#0 xf0;#%表示二进制立即数表示二进制立即数:#%1010;#n_表示表示(n=2,.9)进制的立即数进制的立即数:#

50、2_1010;-;指令格式:指令格式:;S Rd,Rn,;-;功能说明:功能说明:;介绍介绍7种寻址方式种寻址方式;-u程序结构程序结构;*AREA EREGS,CODE,READONLY ;不能顶头写不能顶头写;定义段定义段 段名称段名称 代码段代码段 段性质段性质 ENTRY;段开始段开始 CODE32;32位位;=SUB_NUMEQU6 ;指定要运行的子程序的号指定要运行的子程序的号;=START;符号必须顶头写,这是符号的定义格式符号必须顶头写,这是符号的定义格式 NOP;指令不能顶头写指令不能顶头写;填写用户程序,自编测试程序填写用户程序,自编测试程序END;伪操作伪操作/伪指令也不

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(嵌入式系统原理与开发Ch3-ARM指令系统课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|