整理一下最近学到的基本的ARM汇编指令吧。。
1 指令机器码:每一条ARM指令都对应唯一的一条指令机器码(32bit)
mov r2,#5===>
E3A02005
mov rd,#<const>对应的指令机器码格式说明:
0-11bit:存放第二操作数(立即数)
12-15bit:目标寄存器的编号
20bit:S位,指令加S,该位为1
21-27bit:mov指令的操作码
28-31bit:条件位
2 数据处理指令
1 算术指令: ADD ADC SUB SBC
2 逻辑指令: AND ORR EOR BIC
ADD Rd, Rn, Rm(或#immed) | Rd = Rn + Rm(或#immed) | 加法运算,指令为 ADD |
ADC Rd, Rn, Rm(或#immed) | Rd = Rn + Rm(或#immed) + 进位 | 带进位加法运算,指令为 ADC |
SUB Rd, Rn, Rm(或#immed) | Rd = Rn - Rm(或#immed) | 减法运算,指令为 SUB |
SBC Rd, Rn, Rm(或#immed) | Rd = Rn - Rm(或#immed) - 借位 | 带借位减法运算,指令为 SBC |
AND Rd, Rn,Rm(或AND Rd, Rn ) | Rd = Rn & Rm(或Rd = Rd & Rn) | 按位与运算 |
ORR Rd, Rn,Rm(或ORR Rd, Rn ) | Rd = Rn | Rm(或Rd = Rd | Rn) | 按位或运算 |
BIC Rd, Rn,Rm(或BIC Rd, Rn) | Rd = Rn & (~Rm)(或 Rd = Rd & (~Rn) ) | 按位位清零 |
ORN Rd, Rn,Rm | Rd = Rn | (~Rm) | 按位或非,指令为 ORN |
EOR Rd, Rn,Rm(或EOR Rd, Rn ) | Rd = Rn ^ Rm(或 Rd = Rd ^ Rn ) | 按位异或,指令为 EOR |
3 比较指令: CMP CMN TST TEQ
4 数据搬移: MOV MVN
CMN和TEQ就不一一赘述了
4 MOV R0 R1 @将 R1 里面的数据复制到 R0 中
MVN 数据取反传送指令 ;取反的有效数字不能超过2位16进制(8位二进制),MVN r2,#0xf800合法,MVN r2,0x1510错误,执行后原数据丢失。