嵌入式系统结构.ppt
《嵌入式系统结构.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统结构.ppt(200页珍藏版)》请在三一文库上搜索。
1、嵌入式系统结构,主讲教师: 邱铁 E_mail: Tel: 87571521 参考教材: 1.嵌入式系统开发与应用,田泽北京航空航天大学出版社 2.嵌入式系系结构与编程,杜春蕾. 清华大学出版社,第四讲 ARM指令集,本讲将详细介绍各ARM指令,并给出一些典型的ARM功能代码段。,本讲主要内容有,4.1ARM指令集,4.2一些基本的ARM指令功能段,4.3Thumb指令简介,4.1 ARM指令集,4.1.1 跳转指令 4.1.2 数据处理指令 4.1.3 乘法指令 4.1.4 杂类的算术指令 4.1.5 状态寄存器访问指令 4.1.6 Load/Store内存访问指令 4.1.7 批量Loa
2、d/Store内存访问指令 4.1.8 信号量操作指令 4.1.9 异常中断产生指令 4.1.10ARM协处理器指令,4.1.1跳转指令,在ARM中有两种方式可以实现程序的跳转:一种是跳转指令;另一种是直接向寄存器(R15)中写入目标地址值。 通过直接向PC寄存器中写入目标地址值可以实现在4GB的地址空间中任意跳转,这种跳转指令又成为长跳转。如果在长跳转指令之前使用MOV LR,PC等指令,可以保存将来返回的地址值,就实现了在4GB的地址空间中的子程序调用。,跳转指令,ARM的跳转指令可以从当前指令向前或向后的32MB的地址空间跳转。这类跳转指令有以下4种: B 跳转指令 BL 带返回的跳转指
3、令 BLX 带返回和状态切换的跳转指令 BX 带状态切换的跳转指令,1. B(跳转指令)及BL(带返回的跳转指令),B指令和BL指令均可以跳转到指令中的目标地址,这两个指令和目标地址处的指令都属于ARM指令集。二者也都可以根据CPSR中条件标志位的值与指令中的执行条件决定是否执行跳转操作。 二者的不同之处在于,B指令仅仅执行跳转操作;BL指令同时还将PC寄存器的值保存到LR寄存器中。,B(跳转指令)及BL(带返回的跳转指令),指令的编码格式: 指令的语法格式: BL ,B(跳转指令)及BL(带返回的跳转指令),其中: L决定是否保存返回地址。当有L时,当PC寄存器的值将保存到LR寄存器中;当无
4、L时,指令仅执行跳转,当前PC寄存器的值将不会保存到LR寄存器中。 为指令执行的条件码。 为指令跳转的目标地址。这个目标地址的计算方法是:将指令中的24位带符号的补码立即数扩展为32位;将此32位数左移两位将得到的值增加到PC寄存器中,即得到跳转的目标地址。跳转的范围大致为-32MB+32MB。,跳转指令,指令的使用 BL指令用于实现子程序调用。子程序的返回可以通过将LR寄存器中的值复制到PC寄存器中来实现。通常有3种方法实现这种复制: BX R14 MOV PC, R14 当子程序入口中使用了 STMFD R13!,R14时, 可以用指令LDMFD R13!,PC返回,B(跳转指令)及BL(
5、带返回的跳转指令),示例解析,2. BLX(1),第一种格式的BLX指令记作BLX(1)。 BLX(1)指令从ARM指令集跳转到指令中指定的目标地址,并将程序状态切换为Thumb状态,该指令同时将PC寄存器中的内容复制到LR寄存器中。 本指令属于无条件执行的指令(即条件码为AL),BLX(1),指令的编码格式: 指令的语法格式: BLX 其中:的用法与B及BL指令中的用法相同。 位加到目标地址的第一位(为1时半字操作),BLX(1),指令的使用: 当子程序为Thumb指令集,而调用者为ARM指令集时,可以通过BLX指令实现子程序调用和程序状态的切换。 子程序的返回可以通过将LR寄存器(R14)
6、的值复制到PC寄存器中来实现。 BX R14 当子程序入口中使用了PUSH ,R14时,可以用指令POP,PC,3. BLX(2),第一种格式的BLX指令记作BLX(2)。 BLX(2)指令从ARM指令集跳转到指令中指定的目标地址,目标地址的指令可以是ARM指令,也可以是Thumb指令。目标地址放在指令中的寄存器中,该地址的bit0值为0,目标地址出的指令类型由CPSR中的T位决定。该指令同时将PC寄存器的内容复制到LR寄存器中。,BLX(2),指令的编码格式: 指令的语法格式: BLX ,BLX(2),其中: 为指令执行的条件码。当忽略时指令为无条件执行。 该寄存器中为跳转的目标地址。当寄存
7、器的bit0值为0时,目标地址处的指令为ARM指令;当寄存器的bit0值为1时,目标地址处的指令为Thumb指令。当寄存器为R15时,会产生不可预知的结果,BLX(2),指令的使用: 当Rm1:0=0b10时,由于ARM指令是字对齐的,这时会产生不可预料的结果,4. BX指令,BX指令跳转到指令中指定的目标地址,目标地址处的指令可以是ARM指令,也可以是Thumb指令。目标地址值为指令的值和0xFFFFFFFE做与操作的结果,目标地址处的指令类型由寄存器的bit0决定。 指令的编码格式:,BX指令,指令的语法格式: BX 其中: 为指令执行的条件码。当忽略时指令为无条件执行。 该寄存器中为跳转
8、的目标地址。当寄存器的bit0值为0时,目标地址处的指令为ARM指令;当寄存器的bit0值为1时,目标地址处的指令为Thumb指令。,BX指令,指令的使用: 当Rm1:0=0b10时,由于ARM指令是字对齐的,这时会产生不可预料的结果。 当为PC寄存器时,即指令BX PC将程序跳转到当前指令下面第2条指令处执行,在这种情况下推荐使用MOV PC,PC及指令ADD PC , PC,#0来实现这种功能。,4.1.2数据处理指令,数据处理指令大致分为3类:数据传送指令、算术逻辑运算指令、比较指令。 数据传送指令用于向寄存器中传入一个常数。该指令包括一个目标寄存器和一个操作数。 算术逻辑运算指令通常包
9、括一个目标寄存器和两个源操作数。算术逻辑运算指令将运算结果存入目标寄存器,同时更新CPSR中相应的条件标志位。 比较指令不保存运算结果,只更新CPSR中相应的条件标志位。,数据处理指令,数据处理指令包括: MOV 数据传送指令 MVN 数据反求传送指令 CMP 比较指令 CMN 基于相反数的比较指令 TST 位测试指令 TEQ 相等测试指令 ADD 加法指令,SUB 减法指令 RSB 逆向减法指令 ADC 带位加法指令 SBC 带位减法指令 RSC 带位逆向减法指令 AND 逻辑与操作指令 BIC 为清除指令 EOR 逻辑异或操作指令 ORR 逻辑或操作指令,1. MOV传送指令,MOV指令将
10、表示的数据传送到目标寄存器中,并根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式: 指令的语法格式: MOV S ,MOV传送指令,其中: 为指令执行的条件码。当忽略时指令为无条件执行。 S决定指令的操作是否影响CPSR中条件标志位的值。当没有S时指令不更新CPSR中条件标志位的值;当有S时指令更新CPSR中条件标志位的值。当有S时有两种情况:若指令中的目标寄存器为R15,则当前处理器模式对应的SPSR的值被复制到CPSR寄存器中,对于用户模式和系统模式,指令执行的结果将不可预料;,MOV传送指令,若指令中的目标寄存器不为R15,指令根据传送的数值设置CPSR中的N位和Z位,并根
11、据移位器的进位值carryout设置CPSR的C位, CPSR中的其他位不受影响 寄存器为目标寄存器。 为向目标寄存器传送的数据。,MOV传送指令,指令的使用: 将数据从一个寄存器传送到另一个寄存中 将一个常数传送到一个寄存器中。 实现单纯的移位操作。 当PC寄存器作为目标寄存器时可以实现程序跳转。 当PC寄存器作为目标寄存器且指令中S位被设置时,指令在执行跳转操作的同时,将当前处理器模式的SPSR寄存器内容复制到CPSR中。,2. MVN传送指令,MVN指令将表示的数据的反码传送到目标寄存器中,并根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式: 指令的语法格式: MVN S
12、, 其中,各参数的用法与MOV传送指令相同。,MVN传送指令,指令的使用: 向寄存器中传送一个负数。 求一个数的反码。 示例解析,3. ADD加法指令,ADD指令将表示的数据与寄存器中的值相加,并把结果传送到目标寄存器中,并根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式: 指令的语法格式: ADD S ,ADD加法指令,其中: 、S和Rd的用法与MOV传送指令相同。 寄存器为第1个源操作数所在的寄存器。 为第2个操作数。,ADD加法指令,指令的使用: 实现两个操作数相加 示例解析,4. ADC带位加法指令,ADC指令将表示的数据与寄存器中的值相加,再加上CPSR中的C条件标志位
13、的值,并把结果传送到目标寄存器中,并根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式: 指令的语法格式: ADC S , 其中,各参数用法与ADD传送指令相同。,ADC带位加法指令,指令的使用 ADC 指令和ADD指令联合使用可以实现两个64位的操作数相加。如果寄存器R0和R1中放置一个64位的源操作数,其中R0中放置低32位数值;寄存器R2和R3中放置另一个64位的源操作数,其中R2中放置低32位数值。 示例解析,5. SUB减法指令,SUB指令从寄存器中减去表示的数值,并把结果传送到目标寄存器中,并根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式: 指令的语法格
14、式: SUB S , 其中,各参数用法与ADD传送指令相同。,SUB减法指令,指令的使用: SUB指令实现两个操作数相减。 示例解析,6. SBC带位减法指令,SBC指令从寄存器中减去表示的数值,再减去寄存器CPSR中C条件标志位的反码,并把结果传送到目标寄存器中,并根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式: 指令的语法格式: SBC S , 其中,各参数用法与ADD传送指令相同。,SBC带位减法指令,指令的使用: SBC指令和SUBS指令联合使用可以实现两个64位的操作数相减。如果寄存器R0和R1中放置一个64位的源操作数,其中R0中放置低32位数值;寄存器R2和R3中
15、放置另一个64位的源操作数,其中R2中放置低32位数值。 示例解析,7. RSB逆向减法指令,RSB指令从中表示的数值中减去寄存器 值,并把结果传送到目标寄存器中,并根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式:,RSB逆向减法指令,指令的语法格式: RSB S , 其中: 寄存器为第2个操作数所在的寄存器 为第1个操作数。 其他参数用法与ADD传送指令相同。,RSB逆向减法指令,指令的使用: RSB指令实现两个操作数相减。 示例解析,8. RSC带位逆向减法指令,RSC指令从中表示的数值中减去寄存器 值,再减去寄存器CPSR中 C条件标志位的反码,并把结果传送到目标寄存器中
16、,并根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式: 指令的语法格式: RSC S , 其中,各参数用法与RSB逆向减法指令相同。,RSC带位逆向减法指令,指令的使用: RSC指令和RSBC指令联合使用可以求一个64位数值的负数。 如果寄存器R0和R1中放置一个64位数,其中R0中放置低32位数值;寄存器R2和R3中放置其负数,其中R2中放置低32位数值。 示例解析,9. AND逻辑与操作指令,AND指令将表示的数值与寄存器 的值按位做逻辑与操作,并把结果保存到目标寄存器中,并根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式: 指令的语法格式: AND S ,AN
17、D逻辑与操作指令,其中: 寄存器为第1个操作数所在的寄存器 为第2个操作数。 其他参数用法与MOV传送指令相同。,AND逻辑与操作指令,指令的使用: AND指令可用于提取寄存器中某些位的值。具体作法是设置一个掩码值,将该值中对应于寄存器中欲提取的位设为1,其他的位设置成0。将寄存器的值与该掩码值作与操作即可得到想提取的位的值。,10. ORR逻辑或操作指令,ORR指令将表示的数值与寄存器 的值按位做逻辑或操作,并把结果保存到目标寄存器中,并根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式: 指令的语法格式: ORR S , 其中,各参数用法与AND指令相同。,ORR逻辑或操作指令
18、,指令的使用 ORR指令可用于将寄存器中某些位的值设置成1。具体作法是设置一个掩码值,将该值中对应于寄存器中欲提取的位设为0,其他的位设置成1。将寄存器的值与该掩码值做逻辑或操作即可得到想提取的位的值。 示例解析,11. EOR逻辑异或操作指令,EOR指令将表示的数值与寄存器 的值按位做逻辑异或操作,并把结果保存到目标寄存器中,并根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式: 指令的语法格式: EOR S , 其中,各参数用法与AND指令相同。,EOR逻辑异或操作指令,指令的使用: EOR指令可用于将寄存器中某些位的值取反。将某一位与0做逻辑异或操作,该位值不变:将某一位与1
19、做逻辑异或操作,该位置将被求反。,12. BIC位清除指令,BIC指令将 寄存器的值与表示的数值的反码按位做逻辑与操作,并把结果保存到目标寄存器中,并根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式: 指令的语法格式: BIC S , 其中,各参数用法与AND指令相同。,BIC位清除指令,指令的使用 BIC指令可用于将寄存器中某些位的值设置成0。将某一位与1做BIC操作,该位值被设置成0;将某一位与0做BIC操作,该位值不变。,13. CMP比较指令,CMP指令从寄存器 中减去表示的数值,根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位
20、来判断是否执行。 指令的编码格式: 指令的语法格式: CMP ,CMP比较指令,其中: 寄存器为第1个操作数所在的寄存器 为第2个操作数。 为指令执行的条件码。当忽略时指令为无条件执行。 指令的使用: CMP指令与SUBS指令的区别在于CMP指令不保存操作结果。,14. CMN求和比较指令,CMN指令将寄存器 中的值加上表示的数值,根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执行。 指令的编码格式: 指令的语法格式: CMN , 其中,各参数用法与CMP指令相同,CMN求和比较指令,指令的使用 CMN指令将寄存器 中的值加上表示的数值,
21、根据加法操作的结果设置CPSR中相应的条件标志位。,15. TST位测试指令,TST指令将表示的数值与寄存器 中的值做逻辑与操作,根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式: 指令的语法格式: TST , 其中,各参数用法与CMP比较指令相同,TST位测试指令,指令的使用 TST指令通常用于测试寄存器中某个(些)位是1还是0。,16. TEQ相等测试指令,TEQ指令将表示的数值与寄存器 中的值做逻辑异或操作,根据操作的结果更新CPSR中相应的条件标志位。 指令的编码格式: 指令的语法格式: TEQ , 其中,各参数用法与CMP比较指令相同,TEQ相等测试指令,指令的使用 T
22、EQ指令通常用于比较两个数是否相等,这种比较操作通常不影响CPSR寄存器的V位和C位。 TEQ指令也可用于比较两个操作数符号是否相同,该指令执行后,CPSR寄存器中的N位为两个操作数符号位作异或操作的结果。,4.1.3乘法指令,ARM有两类乘法指令: 一类为32位的乘法指令,即乘法操作的结果为32位; 另一类为64位的乘法指令,即乘法操作的结果为64位。 MUL 32位乘法指令。 MLA 32位带加数的乘法指令。 SMULL 64位有符号数乘法指令。 SMLAL 64位带加数的有符号数乘法指令 UMULL 64位无符号数乘法指令。 UMLAL 64位带加数的无符号数乘法指令,1. MUL 乘(
23、32位结果),MUL指令实现两个32位的数(可以为无符号数,也可为有符号数)的乘积并将结果存放到一个32位的寄存器中,同时根据运算结果设置CPSR寄存器中相应的条件标志位。 指令的编码格式: 指令的语法格式: MUL S , , 功能:Rd (Rm*Rs)31:0,MUL 乘(32位结果),其中: 为指令执行的条件码。当忽略时指令为无条件执行。 S决定指令的操作是否影响CPSR中条件标志位N位和Z位的值。当没有S时指令不更新CPSR中条件标志位的值;当有S时指令更新CPSR中条件标志位的值。 寄存器为目标寄存器。 寄存器为第1个乘数所在的寄存器。 为第2个乘数所在的寄存器。,MUL 乘(32位
24、结果),指令的使用 由于两个32的数相乘结果为64位,而MUL指令仅仅保存了64位结果低32位,所以对于带符号的和无符号的操作数来说MUL指令执行的结果相同。 寄存器 为R15时,指令执行的结果不可预测。 示例解析,2. MLA 乘-累加(32位结果),MLA指令实现两个32位的数(可以为无符号数,也可为有符号数)的乘积,再将乘积加上第3个操作数,并将结果存放到一个32位的寄存器中,同时根据运算结果设置CPSR寄存器中相应的条件标志位。 指令的编码格式: 指令的语法格式: MLA S , , , 功能:Rd (Rm*Rs+Rn)31:0,MLA乘-累加(32位结果),其中: 为指令执行的条件码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 结构
链接地址:https://www.31doc.com/p-2603717.html