嵌入式原理及接口技术课件ch4-第2版-嵌入式系统原理及接口技术.ppt
《嵌入式原理及接口技术课件ch4-第2版-嵌入式系统原理及接口技术.ppt》由会员分享,可在线阅读,更多相关《嵌入式原理及接口技术课件ch4-第2版-嵌入式系统原理及接口技术.ppt(89页珍藏版)》请在文库网上搜索。
1、本章重点本章重点:ARM汇编器提供的汇编语言特性,包括行格式、预定义名和内建变量、伪指令、符号、指示符、表达式和操作符等,以及它们的使用;ARM汇编语言编程基础,包括调用子程序、条件执行、装入常数和地址到寄存器、装入和存储多个寄存器、多路分支等内容,以及对应的程序代码。嵌入式系统原理及接口技术(第2版)1 4.1 ARM汇编语言特性 4.1.1 行格式、预定义名和内建变量 行格式在ARM汇编语言模块中,源代码行的一般格式是:symbolinstruction|directive|pseudo_instruction;comment也就是:符号 指令|指示符|伪指令;注释嵌入式系统原理及接口技术
2、(第2版)2 n上述行格式中用大括号括起来的三部分是可选的。如果一行中没有symbol,指令|指示符|伪指令不能从第1列位置开始,指令|指示符|伪指令前面必须放置空格或Tab(制表符)字符。嵌入式系统原理及接口技术(第2版)3 n每一条指令的助记符可以使用全部大写或全部小写字符,但不能在同一条指令的助记符中大、小写混用。指示符必须大写。指令中每一个寄存器名能够全部大写或全部小写,但不能大、小写混用。n行格式中symbol通常是标号(label),在指令或伪指令前它总是标号,在某些指示符前它是表示变量或常量的符号(symbol)。n行格式中symbol必须从第一列开始,不能含任何如空格或Tab的
3、字符,详见本节符号命名规则部分。嵌入式系统原理及接口技术(第2版)4 预定义寄存器和协处理器名 预定义寄存器名 预定义程序状态寄存器名 预定义浮点寄存器名 预定义协处理器名和协处理器寄存器名 内建变量n内建变量(built in variables)见教材表4.1,它们是由ARM汇编器定义过的。内建变量不能用SETA、SETL或SETS指示符设置,它们能被用在表达式或条件中,如:IF ENDIAN=“big”嵌入式系统原理及接口技术(第2版)5 4.1.2 ARM伪指令与Thumb伪指令 nARM汇编器支持ARM伪指令和Thumb伪指令,在汇编时把它们翻译成适当的ARM或Thumb指令组合。n
4、全部ARM和Thumb伪指令见教材表4-2。Thumb伪指令在表中用(Thumb)标出。n虽然表4-2中Thumb伪指令ADR、LDR和NOP与ARM伪指令ADR、LDR和NOP格式完全相同,但相同的伪指令出现在程序中Thumb代码区,汇编器识别为Thumb伪指令;出现在ARM代码区汇编器识别为ARM伪指令。嵌入式系统原理及接口技术(第2版)6 ADR ARM伪指令n ADR伪指令装入一个相对程序或相对寄存器的地址到一个寄存器。格式 ADRcondition register,expression嵌入式系统原理及接口技术(第2版)7 使用n使用中,ADR总是被汇编成一条指令。汇编器试图产生一条
5、ADD或SUB指令,装入地址。如果不能用一条指令构造出地址,则产生错误信息,汇编失败。n如果expression是相对程序的,计算产生的地址必须与ADR伪指令在同一个代码区域。使用举例Test1 MOV r1,#0 ADR r2,Test1;产生指令SUB r2,pc,#0 xC嵌入式系统原理及接口技术(第2版)8 ADRL ARM伪指令n ADRL伪指令装入一个相对程序或相对寄存器的地址到一个寄存器。与ADR伪指令功能相似,但ADRL比ADR能装入更大的地址范围,原因是ADRL产生两条数据处理指令。格式 ADRLcondition register,expression嵌入式系统原理及接口技
6、术(第2版)9 使用n使用中,ADRL总是被汇编成2条指令。如果汇编器不能以2条指令构造出地址,则产生错误信息,汇编失败。n如果expression是相对程序的,它必须计算产生一个与ADRL伪指令在同一个代码区域的地址,否则在随后的连接时,地址可能出了范围。使用举例start MOV r0,#10 ADRL r4,start+60000 ;产生指令ADD r4,pc,#0 xe800 ;ADD r4,r4,#0 x254嵌入式系统原理及接口技术(第2版)10 3.LDR ARM伪指令nLDR伪指令装入一个32位常数值或一个地址到一个寄存器。格式 LDRcondition register,=e
7、xpression|label-expression 使用n使用LDR伪指令有两个主要目的,一是当一个立即数的值由于超了范围,不能用MOV和MVN指令装入到一个寄存器时,用LDR伪指令产生一个文字池常数;二是装入一个相对程序或外部的地址到一个寄存器。嵌入式系统原理及接口技术(第2版)11 使用举例 LDR r0,=0 x1ff ;装入0 x1ff到r0 LDR r1,=label ;装入label地址到r1 4.NOP ARM伪指令n对NOP伪指令,汇编器产生什么也不操作的ARM指令:MOV r0,r0。格式 NOP嵌入式系统原理及接口技术(第2版)12 5.ADR Thumb伪指令nADR伪
8、指令装入一个相对程序或相对寄存器的地址到一个寄存器。格式 ADR register,expression 使用n使用中,在Thumb状态,ADR只能产生字对齐的地址。要使用ALIGN指示符去确认expression是字对齐的。n若表达式是相对程序的,必须计算产生一个与ADR伪指令在同一个代码区域的地址。嵌入式系统原理及接口技术(第2版)13 使用举例 ADR r3,testexml ;产生指令ADD r3,pc,#nn ;code ALIGNtestexm1 DCW 1,2,3,4嵌入式系统原理及接口技术(第2版)14 6.LDR Thumb伪指令nLDR伪指令装入一个32位常数值或一个地址到
9、一个低寄存器中。格式 LDR register,=expression|label-expression 使用n使用LDR伪指令有两个主要目的,一是当一个立即数的值由于超出MOV指令的范围,不能装入一个寄存器时,产生文字池常数;二是装入一个相对程序或外部的地址到一个寄存器。使用举例 LDR r0,=0 x0ffe ;装入0 x0ffe到r0 LDR r1,=labeladdr ;装入labeladdr地址到r1嵌入式系统原理及接口技术(第2版)15 7.MOV Thumb伪指令n MOV伪指令传送一个低寄存器的值到另一个低寄存器(r0-r7)。而MOV指令不能传送一个低寄存器的值到另一个低寄存
10、器。格式 MOV Rd,Rs 使用n在使用中,汇编器将MOV伪指令变成带立即数的ADD指令,指令中立即数的值为0。使用举例 MOV Rd,Rs;产生指令ADD Rd,Rs,#0嵌入式系统原理及接口技术(第2版)16 8.NOP Thumb伪指令n对NOP伪指令,汇编器产生什么也不操作的Thumb指令:MOV r8,r8。格式 NOP嵌入式系统原理及接口技术(第2版)17 4.1.3 符号(symbols)与指示符(directives)n使用符号能够代表变量、地址和数值常数。符号代表地址时,也称为标号。符号命名规则 符号命名遵守以下规则:在符号名中可以使用大写字母、小写字母、数字字符或下划线字
11、符。除了局部标号外,不允许在符号名的第一个字符位置使用数字字符。符号名中对大、小写字母是敏感的。在符号名中所有的字符是有意义的。嵌入式系统原理及接口技术(第2版)18 在它们的作用范围内,符号名必须是唯一的。符号名必须不使用内建变量名、预定义寄存器名和预定义协处理器名。符号名应该不使用与指令助记符或指示符相同的名字。如果需要在符号名中使用更大范围的字符,使用如下举例的格式为符号名划界线:|C$code|其中两边的两条竖线不是符号的一部分,只用于为符号名划界线,它们之间不允许使用竖线、分号和换行符。嵌入式系统原理及接口技术(第2版)19 变量(variables)变量有三种类型:数值 逻辑 串
12、变量的类型不能被改变,变量的值可以被改变。嵌入式系统原理及接口技术(第2版)20 汇编时串变量的替换n可以使用串变量作为汇编语言的一整行或一行的一部分。如果在某一位置使用的串变量带有$作为前缀,则汇编器用串变量的值替换串变量。$字符通知汇编器,在检查一行的语法前替换源代码行的串。n使用.标记变量名结束,如果变量名后有跟随的字符,替换后跟随在串变量的值后,标号(labels)相对程序的标号 相对寄存器的标号 绝对地址嵌入式系统原理及接口技术(第2版)21 局部标号(local labels)n局部标号使用099范围内的一个数,可以有选择地在其后跟随一个表示当前范围的名字。n局部标号用在指令中,指
13、出分支的目标处。局部标号格式为:nroutname嵌入式系统原理及接口技术(第2版)22 常量n常量由数值常量、串常量、布尔常量和字符常量组成。数值常量 数值常量在汇编语言中采用以下三种形式:十进制数,例如234;十六进制数,例如0 x7b或0 x7B;n进制数,格式为n_xxx,n是29之间的一个基数,xxx是这个基数下的数值,例如8_375,表示基数为8(八进制数),数值为375。串常量 布尔常量 字符常量 嵌入式系统原理及接口技术(第2版)23 使用举例:anum SETA 3500 ;假定anum在以前声明过addr DCD 0 x00ff ;十六进制数 DCD 0 x00FF ;十六
14、进制数 DCD 2_11000011 ;二进制数bnum SETA 8_74007 ;假定bnum在以前声明过,八进制数 LDR r1,=A ;字符嵌入式系统原理及接口技术(第2版)24 7.指示符(directives)n汇编器提供指示符用来支持:定义数据结构和为数据分配空间;文件分隔成逻辑上的一个或多个区域;错误报告和汇编列表控制;符号定义;条件汇编和重复汇编,以及在一个文件中包含辅助文件。嵌入式系统原理及接口技术(第2版)25 4.1.4 与代码有关的指示符 AREA、ENTRY和END指示符使用程序举例 【例4.1】用ARM汇编语言编写的汇编语言模块举例。(程序见教材)定义区域的ARE
15、A指示符 声明汇编程序入口点的ENTRY指示符 应用程序执行 应用程序终止 源程序结束的END指示符嵌入式系统原理及接口技术(第2版)26 CODE32、CODE16指示符使用程序举例n用于选择指令集的CODE16和CODE32指示符 格式 格式分别是:CODE16 CODE32 使用n在ARM状态当使用BX指令分支到Thumb指令时,使用CODE16。CODE16放置在分支目标处代码的前面。当从Thumb状态分支到ARM指令时,使用CODE32。CODE32放置在分支目标处代码的前面。嵌入式系统原理及接口技术(第2版)27 使用举例n使用举例1:这个例子给出如何从ARM指令分支到Thumb指
16、令。AREA ARMtoThumb,CODE,READONLY ;这个区域开始于ARM状态 ADR r1,test1+1 ;装入地址,设置最低位为1 BX r1 ;分支并且改变指令集 CODE16 ;跟随指令为 Thumb指令test1 MOV r0,#20;Thumb指令嵌入式系统原理及接口技术(第2版)28 【例4.2】(程序见教材)嵌入式系统原理及接口技术(第2版)29 3.禁止浮点运算的NOFP指示符n NOFP指示符表明在一个汇编语言源文件中不接受浮点指令。格式 NOFP 使用n使用NOFP指示符确认在软件或目标硬件不支持浮点指令的情况下,程序中没有使用浮点指令。嵌入式系统原理及接口
17、技术(第2版)30 4.定义局部标号使用范围的ROUT指示符nROUT指示符标记局部标号使用范围的界线。格式 name ROUT 使用n在使用中,ROUT指示符限制了局部标号的使用范围。这使得程序员容易避免偶然引用一个错误的标号这种情况的发生。如果不存在ROUT指示符,局部标号的使用范围是整个AOF区域。如果存在ROUT指示符,局部标号的使用范围在两个ROUT之间。n使用name选项用于保证每次引用正确的标号。如果标号名或引用标号名与ROUT指示符前面的名字不匹配,汇编器产生错误信息,汇编失败。嵌入式系统原理及接口技术(第2版)31 使用举例(见教材)嵌入式系统原理及接口技术(第2版)32 4
18、.1.5 与数据定义有关的指示符 在代码中使用数据的DATA指示符n DATA指示符通知汇编器,这个标号是在代码中的数据标号,这意味着标号是在代码段中的数据的地址。格式 label DATA 使用n使用时,如果需要在Thumb代码区域用到某一个数据定义指示符,如DCD、DCB和DCW,定义数据时,必须使用DATA指示符。嵌入式系统原理及接口技术(第2版)33 使用举例 AREA test,CODEThumb_Code ;code ;code MOV pc,lr Thumb_Data DATA DCB 2,5,8嵌入式系统原理及接口技术(第2版)34 分配存储器字节的DCB指示符nDCB也可以用
19、=指示符代替。nDCB指示符分配一个或多个存储器中的字节,并且定义初始运行时的存储器内容。格式 label DCB expression,expression 使用n如果需要在Thumb代码中用DCB定义带标号的数据,必须使用DATA指示符。n如果DCB后跟随着指令,应该使用ALIGN指示符去确认指令存放是边界对齐的。使用举例(见教材)嵌入式系统原理及接口技术(第2版)35 分配存储器半字的DCW和DCWU指示符nDCW指示符分配一个或多个存储器中的半字,以2字节边界对齐,定义初始运行时的存储器内容。nDCWU与DCW的区别是:DCWU不要求以2字节边界对齐。格式 格式分别是:label DC
20、W expression,expression label DCWU expression,expression嵌入式系统原理及接口技术(第2版)36 使用n 使用时,如果需要在Thumb代码中用DCW(DCWU)定义一个带标号的数据,必须使用DATA指示符。n如果DCW(DCWU)后跟随着指令,要使用ALIGN指示符,确认指令是字边界对齐的。使用举例(见参考书)嵌入式系统原理及接口技术(第2版)37 分配存储器字的DCD和DCDU指示符nDCD也可以用&指示符代替。nDCD指示符分配1个或多个存储器中的字,4字节边界对齐,并且定义初始运行时的存储器内容。nDCDU与DCD的区别是:DCDU不
21、要求4字节边界对齐。格式 格式分别是:label DCD expression,expression label DCDU expression,expression嵌入式系统原理及接口技术(第2版)38 使用n使用时,如果需要在Thumb代码中用DCD(DCDU)定义一个带标号的数据,必须使用DATA指示符。n如果DCDU后面跟随着代码,需要使用ALIGN指示符,确认指令是字边界对齐的。n为了获得4字节边界对齐,如果需要,DCD指示符在第1个定义的字前,会插入最多3字节作为填充字节。nDCDU不插入填充字节。使用举例(见教材)嵌入式系统原理及接口技术(第2版)39 5.分配数据区并使其初值为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 原理 接口 技术 课件 ch4 系统