嵌入式系统结构.ppt

上传人:本田雅阁 文档编号:3207184 上传时间:2019-07-31 格式:PPT 页数:200 大小:1.46MB
返回 下载 相关 举报
嵌入式系统结构.ppt_第1页
第1页 / 共200页
嵌入式系统结构.ppt_第2页
第2页 / 共200页
嵌入式系统结构.ppt_第3页
第3页 / 共200页
嵌入式系统结构.ppt_第4页
第4页 / 共200页
嵌入式系统结构.ppt_第5页
第5页 / 共200页
点击查看更多>>
资源描述

《嵌入式系统结构.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位结果),其中: 为指令执行的条件码

25、。当忽略时指令为无条件执行。 S决定指令的操作是否影响CPSR中条件标志位N位和Z位的值。当没有S时指令不更新CPSR中条件标志位的值;当有S时指令更新CPSR中条件标志位的值。 寄存器为目标寄存器。 寄存器为第1个乘数所在的寄存器。 为第2个乘数所在的寄存器。 为第3个操作数所在的寄存器,该操作数是一个加数,MLA乘-累加(32位结果),指令的使用 由于两个32的数相乘结果为64位,而MLA指令仅仅保存了64位结果低32位,所以对于带符号的和无符号的操作数来说MUL指令执行的果相同。 寄存器 为R15时,指令执行的结果不可预测。 示例解析,3. SMULL 有符号数长乘(64位),SMULL

26、指令实现两个32位有符号数的乘积,乘积结果的高32位存放到一个32位的寄存器的,乘积结果的低32位存放到另一个32位的寄存器的,同时根据运算结果设置CPSR寄存器中相应的条件标志位。 指令的编码格式:,SMULL 有符号数长乘(64位),指令的语法格式: SMULL S , , 功能:RdHi:RdLo Rm*Rs 其中: 寄存器存放乘积结果的高32位数据。 寄存器存放乘积结果的低32位数据。 其他参数用法参见MUL指令。,SMULL 有符号数长乘(64位),指令的使用: 寄存器 为R15时,指令执行的结果不可预测。 示例解析,4. SMLAL 有符号数长乘-累加(64位),SMLAL指令将两

27、个32位有符号数的64位乘积结果与 和 中的64位数相加,加法结果的高32位存放到一个32位的寄存器中,乘积结果的低32位存放到另一个32位的寄存器的,同时根据运算结果设置CPSR寄存器中相应的条件标志位。 指令的编码格式:,SMLAL 有符号数长乘-累加(64位),指令的语法格式: SMLAL S , , 功能:RdHi:RdLo Rm*Rs+RdHi:RdLo 其中: 寄存器在指令执行前存放64位加数的高32位,指令执行后存放结果的高32位数据。 寄存器在指令执行前存放64位加数的低32位,指令执行后存放结果的低32位数据。 其他参数用法参见MUL指令。,SMLAL 有符号数长乘-累加(6

28、4位),指令的使用: 寄存器 为R15时,指令执行的结果不可预测。 示例解析,5. UMULL 无符号数长乘(64位),UMULL指令实现两个32位有符号数的乘积,乘积结果的高32位存放到一个32位的寄存器的,乘积结果的低32位存放到另一个32位的寄存器的,同时根据运算结果设置CPSR寄存器中相应的条件标志位。 指令的编码格式: 指令的语法格式: UMULL S , , 功能:RdHi:RdLo Rm*Rs 其中,各参数用法参见SMULL指令。,UMULL 无符号数长乘(64位),指令的使用: 寄存器 为R15时,指令执行的结果不可预测。 示例解析,6. UMLAL 无符号数长乘累加(64位)

29、,UMLAL指令将两个32位无符号数的64位乘积结果与 和 中的64位无符号数相加,加法结果的高32位存放到一个32位的寄存器中,乘积结果的低32位存放到另一个32位的寄存器的,同时根据运算结果设置CPSR寄存器中相应的条件标志位。 指令的编码格式:,UMLAL 无符号数长乘累加(64位),指令的语法格式: UMLAL S , , 功能:RdHi:RdLo Rm*Rs+RdHi:RdLo 其中: 寄存器在指令执行前存放64位加数的高32位,指令执行后存放结果的高32位数据。 寄存器在指令执行前存放64位加数的低32位,指令执行后存放结果的低32位数据。 其他参数用法参见MUL指令。,UMLAL

30、 无符号数长乘累加(64位),指令的使用: 寄存器 为R15时,指令执行的结果不可预测。 示例解析,4.1.4Load/Store内存访问指令,Load指令用于从内存中读取数据放入寄存器中;Store指令用于将寄存器中的数据保存到内存。ARM有两大类的Load/Store指令:一类用于操作32位的字类型数据以及8位无符号的字节类型;另一类用于操作16位半字类型的数据以及8位的有符号字节类型的数据。,Load/Store内存访问指令,LDR 字数据读取指令 LDRB 字节数据读取指令 LDRBT 用户模式的字节数据读取指令 LDRH 半字数据读取指令 LDRSB 有符号的字节数据读取指令 LDR

31、SH 有符号的半字数据读取指令 LDRT 用户模式的字数据读取指令 STR 字数据写入指令 STRB 字节数据写入指令 STRBT 用户模式字节数据写入指令 STRH 半字数据写入指令 STRT 用户模式字节数据写入指令,1. LDR 字数据读取指令,LDR指令用于从内存中将一个32位的字数据读取到指令中的目标寄存器中。 对于little-endian内存模式,指令第一次想要读取的字节数据存放在目标寄存器的低8位;对于big-endian的内存模式,指令第一次想要读取的字节数据存放在目标寄存器的bits31:24,LDR 字数据读取指令,指令的编码格式: 指令的语法格式: LDR , I:0立

32、即数;1移位寄存器 P:前/后变址 U:加/减 ;W:回写 L:读取/存储,LDR 字数据读取指令,其中: 为指令执行的条件码。当忽略时指令为无条件执行。 寄存器为目标寄存器。 为指令的寻址方式。,LDR 字数据读取指令,指令的使用 用于从内存中读取32位字数据到通用寄存器中,然后可以在该寄存器中对数据进行一定的操作。 当PC作为指令中的目标寄存器时,指令可以实现程序跳转的功能。 示例解析,2.LDRB 字节数据读取指令,LDRB指令用于从内存中将一个8位的字节数据读取到指令中的目标寄存器中。并将寄存器的高24位清零。 指令的编码格式: 指令的语法格式: LDRB , 各参数用法参见LDR指令

33、。,LDRB 字节数据读取指令,指令的使用 用于从内存中读取8位字节数据到通用寄存器中,然后可以在该寄存器中对数据进行一定的操作。 当PC作为指令中的目标寄存器时,指令可以实现程序跳转的功能。,3.LDRBT 用户模式的字节数据读取指令,LDRBT指令用于从内存中将一个8位的字节数据读取到指令中的目标寄存器中。并将寄存器的高24位清零。当在特权级的处理器模式下使用本指令时,内存系统将该操作当作一般用户模式下的内存访问操作 指令的编码格式: 指令的语法格式(只进行后变址回写寻址方式) LDRBT , 各参数用法参见LDR指令。,LDRBT 用户模式的字节数据读取指令,指令的使用 异常中断程序是在

34、特权级的处理器模式下执行的,这时如果需要按照用户模式的权限访问内存,可以使用LDRBT指令。,4.LDRH(无符号半字数据读取指令),LDRH指令用于从内存中将一个16位的无符号半字节数据读取到指令中的目标寄存器中。并将寄存器的高16位清零。如果指令中的内存地址不是半字对齐的,指令会产生不可预知的结果。 指令的编码格式: 指令的语法格式: LDRH , 各参数用法参见LDR指令。 22:0寄存器;1立即数,LDRH(半字数据读取指令),指令的使用: LDRH指令通常的用法有以下两种: 用于从内存中读取16位半字数据到通用寄存器中,然后可以在该寄存器中对数据进行一定的操作。 当PC作为指令中的目

35、标寄存器时,指令可以实现程序跳转的功能。 示例解析,5.LDRSB(有符号的字节数据读取指令),LDRSB指令用于从内存中将一个8位的字节数据读取到指令中的目标寄存器中。并将寄存器的高24位设置成该字节数据的符号位。 指令的编码格式: 指令的语法格式: LDRSB , 各参数用法参见LDR指令。,LDRSB(有符号的字节数据读取指令),指令的使用 用于从内存中读取8位有符号字节数据到通用寄存器中,然后可以在该寄存器中对数据进行一定的操作。 当PC作为指令中的目标寄存器时,指令可以实现程序跳转的功能。,6.LDRSH(有符号的半字数据读取指令),LDRSH指令用于从内存中将一个16位的半字数据读

36、取到指令中的目标寄存器中。并将寄存器的高16位设置成该半字数据的符号位的值。 指令的编码格式: 指令的语法格式: LDRSH , 其中,各参数用法参见LDR指令。,LDRSH(有符号的半字数据读取指令),指令的使用 用于从内存中读取16位有符号半字数据到通用寄存器中,然后可以在该寄存器中对数据进行一定的操作。 当PC作为指令中的目标寄存器时,指令可以实现程序跳转的功能。,7. LDRT(用户模式的字数据读取指令),LDRT指令用于从内存中将一个32位的字数据读取到指令中的目标寄存器中。对于little-endian内存模式,指令第一次想要读取的字节数据存放在目标寄存器的低8位;对于big-en

37、dian的内存模式,指令第一次想要读取的字节数据存放在目标寄存器的bits31:24。 当在特权极的处理器模式下使用本指令时,内存系统将该操作当作一般用户模式下的内存访问操作,LDRT(用户模式的字数据读取指令),指令的编码格式: 指令的语法格式: LDRT , 其中,各参数用法参见LDR指令。,LDRT(用户模式的字数据读取指令),指令的使用: 异常中断程序是在特权级的处理器模式下执行的,这时如果需要按照用户模式的权限访问内存,可以使用LDRT指令。,LDRSB/SH/T指令,示例解析,8. STR(字数据写入指令),STR指令用于将一个32位的字数据写入到指令中指定的内存单元。 指令的编码

38、格式: 指令的语法格式: STR , ,STR(字数据写入指令),其中: 为指令执行的条件码。当忽略时指令为无条件执行。 寄存器为目标寄存器。 为指令的寻址方式。 指令的使用 STR指令用于将一个32位的字数据写入到指令中指定的内存单元。,9. STRB(字节数据写入指令),STRB指令用于将一个8位的字节数据写入到指令中指定的内存单元,该字节数据为指令中存放源操作数的寄存器的低8位。 指令的编码格式: 指令的语法格式: STRB , 其中,各参数用法参见LDR指令。,STRB(字节数据写入指令),指令的使用: STRB指令用于将寄存器中低8位的字节数据写入到指令中指定的内存单元。,10. S

39、TRH(无符号半字数据写入指令),STRH指令用于将一个16位的半字数据写入到指令中指定的内存单元,该半字数据为指令中存放源操作数的寄存器的低16位。如果指令中的内存地址不是半字对齐的,指令会产生不可预知的结果。 指令的编码格式: 指令的语法格式: STRH , 其中,各参数用法参见LDR指令。,STRH(半字数据写入指令),指令的使用: STRH指令用于将寄存器中低16位的半字数据写入到指令中指定的内存单元。,11. STRT(用户模式的字数据写入指令),STRT指令用于将一个32位的字数据写入到指令中指定的内存单元。当在特权极的处理器模式下使用本指令时,内存系统将该操作当作一般用户模式下的

40、内存访问操作 指令的编码格式: 指令的语法格式: STRT , 其中,各参数用法参见LDR指令。,STRT(用户模式的字数据写入指令),指令的使用: 异常中断程序是在特权级的处理器模式下执行的,这时如果需要按照用户模式的权限访问内存,可以使用STRT指令。,12. STRBT(用户模式的字节数据写入指令),STRBT指令用于将一个8位的字节数据写入到指令中指定的内存单元。当在特权极的处理器模式下使用本指令时,内存系统将该操作当作一般用户模式下的内存访问操作 指令的编码格式: 指令的语法格式: STRBT , 其中,各参数用法参见LDR指令。,STRBT(用户模式的字节数据写入指令),指令的使用

41、: 异常中断程序是在特权级的处理器模式下执行的,这时如果需要按照用户模式的权限访问内存,可以使用STRBT指令。,STRData_mode 指令,示例解析,4.1.5批量Load/Store内存访问指令,批量Load内存访问指令可以一次从连续的内存单元中读取数据,传送到指令中的内存列表中的各个寄存器中。 批量Store内存访问指令可以将指令中寄存器列表中的各个寄存器值写入到内存中,内存的地址由指令中的寻址模式确定。 批量Load/Store内存访问指令的语法格式如下: LDM|STM Rn!,批量Load/Store内存访问指令,LDM(1) 批量内存字数据读取指令 LDM(2) 用户模式的批

42、量字数据读取指令 LDM(3) 带状态寄存器的批量内存字数据读取指令 STM(1) 批量内存字数据写入指令 STM(2) 用户模式的批量字数据写入指令,1.LDM(1)( 批量内存字数据读取指令),LDM(1)指令将数据从连续的内存单元中读取到指令中寄存器列表中的各寄存器中。它主要用于块数据的读取、数据栈操作以及从子程序中返回的操作。 当PC包含在LDM指令的寄存器列表中时,指令从内存中读取字数据将被当作目标地址值,指令执行后程序将从目标地址处开始执行,即实现了跳转操作。,LDM(1)( 批量内存字数据读取指令),指令的编码格式: 指令的语法格式: LDM Rn!,LDM(1)( 批量内存字数

43、据读取指令),其中: 为指令执行的条件码。当忽略时指令为无条件执行。 为指令寻址模式中的基址寄存器。存放地址块的最低地址值。 !设置指令中的W位,使指令执行后将操作数的内存地址写入基址寄存器中 为指令的寻址方式 为寄存器列表。其中寄存器和内存单元的对应规则满足这样的规则,即编号低的寄存器对应于内存中低地址单元,编号高的寄存器对应于内存中高地址单元,LDM(1)( 批量内存字数据读取指令),指令的使用: 如果指令中基址寄存器在寄存器列表中,而且指令中寻址方式指定指令执行后更新基址寄存器 的值,则指令执行会产生不可预知的结果。,2.LDM(2)(用户模式的 批量内存字数据读取指令),LDM(2)指

44、令将数据从连续的内存单元中读取到指令中寄存器列表中的各寄存器中。它主要用于块数据的读取、数据栈操作以及从子程序中返回的操作。 PC寄存器不能包含在LDM指令的寄存器列表中。 当在访问特权极的处理模式下使用本指令时,内存系统将该操作当作一般用户模式下的内存访问操作。,LDM(2),指令的编码格式: 指令的语法格式: LDM ,LDM(2),其中: 为寄存器列表,本列表不 能包含PC寄存器。其中寄存器和内存单元的对应规则满足这样的规则,即编号低的寄存器对应于内存中低地址单元,编号高的寄存器对应于内存中高地址单元。 中存放地址块的最低地址值。 在寄存器列表中不含PC寄存器,指示指令中所用的寄存器为用

45、户模式下的寄存器。 其他参数用法参见LDM(1)指令。,LDM(2),指令的使用: 本指令后面不能紧跟访问备份寄存器(banked_registers)的指令,最好跟一条NOP指令。 在用户模式和系统模式下使用本指令会产生不可预知的结果。 指令中的基址寄存器是指令执行时的当前处理器模式对应的物理寄存器,而不是用户模式对应的寄存器。 异常中断程序是在特权级的处理器模式下执行的,这是如果需要按照用户模式的权限访问内存,可以使用LDM(2)指令。,3.LDM(3)(带状态寄存器的批量内存字数据读取指令),LDM(3)指令将数据从连续的内存单元中读取到指令中寄存器列表中的各寄存器中。它同时将目前处理器

46、模式对应的SPSR寄存器内容复制到CPSR寄存器中。 当PC包含在LDM指令的寄存器列表中时,指令从内存中读取字数据将被当作目标地址值,指令执行后程序将从目标地址处开始执行,即实现了跳转操作。,LDM(3),指令的编码格式: 指令的语法格式: LDM !,LDM(3),其中: 为寄存器列表,本格式的指令中寄存器列表中必须包含PC寄存器。其中寄存器和内存单元的对应规则满足这样的规则,即编号低的寄存器对应于内存中低地址单元,编号高的寄存器对应于内存中高地址单元。 中存放地址块的最低地址值。 指示指令中执行时将目前处理器模式下的SPSR值复制到CPSR中。若指令的寄存器列表中不包含PC寄存器,则该指

47、令为一条LDM(2)格式的指令。 其他参数用法参见LDM(1)指令。,LDM(3),指令的使用: 如果指令中基址寄存器在寄存器列表中,而且指令中寻址方式指定指令执行后更新基址寄存器 的值,则指令执行会产生不可预知的结果。 本指令主要用于从异常中断模式下返回,如果在用户模式或系统模式下使用该指令,会产生不可预知的结果。,4. STM(1)(批量内存字数据写入指令),STM(1)指令将指令中寄存器列表中的各寄存器数值写入到连续的内存单元中。它主要用于块数据的写入、数据栈操作以及从进入子程序时保存相关的寄存器的操作。 指令的编码格式: 指令的语法格式: STM !,STM(1)(批量内存字数据写入指

48、令),其中: 为指令寻址模式中的基址寄存器。存放地址块的最低地址,如果R15被作为,指令会产生不可预知的结果。 其他参数用法参见LDM(1)指令,STM(1)(批量内存字数据写入指令),指令的使用: 如果指令中基址寄存器在寄存器列表中,而且指令中寻址方式指定指令执行后更新基址寄存器 的值,则当是中编号最小的寄存器时,指令将的初始值保存到内存中;否则,指令执行会产生不可预知的结果。,5. STM(2)(用户模式的批量内存字数据写入指令),STM(2)指令将指令中寄存器列表中的各寄存器数值写入到连续的内存单元中。它主要用于块数据的写入、数据栈操作以及从进入子程序时保存相关的寄存器的操作。 指令的编码格式: 指令的语法格式: STM ,STM(2)(用户模式的批量内存字数据写入指令),其中: 为指令寻址模式中的基址寄存器。存放地址块的最低地址,如果R15被作为,指令会产生不可预知的结果。 指示指

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1