arm汇编编程(示例)
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).汇编语言结构 [标号][指令或伪操作] 所有标号必须在一行的顶格书写,其后不加冒号 所有指令均不能顶格写 指令助记符大小写敏感,不能大小写混合,只能全部大写或全部小写 ;为注释 @代码行注释,同; #整行注释或直
arm汇编编 相关文章:
- ARM汇编编程基础之四-ARM汇编伪操作(11-27)
- ARM汇编编程基础之三-基本寻址方式与基本指令(11-27)
- ARM汇编编程基础之一-寄存器(11-27)
- ARM汇编编程基础之五-ADS开发环境的使用(11-27)
- ARM汇编编程基础之二-流水线对PC值的影响(11-27)
- ARM汇编编程基础之六-其它寻址模式与其它指令(11-27)