Home » 插件 » arm 汇编指令机器码

arm 汇编指令机器码

编 辑:Y ┊ 时 间:2022年03月01日 ┊ 访问: 16 次

汇编指令

27027-igq2oz7yfw.png

搬移指令

95831-xfmeo6wsfsp.png

搬移
28421-ashdixh85g7.png

左移指令

81735-c56ve1d5m86.png

09458-4l53szin8gh.png

cpsr 当前程序状态寄存器

读取
23330-mlp73v7nc89.png

写入(切换工作模式)
06811-vq7mcflwbdp.png

条件执行

71597-kc3sjd7hapr.png

cmp就是比较指令
moveeq 这里的eq就是是否相等
addgt gt是大的意思

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

74457-8zsf3hji4sk.png

.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

49466-jsceanxulc.png

17034-4utofbe2zc8.png

指令机器码

00102-rzsmu2t39s.png

ARM 指令集32位
Thumb 指令集16位

最高位是条件位

数值大小限制

12490-tqvmrzdknto.png

太大的数字不能直接进行赋值(搬移)
使用ldr指令就可以
62828-asjbtv3y697.png

逻辑指令

85521-4kp1kfapfp6.png

.text
mov r1, #0x13
and r0, #0xf0
@最低的四位清零
.end

95562-eib3vmisusu.png

还有相或
r3 = r0 | 0x0f

清除

bic r0, r0 , #0x03
@0x03 转换成二进制是0011
@就是清除r0的零号位和一号位

20453-ua5kxvtiux.png

16188-jcqgpuha9g.png

简写:
38051-5qt3noifpcn.png

tst 测试

tst r0, #0x20 
@ 0x20         ------- 0010 0000
测试第六位是否为0,为零则z标志位置1

06322-u1qx38x8etj.png

mrs r0, cpsr  @先读值 
bic r0, r0, #0xc0 @设置相应的位
@0xc0  -------   1100 0000
msr cpsr, r0  @写回去

中断

14132-3irun066c57.png

I和F是中断标志位 如果设置为1,则禁止中断
直接操作cpsr是不可以的,使用mrs读取
再bic清除
msr 设置回去

判断当前工作状态是不是arm状态,是则切换到user工作模式

39917-9mctvogjda8.png

T和J
T=0;J=0 处理器处于ARM状态
T=1;J=0 处理器处于Thumb状态
34047-u5t9lhq4w.png

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
再写进去

如果不使用上面的操作
31376-0pe1jp3qjajo.png

就会全部改变,这不是我们想要的,如何只改变部分呢
01741-mobv25pd5r8.png
使用add和orr就可以




Copyright © 2026 Y 版权所有.网站运行:13年238天21小时25分