嵌入式系统原理与开发Ch3-ARM指令系统课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《嵌入式系统原理与开发Ch3-ARM指令系统课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 原理 开发 Ch3 ARM 指令系统 课件
- 资源描述:
-
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
展开阅读全文