1、为什么需要学些汇编指令

2、ARM汇编指令分类

3、汇编程序框架

4、编程准备

+++++++++++++++++++++++++++++++++++

1、为什么需要学些汇编指令

bootloader 跟 linux 内核,这两类软件中都要用到汇编程序。

在这两类软件中,初始化的代码都要用到汇编指令。

比如,系统启动,bootloader需要对CPU,协处理器等初始化,通常用汇编编写,应为汇编是效率最高的。并且此时还没有建立起C语言运行的环境,因为还没有建立起堆栈。

系统刚上电,硬件初始化的时候,使用汇编语言来编写。内核同样的道理。

系统已经启动起来,对效率有特殊要求的地方可能还是会用汇编语言来编写,因为汇编语言的效率是比C语言高的。

+++++++++++++++++++++++++++++++++++++++

2、ARM汇编指令分类,目前常用的ARM汇编指令有两种:

 ARM 标准汇编:适用于ARM公司的汇编器,

在Windows平台下的集成开发环境ADS中使用。

GNU 汇编:在Linux开发平台,适用于GNU交叉编译工具链中的汇
编器。

3、汇编程序框架

.section .data
    < 初始化的数据>
.section .bss
    < 未初始化的数据>
.section .text
.global _start
_start:
    <汇编代码>

---------------------

入口函数在 _start:  相当于C语言中的main函数,需要用关键字 .global 表明为全局的符号,这样外部的文件才能引用到这个符号。

.section .text 表明代码段

-------------------------------

如果程序中,没有data段  没有bss段,简化之后的汇编程序框架:

.section .text  @.section .text习惯上会把.section省略掉  直接写 .text
.global _start
_start:
    <汇编代码>

4、创建汇编程序,编程环境:

创建文件 start.S

编辑文件内容,实现汇编程序:

.text
.global _start
_start:
    mov r1,#1

  mov r2,#2

  mov r3,#3

----------------------------

编写Makefile文件

all:start.o

  arm-linux-ld -Ttext 0x30000000 -o start.elf $^

%.o:%.S

  arm-linux-gcc -g -o $@ $^ -c

clean:

  rm *.o *.elf

注:-Ttext 0x30000000 指明程序代码段的起始地址是 0x30000000  ,针对2440开发版来说。

--------------------------------------------------------------

开发板的准备:

JLink连接开发板,JLink链接PC机,开发板从nand flash启动。

虚拟机连接串口

启动安装过的工具: JLinkGDBServer,保持运行

启动eclipse,自己安装的eclipse

Delete掉旧工程。

创建新的工程:

File-> new -> Makefile Project with Existing Code  找到代码的位置。

Project ---> Clean...   ---> 把 Start a build immediately 去掉。

Buid all 进行编译,生成了Start.elf文件

接下来 配置调试

Debug Configurations

选择 Zylin Embedder debug (Native) 双击

指定调试的应用程序:选择Start.elf文件

在Debugger中 去掉 stop on startup at main

GDB Debugger改为 arm-linux-gdb

Commands 内容填写为:2440的初始化脚本。 init-2440 这个文件的内容填写到 Commands中。

应用,后面就可以进行调试了。使用刚刚配置好的调试项 来进行调试。

ARM汇编编程概述的更多相关文章

  1. 3.1 ARM汇编编程概述

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

  2. [国嵌笔记][024][ARM汇编编程概述]

    汇编程序用途 1.在bootloader与内核初始化时,还没有建立C语言运行环境,需要用到汇编程序 2.在对访问效率要求很高的情况下,需要用到汇编程序 ARM汇编分类 1.ARM标准汇编:适合于Win ...

  3. 《深入浅出嵌入式底层软件开发》—1. ARM汇编编程基础

    1.1 ARM CPU寄存器 ARM的汇编编程,本质上就是针对CPU寄存器的编程,所以要搞清楚ARM有哪些寄存器:ARM寄存器分为两类:普通寄存器和状态寄存器:普通寄存器一共有16个,分别为R0——R ...

  4. ARM汇编编程基础之一 —— 寄存器

    ARM的汇编编程,本质上就是针对CPU寄存器的编程,所以我们首先要弄清楚ARM有哪些寄存器?这些寄存器都是如何使用的? ARM寄存器分为2类,普通寄存器和状态寄存器 寄存器类别 寄存器在汇编中的名称 ...

  5. Part3_lesson1---ARM汇编编程概述

    bootloader以及内核需要使用汇编语言,特别是在初始化的时候!以及在效率要求很高的地方会使用. 汇编程序框架: 其入口在_start处,这个入口需要用一个关键字为.global来声明它是一个全局 ...

  6. ARM汇编

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

  7. 九、ARM 汇编与 C 的混合编程

    9.1 ARM 汇编与 C 的混合编程 9.1.1 内嵌汇编 __asm __asm("指令")例如关闭/打开总中断开关 CPSR __asm //使用 C 中变量名代替寄存器 { ...

  8. GNU ARM 汇编基础

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

  9. ARM NEON 编程系列2 - 基本指令集

    ARM NEON 编程系列2 - 基本指令集 前言 本系列博文用于介绍ARM CPU下NEON指令优化. 博文github地址:github 相关代码github地址:github NEON指令集 主 ...

随机推荐

  1. Sqlserver 平面文件导入/ SSIS FlatFileSource导入文件时 出现LocaleID is not installed报错问题

    最近在使用SqlServer和SSIS导入一个CSV文件到数据库时(SSIS选用的FlatFileSource作为数据流源),老是遇到  The LocaleID 4 is not installed ...

  2. 目前主流的国产WebApp框架

    1.FrozenUI:QQ 2.WeUI:WeChat 3.SUI:Taobao

  3. FastJson--阿里巴巴公司开源的速度最快的Json和对象转换工具(转)

    本文转自:http://blog.csdn.net/djun100/article/details/24237371 这是关于FastJson的一个使用Demo,在Java环境下验证的 class U ...

  4. Linux的视频编程(V4L2编程)【转】

    本文转载自:http://blog.csdn.net/tommy_wxie/article/details/11472073 一.什么是video4linuxVideo4linux2(简称V4L2), ...

  5. 各种数据库连接代码(java)

    SqlServer2000 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); URL = "j ...

  6. grads 绘制仿matlab色标效果

    http://bbs.06climate.com/forum.php?mod=viewthread&tid=38391&page=1#pid530730

  7. html5 canvas 笔记四(变形 Transformations)

    绘制复杂图形必不可少的方法 save() 保存 canvas 状态 restore() 恢复 canvas 状态 Canvas 的状态就是当前画面应用的所有样式和变形的一个快照. Canvas 的状态 ...

  8. Recovery with Incremental Backups

    During media recovery, RMAN examines the restored files to determine whether it can recover them wit ...

  9. 霸气的jQ插件

    http://codepen.io/ canvas的各种实例 1.The Responsive jQuery Content Slider http://bxslider.com/ 2.ThemePu ...

  10. 再谈自主开发与企业IT管理

    前两天写<自主开发与带兵打仗>分析了一下自主开发的利与弊,得到了园内不少朋友的反馈,但我觉得还有很多东西没有交待清楚,可能有很多朋友也跟我一样在公司的IT部门,有自己的研发团队也有很多外购 ...