一. 什么是协处理器?

  1.1. SoC内部另一处理核心,协助主CPU实现某些功能,被主CPU调用执行一定任务。

  1.2. ARM设计上支持多达16个协处理器,但是一般SoC只实现其中的CP15.(cp:coprocessor)

  1.3. 协处理器和MMU、cache、TLB等处理有关,功能上和操作系统的虚拟地址映射、cache管理等有关

二. MRC & MCR的使用方法

  2.1. 用法格式

    a. mcr{<cond>} p15, <opcode_1>, <Rd>, <Crn>, <Crm>, {<opcode_2>}

    b. opcode_1:对于cp15永远为0

    c. Rd:ARM的普通寄存器

    d. Crn:cp15的寄存器,合法值是c0~c15

    e. Crm:cp15的寄存器,一般均设为c0

    f. opcode_2:一般省略或为0

三. 8种后缀

  3.1. 相关后缀

    3.1.1.  ia(increase after)先传输,再地址+4

    3.1.2.  ib(increase before)先地址+4,再传输

    3.1.3.  da(decrease after)先传输,再地址-4

    3.1.4.  db

    3.1.5.  fd(full decrease)满递减堆栈

    3.1.6. ed(empty decrease)空递减堆栈

    3.1.7. fa(·······) 满递增堆栈

    3.1.8. ea(·······)空递增堆栈

  3.2. 四种栈

    3.2.1. 空栈:栈指针指向空位,每次存入时可以直接存入然后栈指针移动一格;而取出时需要先移动一格才能取出

    3.2.2. 满栈:栈指针指向栈中最后一格数据,每次存入时需要先移动栈指针一格再存入;取出时可以直接取出,然后再移动栈指针

    3.2.3. 增栈:栈指针移动时向地址增加的方向移动的栈

    3.2.4. 减栈:栈指针移动时向地址减小的方向移动的栈

四. 伪指令

  4.1. 伪指令不是指令,伪指令和指令的根本区别是经过编译后会不会生成机器码

  4.2. 伪指令的意义在于指导编译过程。

  4.3. 伪指令是和具体的编译器相关的,我们使用gnu工具链,因此学习gnu环境下的汇编伪指令。

  4.4. 汇编中一些符号

    a. @ 用来做注释。可以在行首也可以在代码后面同一行直接跟,和C语言中//类似

    b. :以冒号结尾的是标号

    c. .  点号在gnu汇编中表示当前指令的地址

    d. # 立即数前面要加#或$,表示这是个立即数

  4.5. 常用gnu伪指令

    a. .global _start @ 给_start外部链接属性

    b. .section .text @ 指定当前段为代码段

    c. .ascii .byte .short .long .word

    d. .quad .float .string @ 定义数据

    e. .align 4 @ 以16字节对齐

    f. .balignl 16 0xabcdefgh @ 16字节对齐填充

    g. .equ @ 类似于C中宏定义

    h. .end @标识文件结束

    i. .include @ 头文件包含

  4.6. adr与ldr伪指令

    a. adr编译时会被1条sub或add指令替代,而ldr编译时会被一条mov指令替代或者文字池方式处理;

    b. adr总是以PC为基准来表示地址,因此指令本身和运行地址有关,可以用来检测程序当前的运行地址在哪里

    c. ldr加载的地址和链接时给定的地址有关,由链接脚本决定。

    ps:  ldr指令: ldr r0, #0xff

      伪指令: ldr r0, =0xfffl @涉及到合法/非法立即数,涉及到ARM文字池

参考《朱老师.1.2ARM裸机课件》   

ARM汇编3的更多相关文章

  1. 生成ARM汇编

    使用ndk即可生成arm汇编 1.首先写好hello.c 2.编写makefile #ndk根目录 NDK_ROOT=E:\Android\android-ndk-r10b #编译器根目录 TOOLC ...

  2. ARM汇编指令调试方法

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

  3. ARM汇编

    ARM汇编 ISA ISA即指指令集架构(Instruction Set Architecture)是与程序设计有关的计算机架构的一部分,包括本地数据类型.指令.寄存器.地址模式.内存架构.中断和意外 ...

  4. 3.1 ARM汇编编程概述

    1. 汇编编程 为什么要学习汇编 1). Bootloader初始化 2). Linux kernel 3). 高效 2. ARM汇编分类 1. ARM标准汇编:ARM公司得汇编器适合在Windows ...

  5. arm汇编进入C函数分析,C函数压栈,出栈,传参,返回值

    环境及代码介绍 环境和源码 由于有时候要透彻的理解C里面的一些细节问题,所有有必要看看汇编,首先这一切的开始就是从汇编代码进入C的main函数过程.这里不使用编译器自动生成的这部分汇编代码,因为编译器 ...

  6. GNU风格 ARM汇编语法指南

    汇编源程序一般用于系统最基本的初始化:初始化堆栈指针.设置页表.操作 ARM的协处理器等.这些初始化工作完成后就可以跳转到C代码main函数中执行. 1.  GNU汇编语言语句格式 任何Linux汇编 ...

  7. 入门 ARM 汇编(一)—— 知识铺垫

    我读着史铁生的散文,零碎的牵扯起我生命中不曾出现过的记忆,一如北方的黄山厚土之中悠忽而来的忧伤的信天游,那些灿若信仰一样的阳光以及阳光下虔诚的子民.我想有一次远行,于细碎流淌的时光与路途之中,观察所有 ...

  8. 常用ARM汇编指令

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

  9. ARM汇编编程概述

    1.为什么需要学些汇编指令 2.ARM汇编指令分类 3.汇编程序框架 4.编程准备 +++++++++++++++++++++++++++++++++++ 1.为什么需要学些汇编指令 bootload ...

  10. ARM 汇编的一些规范

    A.5.1  文件格式        ARM 源程序文件(即源文件)为文件格式,可以使用任一文本编辑器编写程序代码.         在一个项目中,至少要有一个汇编源文件或C 程序文件,可以有多个汇编 ...

随机推荐

  1. 【LuoguP3241】[HNOI2015] 开店

    题目链接 题意 给出一棵边带权的树,多次在线询问一个点到一个区间内的点的距离和. Sol 分块过不了的 一个 trick ,都知道要算两点之间距离可以拆成到根的距离和他们的 LCA 到根的距离 ,其实 ...

  2. FileUtils (从磁盘下载,从网络下载)

    public class FileUtils { /** * realPath 磁盘路径 D://project/download/ * urlPath 后半部分路径 具体根据业务需求,例如:WEB- ...

  3. echart-折线图,数据太多想变成鼠标拖动和滚动的效果?以及数据的默认圈圈如何自定义圆圈的样式

    1.数据太多怎么办???想拖拽,想滑动 dataZoom: [ { type: 'slider', } ] dataZoom: [ { type: 'inside',  }] 两种功能都需要,还想调样 ...

  4. 超大文件上传方案(PHP)

    前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...

  5. BZOJ 5129: [Lydsy1712月赛]树上传送 点分树+Dijkstra

    Description http://www.lydsy.com/JudgeOnline/upload/201712/prob12.pdf Input Output 暑假集训的时候点分树做的比较少,所 ...

  6. Comet OJ - Contest #6 C 一道树题 数学 + 推导

    Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...

  7. Apache简介

    1.什么是Apache 注:Apache是目前使用最广泛的Web服务器软件. 2.发展历史 注:客户端mosaic程序是Netscape浏览器的前身,后来演变成mozilla浏览器,即我们使用的Fir ...

  8. [luogu]P3939 数颜色[二分]

    [luogu]P3939 数颜色 题目描述 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不同的兔子可能有 相同的颜色.小 C 把她标号从 1 到 n 的 n 只兔子排成长长的一排, ...

  9. SpringCloud 教程 (二) 服务链路追踪(Spring Cloud Sleuth)

    一.简介 Add sleuth to the classpath of a Spring Boot application (see below for Maven and Gradle exampl ...

  10. Oracle Or子句

    Oracle Or子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,我们来学习如何使用Oracle OR运算符来组合两个或更多的布尔表达式. ...