arm 汇编指令机器码
汇编指令

搬移指令

搬移
左移指令


cpsr 当前程序状态寄存器
读取
写入(切换工作模式)
条件执行

cmp就是比较指令
moveeq 这里的eq就是是否相等
addgt gt是大的意思
.text
@ if a == 3
@ x = 5
mov r2, #3
cmp r2, #3
moveq r1,#5

.text
@if a == 3
@ x=5
@if a > 3
@ x=x + 2
mov r2,#3
cmp r2,#3
moveq r1,#5
addgt r1, r1,#2

指令机器码

ARM 指令集32位
Thumb 指令集16位
最高位是条件位
数值大小限制

太大的数字不能直接进行赋值(搬移)
使用ldr指令就可以
逻辑指令

.text
mov r1, #0x13
and r0, #0xf0
@最低的四位清零
.end
还有相或
r3 = r0 | 0x0f
清除
bic r0, r0 , #0x03
@0x03 转换成二进制是0011
@就是清除r0的零号位和一号位

简写:
tst 测试
tst r0, #0x20
@ 0x20 ------- 0010 0000
测试第六位是否为0,为零则z标志位置1
mrs r0, cpsr @先读值
bic r0, r0, #0xc0 @设置相应的位
@0xc0 ------- 1100 0000
msr cpsr, r0 @写回去
中断

I和F是中断标志位 如果设置为1,则禁止中断
直接操作cpsr是不可以的,使用mrs读取
再bic清除
msr 设置回去
判断当前工作状态是不是arm状态,是则切换到user工作模式

T和J
T=0;J=0 处理器处于ARM状态
T=1;J=0 处理器处于Thumb状态
Mode:处理器模式位
10000 User Model
10010 IRQ
10111 Abort mode
10011 SVC mode
10001 FIQ mode
11011 Undined mode
11111 System mode
mrs r0, cpsr
tst r0,#0x20
andeq r0,r0,#0xFFFFFFE0
@只改变最低的五位
orreq r0,r0,#0x10
#再设置mode位,orr 成10000
msreq cpsr,r0
再写进去如果不使用上面的操作
就会全部改变,这不是我们想要的,如何只改变部分呢
使用add和orr就可以