文章目录
指令格式(重点)
1. 立即数
一个常数,该常数必须对应8位位图,即一个8位的常数通过,循环右移偶数位得到该数,该数
数为合法立即数。
在指令中表示方法:#数字,例如:#100
快速判定是否是合法立即数:
- 首先将这个数转换为32bit的16进制形式,例如
218
=0xDA
=0x000000DA
- 除零外,仅有一位数为合法立即数
- 除零外,仅有二位数,并且相邻(包括首尾,如
0x1000000A
)的为合法立即数。 - 除零外,仅有三位数,并且相邻(包括中间有0相间,例如
0x10800000
,包括首尾相邻
如:0x14000003
),这三位数中,最高位取值仅能为1、2、3,最低位取值仅能为4、8、C
中间位0x0~0xF。 这种组合的为合法立即数。
2. 寄存器位移
将寄存器值读取之后,进行移位运算后,作为操作数2
参与运算。支持的移位方式如下:
LSL(Logical shift Left)
逻辑右移LSR(Logical shift Right)
逻辑左移ASR(Arithmetic shift Right)
算术右移
r0,lsr #4 表示r0 >>4
r0,lsr r1 表示r0 >>r1
#3,LsL #4 错误,只能是寄存器移位,不能是立即数移位
一、数据传送指令
1. MOV指令
格式:mov
目标寄存器,操作数2
功能:将操作数2的值赋值给目标寄存器
2. MVN指令
格式:mvn
目标寄存器,操作数2
功能:将操作2取反的值给目标寄存器
3. LDR指令
格式: LDR
目标寄存器,= 数据
功能: 完成任意的数据传送到目标寄存器
注意: 数据前面不能加#,因为此时数据不按立即数来处理
二、数据计算指令
1. ADD指令
格式: add
目标寄存器,操作数1
,操作数2
功能: 将操作数1加上操作数2的结果给目标寄存器
1. SUB指令
格式: sub
目标寄存器,操作数1