芯片启动时很多设备没有初始化,需要汇编语言进行准备。

  简单的GNU汇编语法:



1 label: instruction @ comment

    label :标号,类似于外号,为所在位置做标号,可以通过这个标号访问这里的内容 所有的以“:”结尾的都被认为是标号

    instruction  : 指令,包含汇编指令和伪指令

    comment  : 注释部分 ,在“@”后面的被认为是注释,也可以用类似于C语言的 “/*” 和“*/”

    ARM 中的指令、伪指令、伪操作、寄存器名等可以全部使用大写,也可以全部使用小写,但是不能大小写混用。



  用户可以使用.section 伪操作来定义一个段,汇编系统预定义了一些段名:

    .text      代码段

    .data    数据段(初始化的)

    .bss     数据段(未初始化的)

    .rodata    只读数据

  我们可以自己使用.section 来定义一个段,每个段以段名开始,以下一段名或者文件结尾结束,比如:

1 .section .testsection @定义一个 testsetcion 段(text/data/bss/rodata)


  汇编程序的默认入口标号是_start,不过我们也可以在链接脚本中使用 ENTRY 来指明其它的入口点
  下面的代码就是使用_start 作为入口标号:

1 global _start
2
3 _start:
4 ldr r0, =0x12 @r0=0x12

  上面代码中.global 是伪操作,表示_start 是一个全局标号,类似 C 语言里面的全局变量一样


  常见的伪操作有:
    



  GNU 汇编同样也支持函数,函数格式如下:

1 函数名:
2 函数体
3 返回语句 @非必须

  代码类似于:

 1 /* 未定义中断 */
2 Undefined_Handler:
3 ldr r0, =Undefined_Handler
4 bx r0
5
6
7 /* SVC 中断 */
8 SVC_Handler:
9 ldr r0, =SVC_Handler
10 bx r0
11
12
13 /* 预取终止中断 */
14 PrefAbort_Handler:
15 ldr r0, =PrefAbort_Handler
16 bx r0


  Cortex-A7常用汇编指令

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

   

  2、存储器访问指令

    

   3、压栈出栈指令

   

  例如:

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

  PUSH 和 POP 的另外一种写法是“STMFD SP!”和“LDMFD SP!”

1 STMFD SP!,{R0~R3, R12} @R0~R3,R12 入栈
2 STMFD SP!,{LR} @LR 入栈
3
4 LDMFD SP!, {LR} @先恢复 LR
5 LDMFD SP!, {R0~R3, R12} @再恢复 R0~R3, R12

  4、跳转指令

  

  5、算术运算符

  

  6、逻辑运算指令

  



4.简单的 GNU 汇编语法的更多相关文章

  1. GNU for x86汇编语法

    作者:冯老师,华清远见嵌入式学院讲师. 译自“Using as The GNU Assembler January 1994”. 参考Tornado随机文档“GNU Toolkit User's Gu ...

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

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

  3. GNU风格 汇编语法总结(转)

    转载自:http://blog.sina.com.cn/s/blog_78d30f6b0101713r.html 汇编源程序一般用于系统最基本的初始化:初始化堆栈指针.设置页表.操作 ARM的协处理器 ...

  4. GNU风格 ARM汇编语法1

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

  5. (转)GNU风格ARM汇编语法指南(非常详细)1

    原文地址:http://zqwt.012.blog.163.com/blog/static/120446842010111481551809/ 汇编源程序一般用于系统最基本的初始化:初始化堆栈指针.设 ...

  6. [中英对照]INTEL与AT&T汇编语法对比

    本文首先对文章Intel and AT&T Syntax做一个中英文对照翻译,然后给出一个简单的例子,再用gdb反汇编后,对INTEL与AT&T的汇编语法进行对照从而加深理解. Int ...

  7. AT&T 和 Intel 汇编语法的主要区别

    转自AT&T 和 Intel 汇编语法的主要区别 作为一个爱折腾的大好青年,补番之余还要补一些 Linux 下的基础,比如 GDB 的正确使用方法.但无论是看 gdb 还是 gcc -S 里的 ...

  8. ARM标准汇编与GNU汇编

    ARM标准汇编与GNU汇编 http://www.cnblogs.com/hnrainll/archive/2011/05/17/2048315.html

  9. linux-0.11 内核源码学习笔记一(嵌入式汇编语法及使用)

    linux内核源码虽然是用C写的,不过其中有很多用嵌入式汇编直接操作底层硬件的“宏函数”,要想顺利的理解内核理论和具体实现逻辑,学会看嵌入式汇编是必修课,下面内容是学习过程中的笔记:当做回顾时的参考. ...

随机推荐

  1. pyinstaller---将py文件打包成exe

    pyinstaller可将Python脚本打包成可执行程序,使在没有Python环境的机器上运行. 1.pyinstaller在windows下的安装 直接在命令行用pip安装 pyinstaller ...

  2. 第 5 篇 Scrum 冲刺博客

    每天举行会议 会议照片: 昨天已完成的工作与今天计划完成的工作及工作中遇到的困难: 成员姓名 昨天完成工作 今天计划完成的工作 工作中遇到的困难 蔡双浩 实现重设计个人界面的功能添加 实现关注,被关注 ...

  3. KM 算法

    KM 算法 可能需要先去学学匈牙利算法等二分图相关知识. 模板题-洛谷P6577 [模板]二分图最大权完美匹配 给 \(n\) 和 \(m\) 与边 \(u_i,v_i,w_i(1\le i\le m ...

  4. STL——容器概述

    在实际的开发过程中,数据结构本身的重要性完全不逊于算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要. 试想:如同栈一样的一条死胡同里停车,这样的效率会很高吗? 经典的数 ...

  5. I/O-基本概念

    目录 演变过程 I/O系统基本组成 I/O接口 I/O方式简介 小结 演变过程 I/O系统基本组成 分成软件和硬件 I/O接口 接口可以看作是两个部件之间的交接部分 I/O方式简介 小结

  6. 1、MyCat入门

    1.Mycat简介 [1].Mycat是什么 Mycat 是数据库中间件 [2].why使用Mycat ①.Java与数据库紧耦合 ②.高访问量高并发对数据库的压力 ③.读写请求数据不一致 [3].数 ...

  7. mysql多实例启动、关闭

    启动(指定参数文件): [root@mysql01 ~]# mysqld_safe --defaults-file=/data/3306/my.cnf & [root@mysql01 ~]# ...

  8. Linux下安装mysql-5.7.24

    Mysql数据库的安装对于开发者来说,是我们必然会面对的问题,它的安装过程其实并不复杂,并且网络上的安装教程也非常多,但是对于新手来说,各种不同形式的安装教程,又给新手们带来了要选择哪种方式进行安装的 ...

  9. 事件修饰符 阻止冒泡 .stop 阻止默认事件 .prevent

    stop修饰符 阻止冒泡行为 可以在函数中利用$event传参通过stopPropagation()阻止冒泡 通过直接在元素中的指令中添加 .stop prevent修饰符 阻止默认行为 可以在函数中 ...

  10. uwsgi 的app变量名称必须为application

    from myproject import app as application if __name__ == "__main__": application.run() 否则会提 ...