1 / 38

ARM 指令系统

ARM 指令系统. 数据传输指令. Mov 传送指令. Mov 指令将 <shift_operand> 表示的数据传送到目标寄存器 <RD> 中,并根据操作的结果更新 CPSR 中相应的条件标志位. Mov 传送指令. Mov 指令可以完成以下功能: 将数据从一个寄存器传送到另一个寄存器 将一个常数传送到一个寄存器中 当 PC 作为目标寄存器时可实现程序跳转,这种跳转可实现子程序调用以及从子程序中返回。

melina
Download Presentation

ARM 指令系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ARM指令系统

  2. 数据传输指令

  3. Mov传送指令 • Mov指令将<shift_operand>表示的数据传送到目标寄存器<RD>中,并根据操作的结果更新CPSR中相应的条件标志位

  4. Mov传送指令 • Mov指令可以完成以下功能: • 将数据从一个寄存器传送到另一个寄存器 • 将一个常数传送到一个寄存器中 • 当PC作为目标寄存器时可实现程序跳转,这种跳转可实现子程序调用以及从子程序中返回。 • 当PC作为目标寄存器且指令中S位被设置时,指令在执行跳转的同时,将当前处理器模式的SPSR寄存器内容复制到CPSR中,这样,指令movs pc,lr可实现从某些异常中断中返回。

  5. Mvn传送指令 • Mvn指令将<shift_operand>表示的数据的反码传送到目标寄存器<RD>中,并根据操作的结果更新CPSR中相应的条件标志位 • 指令的用途 • 向寄存器中传送一个负数 • 生成位掩码 • 求一个数的反码

  6. Add加法指令 • Add指令将<shift_operand>表示的数据与寄存器<RD>中的值相加,并把结果保存在<RD>中,同时根据操作的结果更新CPSR中相应的条件标志位 • 用途:实现两个操作数相加 • 例: • add rx, rx, #1 • Add rd, rx, rx, lsl #n

  7. Adc带位加法指令 • Adc指令将<shift_operand>表示的数据与寄存器<RD>中的值相加,再加上CPSR中的C条件标志位的值,并把结果保存在<RD>中,同时根据操作的结果更新CPSR中相应的条件标志位

  8. Adc带位加法指令 • 指令的用途 Adc指令和add指令联合使用可实现两个64位操作数的相加。 例:设寄存器r0和r1中放置一个64位源操作数,其中r0中放置低32位数值;r2和r3中放置另一个64位源操作数,其中r2中放置低32位数值,则俩个64位数的加法操作为: Adds r4, r0, r2 Adc r5, r1, r3

  9. Sub减法指令 • Su b指令从寄存器<RN>中减去<shift_operand>表示的数据,并把结果保存在<RD>中,同时根据操作的结果更新CPSR中相应的条件标志位 • 指令用途:实现两个操作数相减 Sub rx, rx, #1

  10. Sbc带位减法指令 • Sub指令从寄存器<RN>中减去<shift_operand>表示的数据,再减去CPSR中的C条件标志位的反码,并把结果保存在<RD>中,同时根据操作的结果更新CPSR中相应的条件标志位

  11. Sbc带位减法指令 • 指令的用途 sbc指令和subs指令联合使用可实现两个64位操作数的相减。 例:设寄存器r0和r1中放置一个64位源操作数,其中r0中放置低32位数值;r2和r3中放置另一个64位源操作数,其中r2中放置低32位数值,则俩个64位数的减法操作为: subs r4, r0, r2 sbc r5, r1, r3

  12. Rsb 逆向减法指令 • rsb指令从<shift_operand>表示的数据中减去寄存器<RD>的值,并把结果保存在<RD>中,同时根据操作的结果更新CPSR中相应的条件标志位 例: Rsb rd, rx, #0 Rsb rd, rx, rx, lsl #n

  13. Rsc 带位逆向减法指令 • rsc指令从<shift_operand>表示的数据中减去寄存器<RD>的值,再减去CPSR中C条件标志位的反码, 并把结果保存在<RD>中,同时根据操作的结果更新CPSR中相应的条件标志位

  14. Rsc 带位逆向减法指令 例: 求一个64位数的负数。64位数放在寄存器r0,r1中,其负数放在r2,r3中,其中r0,r2中放低32位值 Rsbs r2, r0, #0 Rsc r3, r1,#0

  15. 逻辑指令

  16. And 逻辑与操作指令 • And 指令将<shift_operand>表示的数据与寄存器<RD>的值按位作逻辑与操作,并把结果保存在<RD>中,同时根据操作的结果更新CPSR中相应的条件标志位

  17. And 逻辑与操作指令 • 指令用途 And 指令可用于提取寄存器中某些位的值。具体做法是设置一个掩码值,将该值中对应于寄存器中欲提取的位设1,其他位设为0。将寄存器的值与该掩码值作与操作。

  18. Orr逻辑或操作指令 • orr 指令将<shift_operand>表示的数据与寄存器<RD>的值按位作逻辑或操作,并把结果保存在<RD>中,同时根据操作的结果更新CPSR中相应的条件标志位

  19. Orr逻辑或操作指令 • 指令用途 orr指令可用于将寄存器中某些位的值置1。具体做法是设置一个掩码值,将该值中对应于寄存器中欲置位的位设1,其他位设为0。将寄存器的值与该掩码值作或操作。

  20. eor逻辑异或操作指令 • eor指令将<shift_operand>表示的数据与寄存器<RD>的值按位作逻辑异或操作,并把结果保存在<RD>中,同时根据操作的结果更新CPSR中相应的条件标志位

  21. eor逻辑异或操作指令 • 用途: Eor指令可用于将寄存器中某些位的值取反。将某一位与0做异或操作,该位值不变;与1做异或操作,该位置将被求反。

  22. Bic 位清除指令 • Bic指令将<shift_operand>表示的数据与寄存器<RD>的值的反码按位作逻辑与操作,并把结果保存在<RD>中,同时根据操作的结果更新CPSR中相应的条件标志位 • 可用于将寄存器中某些位的值设置为0。

  23. 比较指令

  24. Cmp比较指令 • Cmp指令从寄存器<RN>中减去<shifter_operand>表示的数值,根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执行。 • Cmp指令与subs指令的区别在于cmp指令不保存操作结果。

  25. Cmn基于相反数的比较指令 • Tst 位测试指令 • Teq相等测试指令

  26. 乘法指令

  27. Mul 32位乘法指令 • Mul实现两个32位数的乘积,并将结果存放到一个32位的寄存器中,同时根据运算结果设置CPSR中相应的条件标志位 • 由于两个32位的数相乘结果为64位,mul指令仅仅保存了结果的低32位,所以对于带符号的和无符号的操作数来说mul指令执行的结果相同。 • 寄存器为r15时,指令执行的结果不可预测

  28. Mla • Mla实现两个32位数的乘积,再将乘积加上第3个操作数,并将结果存放到一个32位的寄存器中,同时根据运算结果设置CPSR中相应的条件标志位 • Mla r0, r1, r2, r3

  29. Smull 64有符号数乘法指令 • smull实现两个32位有符号数的乘积,乘积结果的高32位存放到一个32位的寄存器<RDHI>中,低32位存放到另一个32位的寄存器<RDLO>中,同时根据运算结果设置CPSR中相应的条件标志位 • Smull r1, r2, r3, r4 r1=(r3*r4)低32位 r2=(r3*r4)高32位

  30. 程序状态访问指令

  31. 程序状态访问指令 • 用于在状态寄存器和通用寄存器之间传送数据 • 通常修改状态寄存器是通过“读取—修改—写回”

More Related