ARM处理器指令集(精简指令集)

 这些指令是怎么编码、怎么变成二进制数据存储在存储器中的?

        ARM920T处理器大部分指令都可以根据上条指令执行结果的状态,决定是否执行当前指令。如果条件满足就执行当前指令,否则不执行当前指令,相当于执行了一条空指令。

 相关条件码信息:

注:0b表示后面的数字是二进制数。

         很多指令不会主动影响CPSR寄存器中的标志位。有时可以在指令助记符后面加入“s”符号,表示要求这条指令的执行结果将影响CPSR寄存器中的标志位。

ARM920T处理器的数据处理指令

  • mov指令是将一个常数或者寄存器中的数据传送到目标寄存器中。
  • mvn指令是将一个常数或者寄存器中的数据按位取反后传送到目标寄存器中。、
  • add指令完成第一个源寄存器和第二个常数或者第二个源寄存器相加,并把结果放进目标寄存器中,也可以影响CPSR中的标志位。
  • adc指令完成第一个源寄存器和第二个常数或者第二个源寄存器的相加,再加上CPSR中的C标志位,并把结果放进目标寄存器中。结果也可以影响CPSR中的标志位。
  • sub指令完成第一个源寄存器和第二个常数或者第二个源寄存器相减,并把结果放进目标寄存器中,也可以影响CPSR中的标志位。需要注意的是减法若发生借位,CPSR中的C位会设置成0。
  • sbc指令完成第一个源寄存器和第二个常数或者第二个源寄存器相减,再减去CPSR中的C标志位的反码,并把结果放进目标寄存器中。结果也可以影响CPSR中的标志位。
  • rsb指令完成第二个常数或者第二个源寄存器和第一个源寄存器相减,并把结果放进目标寄存器中。正因为这样,它也称为“逆向减法指令”,也可以影响CPSR中的标志位。需要注意的是减法若发生借位,CPSR中的C位会设置成0。
  • rsc指令完成第二个常数或者第二个源寄存器和第一个源寄存器相减,再减去CPSR中的C标志位的反码,并把结果放进目标寄存器中。正因为这样,它也称为带借位的逆向减法指令,也可以影响CPSR中的标志位。
  • mul指令实现两个32位数的乘法运算,把结果放在目标寄存器中。这两个数可以是无符号整数也可以是有符号整数,并且这两个数要放在两个寄存器中。当然结果可能影响CPSR中的标志位。由于两个32位数的乘积是64位数,但是mul指令仅仅保存了这个乘积的低32位。
  • mla指令实现两个32位数的乘法运算,再加上第三个32位数,把结果放在目标寄存器中。第一、二个数可以是无符号整数也可以是有符号整数,这三个数据必须放在3个寄存器中。当然结果可能影响CPSR中的标志位。同样,mla指令也是只保存前两个数据乘积的低32位。
  • and指令完成第一个源寄存器与第二个常数或者第二个源寄存器,按位进行逻辑与操作,把结果放进目标寄存器中,同时根据结果可能影响CPSR中的标志位。逻辑与操作是参加与运算的两个数据都为“1”时,结果才为“1”。例如,0xF与0xF的结果还是为0xF;0xF与0的结果为0;0与0xF的结果也为0;0x1与上0xF的结果为0x1。
  • orr指令完成第一个源寄存器与第二个常数或者第二个源寄存器的按位逻辑或操作,把结果放进目标寄存器中,结果可能影响CPSR中的标志位。逻辑或操作是参加或运算的两个数据有一个为“1”时,结果就为“1”。例如,0xF或0xF的结果还是为0xF;0xF或0的结果为0xF;0或0xF的结果为0xF;0x1或0xF的结果为0xF。
  • bic指令完成第一个源寄存器与第二个常数或者第二个源寄存器的反码操作,把结果放进目标寄存器中,同时结果可能影响CPSR中的标志位。这条指令经常用于数据位清零操作。
  • eor指令完成第一个源寄存器与第二个常数或者第二个源寄存器的按位逻辑异或操作,把结果放进目标寄存器中,同时结果可能影响CPSR中的标志位。逻辑异或操作是参加异或运算的两个数据位相同时,结果就为“0”,不同时为“1”。例如,0xF异或0xF的结果为0;0xF异或0的结果为0xF;0异或0xF的结果为0xF;0x0异或0x0的结果为0x0。
  • cmp指令用第一个源寄存器减去第二个常数或者第二个源寄存器,总是根据结果影响CPSR中的标志位,但是不回写结果。
  • cmn指令用第一个源寄存器加上第二个常数或者第二个源寄存器,总是根据结果影响CPSR中的标志位,但是不回写结果。
  • tst指令完成第一个源寄存器与第二个常数或者第二个源寄存器按位逻辑与操作。总是根据结果影响CPSR中的标志位,C位、V位通常是不受影响的。同样也不回写结果。
  • teq指令完成第一个源寄存器与第二个常数或者第二个源寄存器按位逻辑异或操作。总是根据结果影响CPSR中的标志位,C位、V位通常是不受影响的。同样也不回写结果。
  • swp指令完成从一个内存字单元中读取一个数据到目标寄存器,这个内存字的地址放在第二个源寄存器中,以此同时把第一个源寄存器中的内容写入这个内存字单元中。因此这条指令完成内存字和寄存器之间数据的原子交换。还有一条指令,其功能、用法都和swp指令差不多的指令——swpb指令。它唯一和swp指令不同的是:它只是交换一个内存字节单元的数据。执行后,swpb自动把目标寄存器的高24位清零,只保留低8位,即一个字节。

摘自《深度探索嵌入式操作系统:从零开始设计、架构和开发 (Linux/Unix技术丛书)》

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
原作者:宛城布衣。 本文件已移除PDF签名,如内容有误,欢迎大家指正。 目录 前言 i 目录 I ARM7TDMI(-S)指令集及汇编1 ARM 处理器寻址方式2 寄存器寻址2 立即寻址2 寄存器偏移寻址2 寄存器间接寻址3 基址寻址3 多寄存器寻址4 堆栈寻址4 块拷贝寻址5 相对寻址5 指令集介绍7 ARM 指令集7 指令格式7 第 2 个操作数7 #immed_8r 7 Rm8 Rm,shift8 条件码9 ARM 存储器访问指令 11 LDR 和 STR 11 LDM 和 STM14 SWP 17 ARM 数据处理指令19 数据传送指令20 MOV 20 MVN 20 算术逻辑运算指令20 ADD 20 SUB21 RSB 21 ADC 21 SBC 21 RSC 22 AND 22 ORR22 EOR22 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII BIC 23 第 I 页常用 ARM 指令集及汇编 Ver:1010 比较指令23 CMP 23 CMN23 TST24 TEQ24 乘法指令25 MUL25 MLA25 UMULL25 UMLAL26 SMULL 26 SMLAL 26 ARM 跳转指令27 B27 BL27 BX 27 ARM处理器指令28 CDP28 LDC29 STC 29 MCR30 MRC30 ARM 杂项指令31 SWI 31 MRS 32 MSR 33 ARM 伪指令34 ADR 35 ADRL35 LDR36 NOP37 Thumb 指令集39 Thumb 指令集ARM 指令集的区别 39 Thumb 存储器访问指令 40 LDR 和 STR 41 PUSH 和 POP 43 LDMIA 和 STMIA 43 Thumb 数据处理指令 45 数据传送指令46 MOV 46 MVN 46 NEG47 算术逻辑运算指令47 ADD 47 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 第 II 页常用 ARM 指令集及汇编 Ver:1010 SUB48 ADC 49 SBC 49 MUL50 AND 50 ORR50 EOR51 BIC 51 ASR51 LSL52 LSR 52 ROR53 比较指令53 CMP 53 CMN54 TST54 Thumb 跳转指令 55 B 55 BL55 BX 55 Thumb 杂项指令 56 SWI 56 Thumb 伪指令 57 ADR 57 LDR57 NOP58 伪指令59 符号定义伪指令59 GBLA、GBLL、GBLS 59 LCLA、LCLL、LCLS60 SETA、SETL、SETS 61 RLIST61 CN 62 CP62 DN、SN62 FN63 数据定义伪指令63 LTORG64 MAP64 FIELD 65 SPACE66 DCB 66 DCD 和 DCDU67 DCDO 67 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 第 III 页常用 ARM 指令集及汇编 Ver:1010 DCFD 和 DCFDU68 DCFS 和 DCFSU68 DCI69 DCQ 和 DCQU69 DCW 和 DCWU 70 报告伪指令70 ASSERT 70 INFO 71 OPT 71 TTL 和 SUBT 72 汇编控制伪指令73 IF、ELSE 和 ENDIF73 MACRO 和 MEND 74 WHIL 和 WEND 75 杂项伪指令76 ALIGN 77 AREA78 CODE16 和 CODE32 79 END 80 ENTRY80 EQU 81 EXPORT 和 GLOBAL 81 IMPORT 和 EXTERN 82 GET 和 INCLUDE 83 INCBIN83 KEEP83 NOFP 84 REQUIRE 84 PEQUIRE8 和 PRESERVE8 84 RN 84 ROUT85 ARM 伪指令86 ADR 86 ADRL86 LDR86

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

What’smean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值