ARM汇编编程概述
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汇编编程概述的更多相关文章
- 3.1 ARM汇编编程概述
1. 汇编编程 为什么要学习汇编 1). Bootloader初始化 2). Linux kernel 3). 高效 2. ARM汇编分类 1. ARM标准汇编:ARM公司得汇编器适合在Windows ...
- [国嵌笔记][024][ARM汇编编程概述]
汇编程序用途 1.在bootloader与内核初始化时,还没有建立C语言运行环境,需要用到汇编程序 2.在对访问效率要求很高的情况下,需要用到汇编程序 ARM汇编分类 1.ARM标准汇编:适合于Win ...
- 《深入浅出嵌入式底层软件开发》—1. ARM汇编编程基础
1.1 ARM CPU寄存器 ARM的汇编编程,本质上就是针对CPU寄存器的编程,所以要搞清楚ARM有哪些寄存器:ARM寄存器分为两类:普通寄存器和状态寄存器:普通寄存器一共有16个,分别为R0——R ...
- ARM汇编编程基础之一 —— 寄存器
ARM的汇编编程,本质上就是针对CPU寄存器的编程,所以我们首先要弄清楚ARM有哪些寄存器?这些寄存器都是如何使用的? ARM寄存器分为2类,普通寄存器和状态寄存器 寄存器类别 寄存器在汇编中的名称 ...
- Part3_lesson1---ARM汇编编程概述
bootloader以及内核需要使用汇编语言,特别是在初始化的时候!以及在效率要求很高的地方会使用. 汇编程序框架: 其入口在_start处,这个入口需要用一个关键字为.global来声明它是一个全局 ...
- ARM汇编
ARM汇编 ISA ISA即指指令集架构(Instruction Set Architecture)是与程序设计有关的计算机架构的一部分,包括本地数据类型.指令.寄存器.地址模式.内存架构.中断和意外 ...
- 九、ARM 汇编与 C 的混合编程
9.1 ARM 汇编与 C 的混合编程 9.1.1 内嵌汇编 __asm __asm("指令")例如关闭/打开总中断开关 CPSR __asm //使用 C 中变量名代替寄存器 { ...
- GNU ARM 汇编基础
ARM GNU汇编基础 0 前言 全文补充提醒: 笔者在阅读ARM官方文档及查阅实际的u-boot源码中的汇编代码后,发现了一些不同于ARM官方文档中的汇编语法,查阅相关资料后,才发现主要由于汇编器的 ...
- ARM NEON 编程系列2 - 基本指令集
ARM NEON 编程系列2 - 基本指令集 前言 本系列博文用于介绍ARM CPU下NEON指令优化. 博文github地址:github 相关代码github地址:github NEON指令集 主 ...
随机推荐
- Sql server analysis service 通过IIS连接时的最大连接数问题
做过SSAS项目的大部分人都应该知道SSAS是可以通过在IIS上建立代理站点的方式来建立远程连接的,这样可以绕过连接到SSAS时需要在同一个域环境下通过域用户来验证的问题,这样即使连接到SSAS的客户 ...
- Elasticsearch--数据索引
前言 Elasticsearch可以支持全文检索,那么ES是以什么机制来支持的,这里索引就是一个重要的步骤,经过索引之后的文档才可以被分析存储.建立倒排索引.本篇就是以ES的数据检索操作来讨论的. 更 ...
- $("label + input") 匹配所有紧接在 prev 元素后的 next 元素
描述: 匹配所有跟在 label 后面的 input 元素 HTML 代码: <form> <label>Name:</label> <input name= ...
- mysql多实例部署
mysql 多实例常规来讲,主要有二种方案可以实现,这二种方案各有利弊,如下:1.基于多配置文件 通过使用多个配置文件来启动不同的进程,以此来实现多实例. 优点:逻辑简单,配置简单 缺点:管理起来不方 ...
- 如何获取各大平台的播放地址(获得优酷的m3u8播放地址)为例
1.打开safari 2.在顶部(黑色小苹果)旁边,点击safari. 3.打开里面的 偏好设置. 4.在高级 中 找到 “在菜单栏中显示开发菜单” 并打勾. 5.关闭窗口后,可以发现safari 顶 ...
- 给我发邮件(qq)| 和我联系
qq邮箱开放平台(只能是qq对qq): 简单点的发邮件: 和我联系
- Linux上部署Tomcat(包括JAVA环境的配置)
一. 用FTP工具,把apache-tomcat-7.0.64.tar.gz,jdk-7u79-linux-x64.tar.gz 上传到目录/home/zwl/Tomcat/命令下 因为Tomcat运 ...
- Android处理图片OOM的若干方法小结 (推荐)
众所周知,每个Android应用程序在运行时都有一定的内存限制,限制大小一般为16MB或24MB(视平台而定).因此在开发应用时需要特别关注自身的内存使用量,而一般最耗内存量的资源,一般是图片.音频文 ...
- The Cow Lexicon
The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8815 Accepted: 4162 Descr ...
- 多校3- RGCDQ 分类: 比赛 HDU 2015-07-31 10:50 2人阅读 评论(0) 收藏
RGCDQ Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Practic ...