1、处理器内部常用数据传输指令
MOV R0 R1 // 通用寄存器互传
MRS R0 CPSR // 特殊寄存器 向 通用寄存器传
MSR CPSR R1 // 通用寄存器 向 特殊寄存器传
2、存储指令的访问
ARM 不能直接访问 存储器
常用的 存储器 访问指令:
LDR 和 STR
LDR Rd, [Rn, #offset] 从存储器 Rn+offset 的位置读取数据存放到 Rd 中
STR Rd,[Rn, #offset] 将Rd中的数据 写入到存储器 Rn+ offset 位置
3、压栈 和 出栈
我们通常会在 A 函数中调用 B 函数,当 B 函数执行完以后再回到 A 函数继续执行。要想
再跳回 A 函数以后代码能够接着正常运行,那就必须在跳到 B 函数之前将当前处理器状态保存
起来(就是保存 R0~R15 这些寄存器值),当 B 函数执行完成以后再用前面保存的寄存器值恢复
R0~R15 即可 保存 R0~R15 寄存器的操作就叫做现场保护,恢复 R0~R15 寄存器的操作就叫做
恢复现场。在进行现场保护的时候需要进行压栈(入栈)操作,恢复现场就要进行出栈操作
压栈 的指令为 PUSH,出栈的指令为 POP。
PUSH
POP
4.跳转指令
①、直接使用跳转指令 B、BL、BX 等。
②、直接向 PC 寄存器里面写入数据。
1、B 指令
这是最简单的跳转指令,B 指令会将 PC 寄存器的值设置为跳转目标地址, 一旦执行 B 指
令,ARM 处理器就会立即跳转到指定的目标地址。如果要调用的函数不会再返回到原来的执行
处,那就可以用 B 指令,如下示例:
示例代码 7.2.4.1 B 指令示例
1 _start:
2
3 ldr sp,=0X80200000 @设置栈指针
4 b main
@跳转到 main 函数
初始化了 SP 指针 有些处理器还需要做其他的初始化 比如初始化 DDR
为跳转到 C 文件以后再也不会回到汇编了,所以在第 4 行使用了 B 指令来完成跳转
这个时候就不能直接使用 B 指令了,因为 B 指令一旦跳转就再也不会回来了,这个时候要使用 BL 指令.
例代码 7.2.4.2 BL 指令示例
1 push {r0, r1}
@保存 r0,r1
2 cps #0x13
@进入 SVC 模式,允许其他中断再次进去
3
5 bl system_irqhandler
@加载 C 语言中断处理函数到 r2 寄存器中
6
7 cps #0x12
@进入 IRQ 模式
8 pop {r0, r1}
9 str r0, [r1, #0X10]
@中断执行完成,写 EOIR
5.算术运算指令
ADD Rd, Rn, Rm
Rd = Rn + Rm
加法运算,指令为 ADD
ADD Rd, Rn, #immed
Rd = Rn + #immed
ADC Rd, Rn, Rm
Rd = Rn + Rm + 进位
带进位的加法运算,指令为 ADC
ADC Rd, Rn, #immed
Rd = Rn + #immed +进位
SUB Rd, Rn, Rm
Rd = Rn – Rm
减法
SUB Rd, #immed
Rd = Rd - #immed
SUB Rd, Rn, #immed
Rd = Rn - #immed
SBC Rd, Rn, #immed
Rd = Rn - #immed – 借位
带借位的减法
SBC Rd, Rn ,Rm
Rd = Rn – Rm – 借位
MUL Rd, Rn, Rm
Rd = Rn * Rm
乘法(32 位)
UDIV Rd, Rn, Rm
Rd = Rn / Rm
无符号除法
SDIV Rd, Rn, Rm
Rd = Rn / Rm
有符号除法
嵌入式开发中最常会用的就是加减指令,乘除基本用不到。
AND Rd, Rn
Rd = Rd &Rn
按位与
AND Rd, Rn, #immed
Rd = Rn immed
AND Rd, Rn, Rm
Rd = Rn & Rm
ORR Rd, Rn
Rd = Rd | Rn
按位或
ORR Rd, Rn, #immed
Rd = Rn | #immed
ORR Rd, Rn, Rm
Rd = Rn | Rm
BIC Rd, Rn
Rd = Rd & (~Rn)
位清除
BIC Rd, Rn, #immed
Rd = Rn & (~#immed)
BIC Rd, Rn , Rm
Rd = Rn & (~Rm)
ORN Rd, Rn, #immed
Rd = Rn | (#immed)
按位或非
ORN Rd, Rn, Rm
Rd = Rn | (Rm)
EOR Rd, Rn
Rd = Rd ^ Rn
按位异或
EOR Rd, Rn, #immed
Rd = Rn ^ #immed
EOR Rd, Rn, Rm
Rd = Rn ^ Rm
学习 ARM 的所有指令请参考《 ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition.pdf》和《ARM Cortex-A(armV7)编 程手册 V4.0.pdf》这两份文档。
cortex-A7 ARM 汇编常用指令 终极总结相关推荐
- ARM汇编常用指令汇总
文章目录 ARM常见汇编指令的汇总 1.EQU 2.AREA 3.DCD 4. ENTRY 5. START 6. LDR 7. STR 8.BEQ 9.MSR/MRS 10.B/BL/BX 11.P ...
- ARM 汇编常用指令
1.adr指令 adr是小范围的地址读取伪指令,ldr是大范围的读取地址伪指令.可实际上adr是将基于PC相对偏移的地址值或基于寄存器相对地址值读取的为指令,而ldr用于加载32为立即数或一个地址到指 ...
- 80×86汇编常用指令
80×86汇编常用指令 一.数据传送指令 1. 通用数据传送指令 简写 英文全称 执行操作 MOV move 传送 MOVSX move with sign-extend 带符号扩展传送 MOVZX ...
- loop指令 c语言,arm汇编loop指令
满意答案 foy23q 2018.11.16 采纳率:59% 等级:9 已帮助:3714人 int GetSum(int val) //使用汇编求1+2+3+...+val的值 { int su ...
- cmp 字节 汇编_汇编 常用指令 cmp jmp call ret
cmp 指令 功能相当于减法指令 只是不保存结果 不过cmp执行后会影响标志位 其它指令 通过识别标志位 来得知比较的结果 CPU在执行cmp指令时 像add sub指令一样 也包含两种含义 (有符号 ...
- 8086汇编常用指令(待解释)
一.数据传送指令 mov push pop pushf popf xchg 二.算术运算指令 add sub adc sbb inc dec cmp imul idiv aaa 三.逻辑指令 and ...
- 汇编指令的学习1——ARM汇编的特点
以下内容源于朱友鹏<物联网大讲堂>的课程学习,如有侵权,请告知删除. 1.指令和伪指令 指令是CPU机器指令的助记符,经过编译(汇编器加工)后会得到一串10组成的机器码,可以由CPU读取执 ...
- ARM开发基础--指令,异常源及处理过程
本文主要面向初次接触ARM的初学者,主要做基础知识的讲解与科普,希望能对初学者有所帮助. 文章目录 前言 一.什么是指令?指令有哪些? 二.常用指令 1.数据处理指令 2.数据跳转指令 3.Load/ ...
- 常用的ARM汇编指令总结
第一次写博客,请各路大神多多关照. 本人从事软件开发相关的工作,平时主要用c语言撸代码,前段时间因工作需要,接触到了ARM架构下的汇编指令,之前学过51单片机的汇编指令,早已经还给老师了,且ARM汇编 ...
最新文章
- Postman接口调试神器-Chrome浏览器插件
- LeetCode-数组-35. 搜索插入位置
- 华为端口聚合命令_华为交换机链路聚合配置命令
- SpringBoot 数据处理
- 用hundred造句子_关于冬至的问候短句,冬至文案唯美句子
- day11-元组与字典
- Linq动态查询与模糊查询
- vue中el-image的使用??
- 什么是罗技LogitechFlow技术
- 简单神经网络结构一键可视化
- matlab数字仿真实验,matlab数值仿真
- java 打包加密_java打包、加密、发布(源代码保护)
- android谷歌人脸识别,谷歌发布Android 4.0系统 支持人脸识别功能
- js如何实现侧边广告_如何用稳定器轻松实现低成本的商业级广告片制作?
- python爬虫-多线程小说批量下载
- Dubbo系统里面MultipartFile文件传输问题Dubbo文件上传/传输服务
- 口红会染唇是什么意思_口红和唇釉有什么区别
- 带眼镜的一定要看!一个眼镜批发商的话
- 《网络安全工程师笔记》 第十三章:PKI
- Hotel Plus上海国际酒店用品博览会将于4月25-27日举办
热门文章
- PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
- vmware虚拟机Linux(centOS)上用户密码忘记了怎么办?
- python快速实现图像矫正_OpenCV-python 实现图片矫正
- 线代基础第四讲——方程组
- 在蚂蚁森林把逝去的能量抢回(Python实现)
- 用结构体编写电话通讯录
- RMQ 算法(图示)
- python orm库_周边生态贡献者+1,一个TDengine的Python ORM库—crown
- IIS应用程序池监控,实时监控停止自动启动防止假死
- 自动整理文件夹(Droplt使用教程)