ARM汇编编程概述

时间:2023-03-09 03:00:24
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中。

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