Cortex-A7 常用汇编指令

一、处理器内部数据传输指令

1.mov

将数据从一个寄存器拷贝到另外一个寄存器,或者将一个立即数传递到寄存器里面

MOV R0,R1 @将寄存器 R1 中的数据传递给 R0,即 R0=R1
MOV R0, #0X12 @将立即数 0X12 传递给 R0 寄存器,即 R0=0X12

2.MRS

将特殊寄存器(如 CPSR 和 SPSR)中的数据传递给通用寄存器,要读取特殊寄存器的数据只能使用 MRS 指令

MRS R0, CPSR @将特殊寄存器 CPSR 里面的数据传递给 R0,即 R0=CPSR

3.MSR

MSR 指令和 MRS 刚好相反,MSR指令用来将普通寄存器的数据传递给特殊寄存器,也就是写特殊寄存器,写特殊寄存器只能使用 MSR

MSR CPSR, R0 @将 R0 中的数据复制到 CPSR 中,即 CPSR=R0

二、存储器访问指令

1.LDR

直接读取CPU的寄存器的值

LDR R0, =0X0209C004 @将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004
LDR R1, [R0] @读取地址 0X0209C004 中的数据到 R1 寄存器中

2.STR

将数据写入到存储器中

LDR R0, =0X0209C004 @将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004
LDR R1, =0X20000002 @R1 保存要写入到寄存器的值,即 R1=0X20000002
STR R1, [R0] @将 R1 中的值写入到 R0 中所保存的地址中

三、压栈与出栈指令

还记得学单片机的时候中断操作吗?当你中断的时候你当前执行程序的指令代码地址,会被压倒栈中暂时存储起来,当你执行完中断操作,回到主程序是,就需要把存储在栈中的指令地址重新取出来。

1.PUSh

初始SP指针指向0X80000000

PUSH {R0~R3, R12} @将 R0~R3 和 R12 压栈

执行完以上操作后,SP指向了0X7FFFFFEC

再次进行压栈,对LR

PUSH {LR} @将 LR 进行压栈

2.POP

出栈操作,后进去的先出来,也就是从栈顶开始出来

POP {LR} @先恢复 LR
POP {R0~R3,R12} @在恢复 R0~R3,R12

3.对于压栈、出栈还有这样的写法

STMFD SP!,{R0~R3, R12} @R0~R3,R12 入栈
STMFD SP!,{LR} @LR 入栈 34 LDMFD SP!, {LR} @先恢复 LR
LDMFD SP!, {R0~R3, R12} @再恢复 R0~R3, R12

是不是感觉有点熟悉,这里的STM 和 LDM就是前面说的LDR 和 STR,只不过不是一个量级的存储和读取操作,STM 和 LDM 就是多存储和多

加载,可以连续的读写存储器中的多个连续数据。

四、跳转指令

1.B

直接跳转到目标地址

1 _start:
2
3 ldr sp,=0X80200000 @设置栈指针
4 b main @跳转到 main 函数

使用B指令,直接跳转到C文件的main函数中,但注意,跳过去你就会不来了!!

如果你想回来怎么办?那就要用到下面这个指令了。

2.BL

BL 指令相比 B 指令,在跳转之前会在寄存器 LR(R14)中保存当前 PC 寄存器值,所以可以通过将 LR寄存器中的值重新加载到PC中来继续从跳转之前的代码处运行,这是子程序调用一个基本但常用的手段。

1 push {r0, r1} @保存 r0,r1
2 cps #0x13 @进入 SVC 模式,允许其他中断再次进去
3
4
5 bl system_irqhandler @加载 C 语言中断处理函数到 r2 寄存器中
6
7 cps #0x12 @进入 IRQ 模式
8 pop {r0, r1}
9 str r0, [r1, #0X10] @中断执行完成,写 EOIR

在第5行的时候上面这个程序就中断去执行了别的函数,但之后,还会回来继续之乡下面的程序。

五、算术运算指令

六、逻辑运算符

ARM汇编基础指令的更多相关文章

  1. GNU ARM 汇编基础

    ARM GNU汇编基础 0 前言 全文补充提醒: 笔者在阅读ARM官方文档及查阅实际的u-boot源码中的汇编代码后,发现了一些不同于ARM官方文档中的汇编语法,查阅相关资料后,才发现主要由于汇编器的 ...

  2. ARM汇编常用指令

    RAM汇编常用指令有MOV B BL LDR  STR

  3. iOS程序破解——ARM汇编基础

    原文在此:http://www.cnblogs.com/mddblog/p/4951650.html 一.Thumb指令与ARM指令 Thumb指令为16位,因此存储代码的密度高,节省存储空间.但是功 ...

  4. ARM 汇编 数据处理指令

    一. 如何把数据放到寄存器中 1. 数据搬移指令 mov  , mvn 1)  指令格式:<opcode><cond>{s}   Rd,  operand     <操作 ...

  5. ARM汇编指令特点

    根据朱有鹏老师课程笔记整理而来: (汇编)指令是CPU机器指令的助记符,经过编译后会得到一串1 0组成的机器码,由CPU读取执行. (汇编)伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器 ...

  6. ARM 汇编的mov操作立即数的疑问

    1. 因为对arm汇编有些指令还不能理解,特别是一些相似功能指令间的区别.偶然在网上搜到"faq ARM assembly",其中描述的几个问题还是值得好好研究一下. 2. 慢慢的 ...

  7. ARM汇编指令集1

    (汇编)指令是CPU机器指令的助记符,经过编译过会得到一串0011组成的机器码,可以由CPU读取执行. (汇编)伪指令本质不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译 ...

  8. ARM汇编指令调试方法

    学习ARM汇编时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在 ...

  9. 常用ARM汇编指令

    常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区  作者:xuyuanfan77 [字体:大 中 小]     在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...

随机推荐

  1. 2021.7.15考试总结[NOIP模拟16]

    ZJ模拟D2就是NB.. T1 Star Way To Heaven 谁能想到这竟是个最小生成树呢?(T1挂分100的高人JYF就在我身边 把上边界和下边界看成一个点和星星跑最小生成树,从上边界开始跑 ...

  2. VS 2013 配置份openGL环境

    几个要素: 1.  在E:\Microsoft Visual Studio 12.0\VC\include下创建GL文件夹,放入glut.h头文件. 2.  C:\Windows\System32下要 ...

  3. IDEA升级开源框架

    在开发过程中,我们经常会用到一些 GitHub或者Gitee上的开源框架来快速搭建我们的业务系统,但是当框架被我们大批量修改后,开源框架又有升级了.这时候升级框架就变得很麻烦,也不能直接直接进行合并, ...

  4. 字符串可以这样加索引,你知吗?《死磕MySQL系列 七》

    系列文章 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 五.如何选择普通索引和唯一索引&l ...

  5. AliRTC 开启视频互动 “零计算” 时代

    在 2021 云栖大会<产业视频化创新与最佳实践>视频云主题论坛中,阿里云智能高级技术专家在<AliRTC 开启视频互动 "零处理" 时代>的主题演讲中,发 ...

  6. 输入指令npx webpack-dev-server报错:Error: Cannot find module ‘webpack-cli/bin/config-yargs‘的解决方法

    输入指令npx webpack-dev-server报错:Error: Cannot find module 'webpack-cli/bin/config-yargs'的解决方法 输入指令:npx ...

  7. Python 数据类型常用的内置方法(二)

    目录 Python 数据类型常用的内置方法(二) 1.字符串类型常用内置方法 1.upper.lower.isupper.islower 2.startswith.endswith 3.format ...

  8. 仿Word的支持横轴竖轴的WPF 标尺

    最近在  https://mp.weixin.qq.com/s/3dEO0NZQv5YLqK72atG4Wg   官方公众号看到了 用WPF 制作 标尺 在去年项目上也接到了一个需求,用于排版自定义拖 ...

  9. python实现图像二值化

    1.什么是图像二值化 彩色图像: 有blue,green,red三个通道,取值范围均为0-255 灰度图:只有一个通道0-255,所以一共有256种颜色 二值图像:只有两种颜色,黑色和白色,二值化就是 ...

  10. [cf1486F]Pairs of Paths

    以1为根建树,先将所有路径挂在lca上,再分两类讨论: 1.lca相同,此时我们仅关心于lca上不经过第$a$和$b$个儿子路径数,容斥一下,即所有路径-经过$a$的-经过$b$的+经过$a$和$b$ ...