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

  简单的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. 第7章 Python类型、类、协议目录

    第7.1节 面向对象程序设计的相关知识 第7.2节 关于面向对象设计的一些思考 第7.3节 Python特色的面向对象设计:协议.多态及鸭子类型 第7.4节 Python中与众不同的类 第7.5节 揭 ...

  2. PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性

    老猿Python博文目录 老猿Python博客地址 一.属性的作用 dragDropOverwriteMode属性用于控制视图的拖放行为,如果其值为True,则视图中选定的数据将在拖拽数据放下时被覆盖 ...

  3. 6、Sping Cloud Feign

    1.Spring Cloud Feign简介 (1).Fegin简介 官方文档:http://projects.spring.io/spring-cloud/spring-cloud.html#spr ...

  4. Day1-7【Scrum 冲刺博客集合】

    Day1-Day7博客链接 Day1[Scrum 冲刺博客] Day2[Scrum 冲刺博客] Day3[Scrum 冲刺博客] Day4[Scrum 冲刺博客] Day5[Scrum 冲刺博客] D ...

  5. 【学习笔记】K 短路问题详解

    \(k\) 短路问题简介 所谓"\(k\) 短路"问题,即给定一张 \(n\) 个点,\(m\) 条边的有向图,给定起点 \(s\) 和终点 \(t\),求出所有 \(s\to t ...

  6. ubuntu18.04 登录界面循环,已解决

    按照百度的方法,要卸载重装nvidia,遇到如下问题 1.进入Ubuntu字符界面,出现乱码,猜测是sudo命令出现问题,果然 解决方案:$ PATH=/usr/kerberos/sbin:/usr/ ...

  7. Python高级语法-贯彻回顾-元类(4.99.1)

    @ 目录 1.为什么要掌握元类 2.正文 关于作者 1.为什么要掌握元类 在django中编写models的时候遇到了元类的相关操作 并且在mini-web框架编写的时候也遇到了相关的问题 意识到深入 ...

  8. Numpy的学习2-基础转换

    import numpy as np A = np.arange(2, 14).reshape((3, 4)) # array([[ 2, 3, 4, 5] # [ 6, 7, 8, 9] # [10 ...

  9. CTF练习三 —— 命令注入&命令执行绕过

    这个题是第四届强网杯也就是2020.8.22号开始的那场一道简单的命令注入题,再这之前我并没有学习过命令注之类的知识,,,看到题之后先搜在学,,误打误撞解了出来,过段时间wp就会放出来,所以这里就不对 ...

  10. PHPSHE 1.7前台SQL注入漏洞分析

    此CMS  SQL注入漏洞产生原因为未将经过 addslashes() 函数过滤的数据使用单引号包裹,从而导致的SQL注入漏洞.接下来看漏洞详情: 首先查看phpshe下的common.php文件37 ...