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 空操作。