当前位置:网站首页>ARM常用汇编指令
ARM常用汇编指令
2022-04-23 05:50:00 【tilblackout】
1、常用指令
(1)LDR、STR、MOV
LDR R0,[R1] #R0 = *R1,读取R1指向内存区域中的内容,存入R0
STR R0,[R1] #*R1 = R0,将R0写入R1指向的内存区域
MOV R0,R1 #R0 = R1
MOV R0,#0X10 #R0 = 0x10
LDR R0,=0X12345678 #R0 = 0x12345678 #没有等号的话就是将0x12345678指向内存的值取出放入R0
伪指令,所有指令是32位,但MOV不能一次赋32位的值,因为其本身有几位用来表示寄存器和指令
(2)add、sub
add r0,r1,#4 #r0=r1+4
sub r0,r1,#4 #r0=r1-4
sub r0,r1,r2 #r0=r1-r2
(3)B、bl
B #无条件跳转指令
bl main #跳转到main,并把下一条指令地址保存在lr寄存器中
(4)ldmia、stmdb
//栈是从高地址往下存的
ldmia sp,{fp,sp,pc}
1.ldm为读内存,m为many
2.高编号寄存器存在高地址内存的值,和后边写的顺序无关
3.ia为increase after,即先读后增
stmdb sp!,{sp,ip,lr,pc}
1.db为decrease before,即先减后存
2.感叹号表示SP等于最终被修改的SP值
(5)MRS、MSR
MRS: 将程序状态寄存器的内容传送到通用寄存器中。MRS <Rd>,CPSR/SPSR
MSR: 将操作数的内容传送到程序状态寄存器的特定域中。MSR CPSR/SPSR,<Rd>
MRC和MCR类似。
(6)teq、cmp
teq:测试寄存器和寄存器/立即数的值是否相等,如果相等置CPSR中条件位为1
teq r0, r1
ADDeq R0, R0, #1; #若R0 == R1, eq为真,则R1=R1 + 1
cmp:比较两个操作数的大小
CMP R0, R1;
ADDHI R0, R0, #1; #若R0>R1,HI为真,则R0=R0+1
ADDLS R1, R1, #1; #若R0<=R1,LS为真,则R1=R1+1
(7)adr指令:计算相对偏移,寻址空间为前后4K
start:MOV r0,#10
ADR r4,start #等价于SUB r4,pc,#0xc,因为当前的pc值为此条指令+8 ,所以-0xc
2、其它
ADC 带进位的加法指令
ADD 加法指令
AND 逻辑与指令
B 跳转指令
BIC 位清零指令
BL 带返回的跳转指令
BX 带状态切换的跳转指令,最低位为1时,执行Thumb指令,为0时,执行ARM指令执行
BLX 带返回和状态切换的跳转指令
CDP 协处理器数据操作指令
CMN 比较反值指令
CMP 比较指令
EOR 异或指令
LDC 存储器到协处理器的数据传输指令
LDM 加载多个寄存器指令
LDR 存储器到寄存器的数据传输指令
MCR 从ARM寄存器到协处理器寄存器的数据传输指令
MLA 乘加运算指令
MOV 数据传送指令
MRC 从协处理器寄存器到ARM寄存器的数据传输指令
MRS 传送CPSR或SPSR的内容到通用寄存器指令
MSR 传送通用寄存器到CPSR或SPSR的指令
MUL 32位乘法指令
MLA 32位乘加指令
MVN 数据取反传送指令
ORR 逻辑或指令
RSB 逆向减法指令
RSC 带借位的逆向减法指令
SBC 带借位减法指令
STC 协处理器寄存器写入存储器指令
STM 批量内存字写入指令
STR 寄存器到存储器的数据传输指令
SUB 减法指令
SWI 软件中断指令
SWP 交换指令
TEQ 相等测试指令
TST 位测试指令
--------------------------------------------------
条件码 助记符后缀 标志 含义
0000 EQ Z置位 相等
0001 NE Z清零 不相等
0010 CS C置位 无符号数大于或等于
0011 CC C清零 无符号数小于
0100 MI N置位 负数
0101 PL N清零 正数或零
0110 VS V置位 溢出
0111 VC V清零 未溢出
1000 HI C置位Z清零 无符号数大于
1001 LS C清零Z置位 无符号数小于或等于
1010 GE N等于V 有符号数大于或等于
1011 LT N不等于V 有符号数小于
1100 GT Z清零且[N等于V] 有符号数大于
1101 LE Z置位或[N不等于V] 有符号数小于或等于
1110 AL 忽略 无条件执行
版权声明
本文为[tilblackout]所创,转载请带上原文链接,感谢
https://blog.csdn.net/tilblackout/article/details/123418474
边栏推荐
猜你喜欢
【UDS统一诊断服务】二、网络层协议(1)— 网络层概述与功能
【UDS统一诊断服务】四、诊断典型服务(4)— 在线编程功能单元(0x34-0x38)
C#中?的这种形式
PM2 deploy nuxt project
Opencv uses genericindex for KNN search
【UDS统一诊断服务】四、诊断典型服务(5)— 功能/元件测试功能单元(例行程序功能单元0x31)
[UDS unified diagnosis service] i. diagnosis overview (2) - main diagnosis protocols (K-line and can)
For() loop parameter call order
【UDS统一诊断服务】四、诊断典型服务(3)— 读故障信息功能单元(存储数据传输功能单元)
[ThreadX] ThreadX source code reading plan (I)
随机推荐
爬虫效率提升方法
GDB debugger installation and use
Opencv uses genericindex for KNN search
搭建jpress个人博客
[UDS unified diagnosis service] IV. typical diagnosis service (3) - read fault information function unit (storage data transmission function unit)
【UDS统一诊断服务】一、诊断概述(4)— 基本概念和术语
cartographer_node 编译没问题,但是运行直接挂掉的bug
Graduation project, viewing screenshots of epidemic psychological counseling system
【UDS统一诊断服务】四、诊断典型服务(6)— 输入输出控制单元(0x2F)
Jeu de devinettes
Generate random number
cuda工程更换环境(电脑)后遇到的一系列编译问题
C语言的运算符
【UDS统一诊断服务】四、诊断典型服务(4)— 在线编程功能单元(0x34-0x38)
Programmers can also write novels
生成验证码
进程间通信-互斥锁
Uniapp encapsulates request
使用TransmittableThreadLocal实现参数跨线程传递
【UDS统一诊断服务】一、诊断概述(2)— 主要诊断协议(K线和CAN)