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. WCF技术的不同应用场景及其实现分析

    这一篇文章,是总结一下WCF技术,以及基于这个技术发展出来的几个典型应用场景,并且我将尝试对这些不同的WCF实现的原理进行一些比较分析. 关于WCF这个技术的基本概念,如果你不是很清楚,可以参考一下有 ...

  2. android 设置Button或者ImageButton的背景透明 半透明 透明

    Button或者ImageButton的背景设为透明或者半透明 半透明<Button android:background="#e0000000" ... />  透明 ...

  3. Ubuntu 安装 “宋体,微软雅黑,WPS Office的symbol、wingdings、wingdings 2、wingdings 3、webding字体,Consolas雅黑混合版编程字体” 等 Windows 7 下的字体(转)

    Windows平台下,"宋体"."微软雅黑"."Courier New(编程字体)"用的比较多,看的也习惯了.那如何在 Ubuntu下也安装 ...

  4. 理解Linux中断 (2)【转】

    转自:http://blog.csdn.net/tommy_wxie/article/details/7425692 版权声明:本文为博主原创文章,未经博主允许不得转载. .内核的中断处理 3.1.中 ...

  5. $(document).ready vs $(window).load vs window.onload

    原文地址: $(document).ready vs $(window).load vs window.onload $(document).ready We execute our code whe ...

  6. MySQL数据类型总结

    MySQL中的数据类型大的方面来分,可以分为:日期和时间.数值,以及字符串.下面就分开来进行总结. 日期和时间数据类型 MySQL数据类型 含义 date 3字节,日期,格式:2014-09-18 t ...

  7. java从命令行接收多个数字,求和之后输出结果

    设计思想:获取输入数的个数,然后将要相加的数字转换成为浮点型进行相加,最后进行输出 源代码: package Add; import java.util.Scanner; // 严羽卿   2015. ...

  8. jsp:和属性相关的方法,请求的转发,重定向

    jsp中与属性相关的方法: 方法: void setAttribute(String name, Object o): 设置属性 Object getAttribute(String name):获取 ...

  9. ssh 配置自动登录

    假定 机器A 连接至 机器B . 1. 在机器A上,生成RSA秘钥对 ssh-keygen -t rsa 期间passphrase不输入密码.默认生成文件至 ~/.ssh/ -rw------- we ...

  10. linq的创建 和 数据的增删改查

    1.linq创建之前,一定要在sql做好数据表的主外键关系. 2.linq文件是以.dbml结尾,一般一个数据库的名字就是一个linq的名字 3,以实例来演示增删改查 数据库的名字为linq,里面有两 ...