《第7章 汇编语言程序设计优秀课件.ppt》由会员分享,可在线阅读,更多相关《第7章 汇编语言程序设计优秀课件.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第7章章 汇编语言程序言程序设计第1页,本讲稿共38页第第7章章 汇编语言程序设计汇编语言程序设计本章主要介绍ARM汇编语言程序设计规范,以及在汇编语言程序设计中所要注意的问题,最后以大量的实例说明汇编语言程序设计方法。第2页,本讲稿共38页内容提要内容提要71 ARM编译环境下汇编语句编译环境下汇编语句72 GNU环境下汇编语句与编译说明环境下汇编语句与编译说明73 ARM汇编语言程序设计规范汇编语言程序设计规范74 ARM汇编语言程序设计实例解析汇编语言程序设计实例解析第3页,本讲稿共38页71ARM编译环境下汇编语句编译环境下汇编语句nARM编译环境下进行汇编语言程序设计的格编译环境下
2、进行汇编语言程序设计的格式式n汇编语句中的符号规则汇编语句中的符号规则 第4页,本讲稿共38页 ARM编译环境下汇编语句格式编译环境下汇编语句格式nADS环境下环境下ARM汇编语句格式如下:汇编语句格式如下:nsymbol instruction;commentnsymbol directive;commentnsymbol pseudo-instruction;comment第5页,本讲稿共38页nADS编译环境下汇编语句中符号规则编译环境下汇编语句中符号规则n1.符号命名规则符号命名规则n(1)符号由大小写字母、数字、下划线组成,且符号是区)符号由大小写字母、数字、下划线组成,且符号是区分
3、大小写的。分大小写的。n(2)局部标号可以用数字开头,其他的标号不能。)局部标号可以用数字开头,其他的标号不能。n(3)符号在其作用范围内必须是唯一的。)符号在其作用范围内必须是唯一的。n(4)程序中的符号不要与指令助记符或者伪操作同名。)程序中的符号不要与指令助记符或者伪操作同名。第6页,本讲稿共38页n2.常量常量n(1)十进制数,如)十进制数,如535、246。n(2)十六进制数,如)十六进制数,如0 x645、0 xff00。n(3)n_XXX,n表示表示n进制数,从进制数,从29,XXX是具体的数字。是具体的数字。例如:例如:8_3777n(4)字符常量用一对单引号括起来,包括一个单
4、字符或者)字符常量用一对单引号括起来,包括一个单字符或者标准标准C中的转义字符。例如中的转义字符。例如A、n。n(5)字符串常量由一对双引号以及由它括住的一组字符串组成,)字符串常量由一对双引号以及由它括住的一组字符串组成,包括标准包括标准C中的转义字符。中的转义字符。n如果需要使用双引号如果需要使用双引号”或字符或字符$,则必须用,则必须用”和和$代替。代替。第7页,本讲稿共38页n3.变量变量n(1)数字变量)数字变量n(2)字符串变量)字符串变量n(3)逻辑变量)逻辑变量n具体说明参考教材具体说明参考教材ARM嵌入式系统结构嵌入式系统结构与编程第与编程第153页的说明页的说明第8页,本讲
5、稿共38页n4.字符串表达式操作字符串表达式操作n(1)取符串的长度)取符串的长度LENn语法格式:语法格式:n:LEN:An功能说明:返回字符串功能说明:返回字符串A的长度。的长度。第9页,本讲稿共38页n(2)CHRn语法格式:语法格式:n:CHR:A n功能说明:将功能说明:将A(A为某一字符的为某一字符的ASCII值)值)转换为单个字符。转换为单个字符。第10页,本讲稿共38页n(3)STRn语法格式:语法格式:n:STR:A n功能说明:将功能说明:将A(A为数字量或逻辑表达式)为数字量或逻辑表达式)转换成字符串。转换成字符串。第11页,本讲稿共38页n(4)LEFTn语法格式:语法
6、格式:nA:LEFT:B n功能说明:返回字符串功能说明:返回字符串A最左端最左端B(B为返回为返回长度)长度的字符串。长度)长度的字符串。第12页,本讲稿共38页n(5)RIGHTn返回一个字符串最右端一定长度的字符串:返回一个字符串最右端一定长度的字符串:nA:RIGHT:Bn功能说明:返回字符串功能说明:返回字符串A最右端最右端B(B为返回为返回长度)长度的字符串。长度)长度的字符串。第13页,本讲稿共38页n(6)CCn用于连接两个字符串,用于连接两个字符串,B串接到串接到A串后面:串后面:nA:CC:B 第14页,本讲稿共38页n5.地址标号地址标号n1)PC相关标号相关标号 n2)
7、寄存器相关标号)寄存器相关标号 n3)绝对地址)绝对地址 第15页,本讲稿共38页n6.局部标号局部标号n局部标号的语法格式如下:局部标号的语法格式如下:nn routname第16页,本讲稿共38页n被引用的局部标号语法规则是:被引用的局部标号语法规则是:%F B A T n routnamen其中:其中:nn是局部标号的数字号。是局部标号的数字号。nroutname是当前局部范围的名称。是当前局部范围的名称。n%表示引用操作。表示引用操作。nF指示汇编器只向前搜索。指示汇编器只向前搜索。nB指示汇编器只向后搜索。指示汇编器只向后搜索。nA指示汇编器搜索宏的所有嵌套层次。指示汇编器搜索宏的所
8、有嵌套层次。nT指示汇编器搜索宏的当前层次。指示汇编器搜索宏的当前层次。第17页,本讲稿共38页72GNU环境下汇编语句与编译说明nGNU环境下环境下ARM汇编语言程序设计主要是面汇编语言程序设计主要是面对在对在ARM平台上进行嵌入式平台上进行嵌入式LINUX的开发。的开发。nGNU标准中提供了支持标准中提供了支持ARM汇编语言的汇编汇编语言的汇编器器as(arm-elf-as)、交叉编译器、交叉编译器gcc ld(arm-elf-gcc)和链接器和链接器ld(arm-elf-ld)。第18页,本讲稿共38页721 GNU环境下环境下ARM汇编语句格式汇编语句格式nGNU环境下环境下ARM汇编
9、语言语句格式如下:汇编语言语句格式如下:nlabel:instructioncommentnlabel:directivecommentnlabel:pseudo-instruction comment第19页,本讲稿共38页722 GNU环境下环境下ARM汇编程序编译汇编程序编译n(1)预处理预处理nGNU汇编器汇编器as的内部预处理包括:移除多余的内部预处理包括:移除多余的间隔符代码中的所有注释,并将字符常量的间隔符代码中的所有注释,并将字符常量转换为数字值。它不作宏处理和文件包含处转换为数字值。它不作宏处理和文件包含处理,但这些事情可以交由理,但这些事情可以交由gcc编译器去做,编译器去
10、做,文件包含可以用文件包含可以用.include伪指令来实现。伪指令来实现。第20页,本讲稿共38页n(2)注释注释nGNU ARM Assembly可识别的注释方式有:可识别的注释方式有:nC风格多行注释符风格多行注释符/*.*/nGNU单行注释符单行注释符“”或或“#”。n(3)符号符号n与与C语言基本一致,符号名由语言基本一致,符号名由字母、数字以及字母、数字以及_、和、和.组成,大小写敏感组成,大小写敏感。第21页,本讲稿共38页n2段与重定位段与重定位n链接器链接器ld用于把多个目标文件合并为一个可执行用于把多个目标文件合并为一个可执行文件。文件。n汇编器汇编器as生成的目标文件都假
11、定从地址生成的目标文件都假定从地址0开始,开始,ld为其指定最终的地址。为其指定最终的地址。n链接器链接器ld把目标文件中的每个把目标文件中的每个section都作为一个都作为一个整体,为其分配运行的地址整体,为其分配运行的地址 第22页,本讲稿共38页第23页,本讲稿共38页n3符号说明符号说明n(1)labelnlable后面要带冒号后面要带冒号:,例如:,例如:_start:b reset_handler。第24页,本讲稿共38页n(2)给符号赋值)给符号赋值n(3)符号名)符号名n具体说明请参阅教材具体说明请参阅教材ARM嵌入式系统结构嵌入式系统结构与编程第与编程第158页页第25页,
12、本讲稿共38页73ARM汇编语言程序设计规范汇编语言程序设计规范n汇编器预定义的寄存器名称汇编器预定义的寄存器名称 nARM汇编语言程序设计规范汇编语言程序设计规范第26页,本讲稿共38页汇编器预定义的寄存器名称汇编器预定义的寄存器名称 第27页,本讲稿共38页ARM汇编语言程序设计规范汇编语言程序设计规范 n要提高软件质量必须降低编码阶段的错误率,要提高软件质量必须降低编码阶段的错误率,这需要制定详细的这需要制定详细的软件编程规范软件编程规范,并培训每,并培训每一位程序员,最终的结果可以把编码阶段的一位程序员,最终的结果可以把编码阶段的错误降至错误降至10%左右,同时会大大的缩短测试左右,同
13、时会大大的缩短测试时间。时间。第28页,本讲稿共38页n1.符号命名规则符号命名规则n2注释注释n3程序设计的其它要求程序设计的其它要求n这三方面的规范要求请参阅教材这三方面的规范要求请参阅教材ARM嵌嵌入式系统结构与编程入式系统结构与编程 159页页第29页,本讲稿共38页74ARM汇编语言程序设计实例解汇编语言程序设计实例解n在嵌入式系统编程中,与硬件直接相关的最在嵌入式系统编程中,与硬件直接相关的最底层代码要用汇编语言来编写底层代码要用汇编语言来编写;n本节中所设计的实例,意在帮助读者对嵌入本节中所设计的实例,意在帮助读者对嵌入式汇编语言程序设计打下坚实的基础,同时式汇编语言程序设计打下
14、坚实的基础,同时也为嵌入式硬件底层编程做准备。也为嵌入式硬件底层编程做准备。第30页,本讲稿共38页示例解析示例解析n求一个数的阶乘(求一个数的阶乘(64位结果)位结果)nMOVR8,#20低低32位初始化为位初始化为20nMOVR9,#0高位初始化为高位初始化为0nSUBR0,R8,#1 初始化计数器初始化计数器nLoop:nMOVR1,R9暂存高位值暂存高位值nUMULLR8,R9,R0,R8R9:R8=R0*R8nMLAR9,R1,R0,R9R9=R1*R0+R9nSUBSR0,R0,#1计数器递减计数器递减nBNELoop计数器不为计数器不为0继续循环继续循环第31页,本讲稿共38页n
15、先对内存地址先对内存地址0 x3000开始的开始的100个字内存单个字内存单元填入元填入0 x100000010 x10000064字数据,然字数据,然后将每个字单元进行后将每个字单元进行64位累加结果保存于位累加结果保存于R9:R8。(。(R9中存放高中存放高32位)位)第32页,本讲稿共38页n_start:nMOVR0,#0X3000初始化寄存器初始化寄存器nMOVR1,#0X10000001nMOVR2,#100nloop_1:第一次循环赋值第一次循环赋值nSTRR1,R0,#4nADDR1,R1,#1nSUBSR2,R2,#1nBNEloop_1第33页,本讲稿共38页nMOVR0,
16、#0X3000nMOVR2,#100nMOVR9,#0nMOVR8,#0nloop_2:第二次循环累加第二次循环累加nLDRR1,R0,#4nADDSR8,R1,R8R8=R8+R1,进位影响标志位进位影响标志位nADCR9,R9,#0R9=R9+C,C为进位为进位nSUBSR2,R2,#1nBNEloop_2第34页,本讲稿共38页在在ARM集成开发环境下编程:集成开发环境下编程:nAREA Fctrl,CODE,READONLY;声明代码声明代码FctrlnENTRY;标识程序入口标识程序入口nCODE32;声明声明32 位位ARM 指令指令nnStopnBStopnEND;文件结束文件结
17、束第35页,本讲稿共38页 下面的代码段将寄存器下面的代码段将寄存器R0中的数据存储方式转换成另中的数据存储方式转换成另一种存储方式。指令执行前,一种存储方式。指令执行前,R0中的数据存储方式为:中的数据存储方式为:R0=A,B,C,D;指令执行后为:指令执行后为:R0=D,C,B,A EOR R1,R0,R0,ROR#16 ;BIC R1,R1,#0 xFF0000 ;MOV R0,R0,ROR#8 ;EOR R0,R0,R1,LSR#8 ;第36页,本讲稿共38页n其余实例分请参阅其余实例分请参阅教材教材ARM嵌入式系统结嵌入式系统结构与编程构与编程 7.4节节第37页,本讲稿共38页第第7章章 汇编语言程序设计汇编语言程序设计The End第38页,本讲稿共38页