微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > arm汇编编程(示例)

arm汇编编程(示例)

时间:11-09 来源:互联网 点击:

CPU执行指令的步骤:取指->译码->:取指->译码->执行

取指:将指令从内存或指令cache中取入指令寄存器

译码:指令译码器对指令寄存器中的指令进行译码操作,辨识add,或是sub等操作

执行:指令执行单元根据译码的结果进行运算并保存结果

流水线操作:并发多条流水线(以3条为例)

1取指译码执行

2取指译码执行

3取指译码执行

提高时间效率

(三)、学习内容

1.汇编(对裸板机的控制,以及驱动程序控制)

2.内核移植(uboot移植、内核编译、文件系统移植、应用程序移植)

3.驱动程序编写

//^^^^^^^^^^^^^^^^^^^^^^^^^^下午^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

(四)、ADS的使用

ADS是汇编或C语言编译调试工具

可生成的文件:.axf含调试信息的可执行ELF文件

.bin可烧写的二进制映像文件

.hex可烧写的十六进制映像文件

ADS配置

在磁盘中新建一个目录D:\arm,用来存储所写的代码

点击目录:File->new,创建一个可执行的ARM映象工程

ARMExecutableImage生成ELF格式映像(bin)

ARMObjectLibrary生成armar格式目标库文件

EmptyProject创建不包含任何库或源文件的工程

MakefileImporterWizard用于Vc

ThumbARMInterworkingImage用于ARM和thumb指令混合代码生成的ELF映像

ThumbExecutableimage用thumb指令生成ELF格式映像

ThumbObjectLibrary用于Thumb指令的代码生成的armar格式文件

选ARMExecutableImage,工程文件名2440ART

加源文件

project->AddFiles

新建

填加已有

生成目标的配置

2440ART.mcp内双击

TargetSettins:post-linker选择ArMfromELF

LanguageSettins:ArchitectureorProcessor选择相应的编译器ARM920T

ArmLinker:output内RO0x30000000

options内Imageentrypoint设为0x30000000

layout内Object2440init.oSectionInit

Listings内Imagemap

ArmfromELF:outputformat内Plainbinary

outputfilename内*.bin

编译

make

调试AXD是调试器

设置,debug->打开AXD调试界面,选择option->configtarget选项

选ARMUL(模拟调试器),然后选择确定.进入调试界面.

ARMUL是虚拟调试环境(虚拟开发板)

如果用开发板真实环境调试,则需要使用JTAG连开发板后,在此处选H-JTAG

用file-

execute->runtocousor项.使程序进入用户主程序

可以用F8来一条一条执行语句,也可用F10,可以设置断点.

(五).汇编语言基本结构

例:

AREAInit,CODE,READONLY;AREA定义代码段,段名Init;代码段,只读

ENTRY;伪操作,第一条指令的入口

Start;标号,一段代码的开始,用于标记,无意义,必须顶格

MOVr0,#10;将10存入r0寄存器,整型常量前面用#号

MOVr1,#3;将3存入r1寄存器,r0和r1相当于两个变量,只是名称固定,在寄存器的存储空间内

ADDr0,r0,r1;将r0内数据与r1内数据相加,相加后数据放在r0内

;Stop;停止标号,下面的代码用于停止运行程序

;MOVr0,#0x18;软件异常中断响应

;LDRr1,=0x20026;ADP停止运行,应用退出

;SWI0x123456;ARM半主机软件中断

END

1).基本概念

(2)寄存器:如R0、R1等

ARM的汇编编程,本质上就是针对CPU寄存器的编程。

(3)指令:即操作码,直接控制CPU,如MOV

包括跳转指令、数据处理指令、乘法指令、PSR访问指令、加载或存储指令、数据交换指令、移位指令等

(4)伪操作:作用于编译器,大多用于定义和控制。如AREA

包括符号定义、数据定义、控制等

(5)标号:仅是一种标识。在跳转语句中,可以指向要跳转到的标识号位置

在ARM汇编中,标号代表一个地址,段内标号的地址在汇编时确定,段外标号的地址值在连接时确定

(6)符号:即标号(代表地址)、变量名、数字常量名等。符号的命名规则如下:

a.符号由大小写字母、数字以及下划线组成;

b.除局部标号以数字开头外,其它的符号不能以数字开头;

c.符号区分大小写,且所有字符都是有意义的;

d.符号在其作用域范围你必须是唯一的;

e.符号不能与系统内部或系统预定义的符号同名;

f.符号不要与指令助记符、伪指令同名。

2).段定义

在汇编语言中,以相对独立的指令或数据序列的程序段组成程序代码

段的划分:数据段、代码段。一个汇编程序至少有一个代码段

(1)代码段

上面的例子为代码段。

AREA定义一个段,并说明所定义段的相关属性,CODE用以指明为代码段

ENTRY标识程序的入口点。END为程序结束。

(2)数据段

AREADATAAREA,DATA,BIINIT,ALLGN=2

DISPBUFSPACE200

RCVBUFSPACE200

DATA用以指明为数据段,

SPACE分配200字节的存储单元并初始化为0

指令和伪操作在后面详细描述

3).汇编语言结构

[标号][指令或伪操作]

所有标号必须在一行的顶格书写,其后不加冒号

所有指令均不能顶格写

指令助记符大小写敏感,不能大小写混合,只能全部大写或全部小写

;为注释

@代码行注释,同;

#整行注释或直

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top