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

  简单的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. 第9.1节 Python的文件打开函数open简介

    一.语法简介 函数基本使用语法:open(文件名,文件打开模式='rt') 其中: 1.文件名为可带路径的文件名,注意windows下路径的反斜杠会被作为转义符处理,因此可以采用前面再加反斜杠或使用原 ...

  2. 2016 piapiapia 数组绕过

    0x00.感悟      写完这道题,我感觉到了扫源码的重要性.暑假复现的那些CVE,有的就是任意文件读取,有的是任意命令执行,这些应该都是通过代码审计,得到的漏洞.也就和我们的CTF差不多了.    ...

  3. 阿里云服务器搭建Docker版AWVS

    本文严重参考该文章:https://www.sqlsec.com/2020/04/awvs.html 阿里云服务器搭建Docker版AWVS,因为之前有使用Docker的经验,所以本文只是简述一下安装 ...

  4. 手机APP测试(测试点、测试流程、功能测试)

    1.功能测试 1.1 启动 APP安装完成后,是否可以正常打开,稳定运行 APP的速度是可以让人接受,切换是否流畅 网络异常时,应用是否会崩溃:在请求超时的情况下,如果程序逻辑处理的不好,就有可能发生 ...

  5. 云原生时代 给予.NET的机会

    .NET诞生于与Java的竞争,微软当年被罚款20亿美元. Java绝不仅仅是一种语言,它是COM的替代者! 而COM恰恰是Windows的编程模型.而Java编程很多时候比C++编程要容易的多,更致 ...

  6. [Windows] Prism 8.0 入门(下):Prism.Wpf 和 Prism.Unity

    1. Prism.Wpf 和 Prism.Unity 这篇是 Prism 8.0 入门的第二篇文章,上一篇介绍了 Prism.Core,这篇文章主要介绍 Prism.Wpf 和 Prism.Unity ...

  7. print(end="\r") 滚动输出到屏幕

    for i in range(10000): print(i, end = "\r") print(end="\r") 滚动输出到屏幕

  8. 第 7 篇 Scrum 冲刺博客

    每天举行会议 会议照片: 昨天已完成的工作与今天计划完成的工作及工作中遇到的困难: 成员姓名 昨天完成工作 今天计划完成的工作 工作中遇到的困难 蔡双浩 补充注释,初步查找bug 修改bug 无 陈创 ...

  9. 【Alpha冲刺阶段】Scrum Meeting Daily3

    [Alpha冲刺阶段]Scrum Meeting Daily3 1.会议简述 会议开展时间 2020/5/24 8:00-8:15 PM 会议基本内容摘要 每日汇报 个人进度.遇到的困难.明日的计划. ...

  10. vue优点

    低耦合.视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View ...