ARM指令集

ARM指令集的全部指令及其功能的详细说明

数据处理指令
  • ADC:将两个操作数相加,并加上上一次运算的进位值,结果存储到目标寄存器中。 例如:ADC R1, R2, R3 将寄存器R2和R3的值相加,加上上一次运算的进位值,结果存储到寄存器R1。

  • ADD:将两个操作数相加,并将结果存储到目标寄存器中。 例如:ADD R1, R2, R3 将寄存器R2和R3的值相加,结果存储到寄存器R1。

  • ADR:将立即数的地址存储到目标寄存器中。 例如:ADR R1, label 将标签label所在的地址存储到寄存器R1中。

  • AND:对两个操作数进行逻辑与运算,并将结果存储到目标寄存器中。 例如:AND R1, R2, R3 对寄存器R2和R3的值进行逻辑与运算,结果存储到寄存器R1。

  • ASR:将一个操作数向右移动指定的位数,并将结果存储到目标寄存器中。 例如:ASR R1, R2, #4 将寄存器R2的值向右移动4位,结果存储到寄存器R1。

  • BIC:对两个操作数进行逻辑非运算,并将结果存储到目标寄存器中。 例如:BIC R1, R2, R3 对寄存器R2和R3的值进行逻辑非运算,结果存储到寄存器R1。

  • CMN:比较两个操作数是否相等,并设置标志位。 例如:CMN R1, R2 比较寄存器R1和R2的值是否相等。

  • CMP:比较两个操作数的大小,并设置标志位。 例如:CMP R1, R2 比较寄存器R1和R2的值的大小。

  • EOR:对两个操作数进行逻辑异或运算,并将结果存储到目标寄存器中。 例如:EOR R1, R2, R3 对寄存器R2和R3的值进行逻辑异或运算,结果存储到寄存器R1。

  • LSL:将一个操作数向左移动指定的位数,并将结果存储到目标寄存器中。 例如:LSL R1, R2, #4 将寄存器R2的值向左移动4位,结果存储到寄存器R1。

  • LSR:将一个操作数向右移动指定的位数,并将结果存储到目标寄存器中。 例如:LSR R1, R2, #4 将寄存器R2的值向右移动4位,结果存储到寄存器R1。

  • MOV:将一个操作数的值复制到目标寄存器中。 例如:MOV R1, R2 将寄存器R2的值复制到寄存器R1中。

  • MVN:对一个操作数进行逻辑非运算,并将结果存储到目标寄存器中。 例如:MVN R1, R2 对寄存器R2的值进行逻辑非运算,结果存储到寄存器R1。

  • ORR:对两个操作数进行逻辑或运算,并将结果存储到目标寄存器中。 例如:ORR R1, R2, R3 对寄存器R2和R3的值进行逻辑或运算,结果存储到寄存器R1。

  • ROR:将一个操作数向右旋转指定的位数,并将结果存储到目标寄存器中。 例如:ROR R1, R2, #4 将寄存器R2的值向右旋转4位,结果存储到寄存器R1。

  • SBC:从第一个操作数中减去第二个操作数,并减去上一次运算的进位值,结果存储到目标寄存器中。 例如:SBC R1, R2, R3 从寄存器R2中减去寄存器R3的值,减去上一次运算的进位值,结果存储到寄存器R1。

  • SUB:从第一个操作数中减去第二个操作数,并将结果存储到目标寄存器中。 例如:SUB R1, R2, R3 从寄存器R2中减去寄存器R3的值,结果存储到寄存器R1。

分支和跳转指令
  • B:无条件分支指令,用于无条件地跳转到指定的地址。 例如:B label 将程序跳转到标签label所在的地址。

  • BL:带链接的分支指令,用于跳转到指定的地址,并将返回地址存储到链接寄存器中。 例如:BL subroutine 将程序跳转到子程序subroutine所在的地址,并将返回地址存储到链接寄存器中。

  • BX:分支和交换指令,用于根据寄存器的值进行分支。 例如:BX R1 根据寄存器R1的值进行分支。

  • BLX:带链接的分支和交换指令,用于跳转到指定的地址,并将返回地址存储到链接寄存器中,同时可以切换到ARM或Thumb指令集。 例如:BLX R1 将程序跳转到寄存器R1指定的地址,并将返回地址存储到链接寄存器中。

  • CBZ:当指定的寄存器中的值为零时,跳转到指定的地址。 例如:CBZ R1, label 当寄存器R1的值为零时,跳转到标签label所在的地址。

  • CBNZ:当指定的寄存器中的值不为零时,跳转到指定的地址。 例如:CBNZ R1, label 当寄存器R1的值不为零时,跳转到标签label所在的地址。

  • IT:条件执行指令,用于对后面的指令进行条件判断。 例如:IT eq 对后面的指令进行等于条件判断。

存取指令
  • LDR:从内存中加载数据到寄存器中。 例如:LDR R1, [R2] 将内存地址存储在寄存器R2中的数据加载到寄存器R1中。

  • LDRB:从内存中加载一个字节的数据到寄存器中。 例如:LDRB R1, [R2] 将内存地址存储在寄存器R2中的一个字节的数据加载到寄存器R1中。

  • LDRH:从内存中加载半个字的数据到寄存器中。 例如:LDRH R1, [R2] 将内存地址存储在寄存器R2中的半个字的数据加载到寄存器R1中。

  • LDRSB:从内存中加载一个符号扩展的字节的数据到寄存器中。 例如:LDRSB R1, [R2] 将内存地址存储在寄存器R2中的一个符号扩展的字节的数据加载到寄存器R1中。

  • LDRSH:从内存中加载一个符号扩展的半个字的数据到寄存器中。 例如:LDRSH R1, [R2] 将内存地址存储在寄存器R2中的一个符号扩展的半个字的数据加载到寄存器R1中。

  • STR:将寄存器中的数据存储到内存中。 例如:STR R1, [R2] 将寄存器R1中的数据存储到内存地址存储在寄存器R2中。

  • STRB:将寄存器中的一个字节的数据存储到内存中。 例如:STRB R1, [R2] 将寄存器R1中一个字节的数据存储到内存地址存储在寄存器R2中。

  • STRH:将寄存器中的半个字的数据存储到内存中。 例如:STRH R1, [R2] 将寄存器R1中半个字的数据存储到内存地址存储在寄存

  • TST:对两个操作数进行逻辑与运算,并设置标志位。 例如:TST R1, R2 对寄存器R1和R2的值进行逻辑与运算,设置标志位。

  • UXTB:将一个操作数的低8位零扩展为32位,并将结果存储到目标寄存器中。 例如:UXTB R1, R2 将寄存器R2的低8位零扩展为32位,结果存储到寄存器R1。

  • UXTH:将一个操作数的低16位零扩展为32位,并将结果存储到目标寄存器中。 例如:UXTH R1, R2 将寄存器R2的低16位零扩展为32位,结果存储到寄存器R1。

控制指令
  • CPS:用于改变当前处理器状态。 例如:CPSid mode 切换到指定的处理器状态。

  • DSB:数据同步屏障指令,用于确保之前的内存访问完成。 例如:DSB 保证之前的内存访问完成。

  • ISB:指令同步屏障指令,用于刷新指令缓存。 例如:ISB 刷新指令缓存。

  • NOP:空操作指令,不执行任何操作。 例如:NOP 空操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值