资源描述:
《arm汇编语言程序设计ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第4章汇编语言程序设计本章主要内容:1、ARM和Thumb汇编语言程序2、汇编语言与C语言3、混合编程技术4、汇编语言程序的汇编、运行、调试。1ARM程序的源文件:1、汇编语言源文件.s;扩展名.s2、C语言源文件.c;扩展名.c3、C++源文件.cpp;扩展名.cpp4、头文件.h;扩展名.h5、引入文件.inc;扩展名.incARM程序的源文件是文本格式的文件,可以使用简单的文本编辑器或者其他的编程开发环境进行编辑。例ads1。2editword等编辑程序。4.1汇编语言源程序格式p932Arm源程序汇编连接过程:例arm
2、asmhello.sarmlinkhello.o-ohello.axfarmsd-exechello.axf;执行之armcc-ghello.s-ohello.axf34.1.1汇编语言程序的结构p93在ARM(Thumb)汇编语言程序中,以程序段为单位组织代码。段是相对独立的指令或数据序列,具有特定的名称。段分为代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据。一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行的映象文件。在汇编语言
3、程序中,用AREA伪指令定义一个段,并说明所定义段的相关属性.4多个代码段的情况,一个源文件只能含一个代码段并单独编译,多个代码段分别编译最后连接成映象文件。可执行映象文件的构成:一个或多个代码段,代码段的属性为只读。零个或多个包含初始化数据的数据段,数据段的属性为可读写。零个或多个不包含初始化数据的数据段,数据段的属性为可读写。5CODE32;32位的ARM指令段;CODE1616位的thumb指令段AREAcodesec,CODE,READONLY;定义属性;代码段,名称为codesec,属性为只读mainPROC;函数m
4、ainSTMFDsp!,{lr};返回地址入栈/调用main函数指令的下一条指令的地址;保存必要的寄存器和返回地址到数据栈ADRr0,strhello;取标签strhello代表的地址值BL_printf;下一条指令地址送lr,转_printf;调用C运行时库的_printf函数打印“Helloworld!”字符串BLwelcomefun;调用子函数welcomfunLDMFDsp!,{pc};恢复寄存器值;返回主程序6Strhello;strhello代表本地字符串的地址DCB"Helloworld! ";定义一段字节
5、空间ENDP;函数main结束welcomefun;子函数welcomfunSTMFDsp!,{lr};保存必要的寄存器和返回地址到数据栈ADRr0,adrstrarm;取adrstrarm的地址放到寄存器r0中LDRr0,[r0,#0];将adrstrarm的值放到r0中BL_printf;调用C运行时库的_printf函数打印;“WelcomtoARMworld!”字符串LDMFDsp!,{pc};恢复寄存器值7Adrstrarm;adrstrarm标签DCDstrarm;保存strarm的地址AREAconstdatas
6、ec,DATA,READONLY,ALIGN=0;数据段,名称为constdatasec,属性为只读strarmDCB"WelcometoARMworld! ";存放“WelcometoARMworld!”字符串EXPORTmain;导出main函数供外部调用;引入三个C运行时库函数和ARM库IMPORT_mainIMPORT__mainIMPORT_printfIMPORT
7、
8、Lib$$Request$$armlib
9、
10、,WEAKEND;程序结束编译连接运行:编译连接运行.rtf84.1.2汇编语言行的构成ARM/Th
11、umb汇编语言程序的语句由4部分组成:[标签]指令/伪操作/伪指令操作数[;语句的注释]例:welcomefunSTMFDsp!,{lr};strarmDCB“WelcometoARMworld! ”;Labeladdaddr0,r0,r1;Str1SETS“Thisisastring.”BKPT;断点标签:welcomefun,strarm,Labeladd,Str1指令/伪操作/伪指令:STMFD,DCB,add,SETS操作数:其他部分9注意:ARM程序中,指令、伪指令、伪操作、寄存器助记符可以全部为大写或小写,但
12、大小写不能混合使用。ARM程序中的符号符号包括变量、标号、局部标号和数字常量,符号是变量、标号时又代表其地址。符号命名规则:由大小写字母、数字和下划线组成,且字母区分大小写。除局部标号以数字开头外,其他符号不能以数字开头。符号不能与助记符重名,且在其作用范围内唯一。符号一般以