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 寄存器里面写入数据。
1B 指令
这是最简单的跳转指令,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 汇编常用指令 终极总结相关推荐

  1. 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 ...

  2. ARM 汇编常用指令

    1.adr指令 adr是小范围的地址读取伪指令,ldr是大范围的读取地址伪指令.可实际上adr是将基于PC相对偏移的地址值或基于寄存器相对地址值读取的为指令,而ldr用于加载32为立即数或一个地址到指 ...

  3. 80×86汇编常用指令

    80×86汇编常用指令 一.数据传送指令 1. 通用数据传送指令 简写 英文全称 执行操作 MOV move 传送 MOVSX move with sign-extend 带符号扩展传送 MOVZX ...

  4. loop指令 c语言,arm汇编loop指令

    满意答案 foy23q 2018.11.16 采纳率:59%    等级:9 已帮助:3714人 int GetSum(int val) //使用汇编求1+2+3+...+val的值 { int su ...

  5. cmp 字节 汇编_汇编 常用指令 cmp jmp call ret

    cmp 指令 功能相当于减法指令 只是不保存结果 不过cmp执行后会影响标志位 其它指令 通过识别标志位 来得知比较的结果 CPU在执行cmp指令时 像add sub指令一样 也包含两种含义 (有符号 ...

  6. 8086汇编常用指令(待解释)

    一.数据传送指令 mov push pop pushf popf xchg 二.算术运算指令 add sub adc sbb inc dec cmp imul idiv aaa 三.逻辑指令 and ...

  7. 汇编指令的学习1——ARM汇编的特点

    以下内容源于朱友鹏<物联网大讲堂>的课程学习,如有侵权,请告知删除. 1.指令和伪指令 指令是CPU机器指令的助记符,经过编译(汇编器加工)后会得到一串10组成的机器码,可以由CPU读取执 ...

  8. ARM开发基础--指令,异常源及处理过程

    本文主要面向初次接触ARM的初学者,主要做基础知识的讲解与科普,希望能对初学者有所帮助. 文章目录 前言 一.什么是指令?指令有哪些? 二.常用指令 1.数据处理指令 2.数据跳转指令 3.Load/ ...

  9. 常用的ARM汇编指令总结

    第一次写博客,请各路大神多多关照. 本人从事软件开发相关的工作,平时主要用c语言撸代码,前段时间因工作需要,接触到了ARM架构下的汇编指令,之前学过51单片机的汇编指令,早已经还给老师了,且ARM汇编 ...

最新文章

  1. Postman接口调试神器-Chrome浏览器插件
  2. LeetCode-数组-35. 搜索插入位置
  3. 华为端口聚合命令_华为交换机链路聚合配置命令
  4. SpringBoot 数据处理
  5. 用hundred造句子_关于冬至的问候短句,冬至文案唯美句子
  6. day11-元组与字典
  7. Linq动态查询与模糊查询
  8. vue中el-image的使用??
  9. 什么是罗技LogitechFlow技术
  10. 简单神经网络结构一键可视化
  11. matlab数字仿真实验,matlab数值仿真
  12. java 打包加密_java打包、加密、发布(源代码保护)
  13. android谷歌人脸识别,谷歌发布Android 4.0系统 支持人脸识别功能
  14. js如何实现侧边广告_如何用稳定器轻松实现低成本的商业级广告片制作?
  15. python爬虫-多线程小说批量下载
  16. Dubbo系统里面MultipartFile文件传输问题Dubbo文件上传/传输服务
  17. 口红会染唇是什么意思_口红和唇釉有什么区别
  18. 带眼镜的一定要看!一个眼镜批发商的话
  19. 《网络安全工程师笔记》 第十三章:PKI
  20. Hotel Plus上海国际酒店用品博览会将于4月25-27日举办

热门文章

  1. PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
  2. vmware虚拟机Linux(centOS)上用户密码忘记了怎么办?
  3. python快速实现图像矫正_OpenCV-python 实现图片矫正
  4. 线代基础第四讲——方程组
  5. 在蚂蚁森林把逝去的能量抢回(Python实现)
  6. 用结构体编写电话通讯录
  7. RMQ 算法(图示)
  8. python orm库_周边生态贡献者+1,一个TDengine的Python ORM库—crown
  9. IIS应用程序池监控,实时监控停止自动启动防止假死
  10. 自动整理文件夹(Droplt使用教程)