欢迎来到天天文库
浏览记录
ID:48782005
大小:474.00 KB
页数:35页
时间:2020-01-24
《第7章 汇编语言程序设计.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第7章汇编语言程序设计本章主要介绍ARM汇编语言程序设计规范,以及在汇编语言程序设计中所要注意的问题,最后以大量的实例说明汇编语言程序设计方法。内容提要7.1ARM汇编语言源程序格式及规范7.2ARM汇编语言程序设计实例解析常用ARM源程序文件类型文件类型扩展名汇编语言源文件.SC语言源文件.CC++源文件.cpp引入文件.INC头文件.h汇编语言程序的结构CODE32;32位的ARM指令段AREAcodesec,CODE,READONLY;代码段,名称为codesec,属性为只读mainPROC;函数mai
2、nSTMFDSP!,{LR};保存必要的寄存器和返回地址ADRR0,strhello;取标签strhello代表的地址值BL_printf;调用C运行时库的_printf函数;“Helloworld!”字符串BLwelcomefun;恢复子函数welcomefunLDMFDSP!,{PC};恢复寄存器值strhello;strhello代表本地制服穿的地址DCB“Helloworld! ”;定义一段字节空间ENDP;函数main结束welcomefun;子函数welcomefunSTMFDSP!,{LR
3、};保存必要的寄存器和返回地址ADRR0,adrstrarm;取标签adrstrarm代表的地址值到R0中LDRR0,[R0,#0];将Strarm的值放到R0中BL_printf;调用C运行时库的_printf函数打印;“WelcometoARMworld!”字符串LDMFDSP!,{PC};恢复寄存器值adrstrarm;adrstrarm标签DCDstrarm;保存strarm的地址AREAconstdatasec,DATA,READONLY,ALIGN=2;数据段,名称constdatasec;只读,
4、字对齐StrarmDCB“WelcometoARMworld! ”;存放“WelcometoARMworld!”;字符串EXPORTmain;导出main函数供外部调用;引入三个C运行时的库函数和ARM库IMPORT_mainIMPORT_printfIMPORT
5、
6、lib$$request$$armlib
7、
8、,WEAKEND;程序结束ARM的汇编语言程序一般由几个段组成,每个段都由AREA伪操作定义。段可以分为多种,如代码段、数据段、通用段,每个段又有不同的属性,如代码段的默认属性为READONLY,
9、数据段的默认属性为READWRITE。本程序定义了两个段,第一个段为代码段codesec,在存储器中存放用于程序执行的代码以及main函数的本地字符串;第二个段为数据段constdatasec,存放了全局的字符串,由于本程序没有对数据进行写操作,该段定义的属性为READONLY。ARM汇编语言程序设计格式及规范ARM编译环境下进行汇编语言程序设计的格式汇编语句中的符号规则ARM编译环境下汇编语句格式ADS环境下ARM汇编语句格式如下:[标签]指令/伪操作/伪指令操作数[;语句的注释]所有的标签必须在一行的开头
10、顶格写,前面不留空格。后面也不能跟C语言中的标签一样加“:”;ARM汇编器对标识符的大小写敏感,书写标号以及指令时字母的大小写要一致;注释使用“;”符号,注释的内容从“;”开始到该行的结尾结束。ARM编译环境下汇编语句中符号规则1.符号命名规则(1)符号由大小写字母、数字、下划线组成,且符号是区分大小写的。(2)局部标号可以用数字开头,其他的标号不能。(3)符号在其作用范围内必须是唯一的。(4)程序中的符号不要与指令助记符或者伪操作同名。标签标签是一个符号,可以代表指令的地址、数据的地址、变量。一般以字母开头
11、,由字母、数字、下划线组成。当符号代表地址时又称标号,可以以数字开头,其作用范围为当前段或者在下一个ROUT伪操作之前。指令/伪操作指令/伪操作是指令的助记符,他告诉ARM的处理器应该执行什么样的操作或者告诉汇编程序伪指令语句的伪操作功能。标号代表地址▲标号分为段内标号和段外标号。段内标号的地址值在汇编时确定,段外标号的地址值在连接是确定。▲在程序段中,标号代表其所在位置与段首地址的偏移量。根据程序计数器(PC)和偏移量计算地址及程序相对寻址。▲在影像中定义的标号代表标号到映像首地址的偏移量。映像的首地址通常
12、被赋予一个寄存器,根据寄存器值域偏移量计算地址即寄存器相对寻址。例如loopSUBSR0,R0,#1;每次循环使R0=R0-1BNEloop;跳转到loop标号去执行在宏中也可以使用局部标号。局部标号是0-99的十进制开始,可以重复定义被引用的局部标号语法规则是:%{F∣B}{A∣T}n{routname}其中:n是局部标号的数字号。routname是当前局部范围的名称。%表示引用操作。F指示汇编器
此文档下载收益归作者所有