嵌入式接口技术课件3

上传人:我** 文档编号:117868512 上传时间:2019-12-11 格式:PPT 页数:100 大小:550KB
返回 下载 相关 举报
嵌入式接口技术课件3_第1页
第1页 / 共100页
嵌入式接口技术课件3_第2页
第2页 / 共100页
嵌入式接口技术课件3_第3页
第3页 / 共100页
嵌入式接口技术课件3_第4页
第4页 / 共100页
嵌入式接口技术课件3_第5页
第5页 / 共100页
点击查看更多>>
资源描述

《嵌入式接口技术课件3》由会员分享,可在线阅读,更多相关《嵌入式接口技术课件3(100页珍藏版)》请在金锄头文库上搜索。

1、嵌入式接口技术第3章 汇编语言程序设计 北京农学院计算机与 信息工程学院 王玉洁 第3章汇编语言程序设计 知识点:汇编指令、语句格式、程序格式、程序 设计方法 重点:汇编指令、程序设计方法 使用汇编语言编写程序能够直接利用计算机硬件系 统的特性,同时也能直接使用CPU指令系统和系统 提供的各种寻址方式,编制出高质量的程序。 用汇编语言编写的源程序在交付计算机执行之前, 需要翻译成机器可直接识别和运行的代码,这个翻 译过程称为汇编,完成汇编任务的程序称为汇编程 序。 3.1 ARM汇编语言程序设计 汇编指示命令在源程序中的作用是为完成 汇编程序作各种准备工作的,这些汇编指 示命令仅在汇编过程中起

2、作用,一旦汇编 结束,汇编指示命令的使命就完成。 一个完整的ARM汇编程序就是由机器指令 、汇编指示命令和宏指令组成。 3.1.1 ARM汇编指示命令 1. 符号定义语句 GBLA、GBLL、GBLS LCLA、LCLL、LCLS SETA、SETL、SETS RLIST GBLATest1 Test1SETA0 xaa GBLLTest2 Test2SETLTRUE GBLSTest3 Test3SETS“Testing” LCLATest4 Test4SETA0 xaa LCLLTest5 Test5SETLTRUE LCLSTest6 Test6SETS“Testing” Reglist

3、 RLIST R0-R5,R8,R10 STMFD SP! , Reglist 说明:将寄存器列表名称定义为Reglist,可在 ARM指令LDM/STM中通过该名称访问寄存器列 表。保存寄存器列表Reglist 2. 数据定义语句 声明一个文字池:LTORG 分配一段字节的内存单元,并用指定的数据初 始化:DCB 分配一段字的内存单元,并用指定的数据初始 化:DCD和DCDU 分配一段双字的内存单元,并用64位整数数据 初始化:DCQ和DCQU 分配一段半字的内存单元,并用指定的数据初 始化:DCW和DCWU x1 DCB 5 x2 DCDU 0 x30000010 x3 DCW 0 xff

4、f1 x4 DCWU 0 xffff x5 DCQ 0 x3333333333333333 3. 汇编控制语句 条件汇编控制:IF、ELSE和ENDIF 重复汇编:WHILE和WEND 宏:MACRO和MEND、MEXIT 、DCI 宏定义: MACRO $labelxmac $p1,$p2 $label.loop1 BGE$label.loop1 $label.loop2 BL$p1 BGT$label.loop2 ADR$p2 MEND 宏调用: abc xmac subr1,de 结果: abcloop1 BGEabcloop1 abcloop2 BL subr1 BGTabcloop2

5、 ADRde 4. 其他常用的汇编指示命令 边界对齐:ALIGN 段定义:AREA 指令集定义:CODE16和CODE32 汇编结束:END 程序入口:ENTRY 常量定义:EQU 声明一个符号可以被其他文件引用:EXPORT和 GLORBAL 声明一个外部符号:IMPORT和EXTERN 3.1.2 ARM汇编语句的格式 标号 ;注释 规定: 所有标号必须在一行的顶格写,而所有指令均 不能顶格写 标识符大小写敏感 对于变量的设置,常量的定义,其标识符必须 在一行的顶格书写 符号(symbol)可以代表地址(address) 、变量(variable)和数字常量(numeric constan

6、ts)。当符号代表地址时,又称为 标号(label) 命名规则:(P105) 变量:使用GBLA、GBLL、GBLS汇编指 示命令声明全局变量,使用LCLA、LCLL 、LCLS汇编指示命令声明局部变量 数字常量: 标号是表示程序中的指令或者数据地址的 符号 基于PC的标号 基于寄存器的标号 绝对地址 数字表达式: 算术运算符 移位运算符 按位逻辑运算符 逻辑表达式: 关系运算符 逻辑运算符 字符串表达式: 注意:特殊符号$和” 操作符: :LEN:X :CHR:M :STR:X X:LEFT:Y X:RIGHT:Y X:CC:Y 其他表达式和运算符: BASE INDEX $ ? DEF 3

7、.1.3 ARM汇编程序格式 分段 一个或多个代码段 零个或多个数据段 AREA Init,CODE,READONL Y ENTRY Start LDR R0,=0 x3ff500 LDR R1,0 xff STR R1,R0 END 3.1.4 ARM汇编程序结构 顺序 分支 循环 MOV r0,#10 loop SUBS r0,r0,#1 BNE loop 子程序 子程序 AREAInit,CODE, READONLY ENTRY Start LDR R0,=0 x3FF5000 LDR R1,0 xFF STRR1,R0 LDR R0,=0 x3FF5008 LDR R1,0 x01 S

8、TRR1,R0 BLPRINT_TEXT PRINT_TEXT MOVPC,LR END 3.1.5 ARM汇编程序示例 start MOV r0, #3 MOV r1, #3 MOV r2, #2 BL arithfunc stop MOV r0, #0 x18 LDR r1, =0 x20026 SWI 0 x123456 arithfunc CMP r0, #num MOVHS pc, lr ADR r3, JumpTable ADR r3, JumpTable LDR pc, r3,r0,LSL#2 JumpTable DCD DoAdd DCD DoSub DoAdd ADD r0,

9、 r1, r2 MOV pc, lr DoSub SUB r0, r1, r2 MOV pc,lr 3.2 80X86汇编语言 3.2.1 程序的汇编、连接和运行 一个汇编语言程序从写出到最终执行简要的过程如下 : 第一步:编写汇编源程序。使用文本编辑器(如: Edit、记事本等)编写汇编源程序。源文件名必须以 “.asm”为扩展名。 第二步:对源程序进行编译连接。使用汇编语言编译 程序对源程序进行编译,产生目标文件;再用连接程 序对目标文件进行连接,生成可在操作系统中直接运 行的可执行文件。 MASM是Microsoft的汇编编译器(编译程序), LINK是它的连接器(连接程序)。源程序经过

10、汇编 生成一个对象文件和一个列表文件,以及其它一些对 于程序员有用的文件。对象文件的后缀名为“.obj”。 对象文件被输入到LINK程序中,得到以“.exe”结尾 的可执行文件。“.exe”文件可以被处理器执行。在把 “.obj”文件输入到LINK之前,必须更正所有由编译 器检查出的语法错误。 第三步:执行可执行程序(“.exe”程序)。 3.2.2 汇编指令的构成 汇编指令由以下四个字段组成: 标签:操作码操作数;注释 (方括号表明其中的指令组成内容是可选的。编写 程序时不要加上方括号。) (1)标签字段:程序可以通过名称来指代某一 行代码。用于伪指令的标签无需以冒号结尾,而用 于生成指令的

11、操作码的标签必须以冒号结尾。 (2)操作码(指令)字段:指令执行的具体操作。 如例题4-1:MOV AL,DATA1 MOV是操作码, ADD AL,BL指令中ADD也是操作码。 (3)操作数: 它们与操作码共同组成指令。 (4)注释字段:以分号“;”作为开始。 注释可位于一行语句的尾部,也可单独成为一行 。注释会被编译器忽略,但是它们对于编程人员 来说却是不可缺少的。 尽管注释不是必须的,但是有了它才能便于他人 阅读和理解程序。 例 3-1: ;简化段定义格式 .MODEL SMALL .STACK 64 .DATA DATA1 DB 52H DATA2 DB 29H SUM DB ? .C

12、ODE MAIN PROC FAR START: MOV AX,DATA; MOV DS,AX;数据段寄存器赋值 MOV AL,DATA1;取DATA1到AL中 MOV BL,DATA2;取DATA2到BL中 ADD AL,BL;DATA1+DATA2存于AL中 MOV SUM,AL;保存结果 MOV AH,4CH ;返回 INT 21H MAIN ENDP END START 3.2.3 源程序和伪指令 1. 汇编指令和伪指令 在汇编语言源程序中,包括两种指令:汇编指令和伪 指令。 汇编指令是有对应的机器码的指令,诸如ADD和 MOV等指令,这些汇编语言的助记符指令每一条都 有对应的机器指令

13、,最终被CPU所执行。 伪指令没有对应的机器指令,只被汇编器使用。伪指 令的作用是告诉汇编器如何把汇编指令翻译为机器代 码,在例题3-1中的DB、END和ENDP都是伪指令。 2. 模式定义 例题3-1中,第一条语句是MODEL(模式)伪指令 。这条伪指令告诉编译器选择存储模式的大小。存储 模式的大小主要取决于程序设计的规模,下列是可供 选择的部分存储模式: .MODEL SMALL ;所有数据放在一个64KB的数据段 内,所有代码放在另一个64KB的代码段。 .MODEL MEDIUM ;数据存放在一个64KB数据段内 ,代码使用多个段。 .MODEL COMPACT ;所有代码放在一个64

14、KB的 代码段内,数据放在多个段。 .MODEL LARGE ; 代码和数据都可用多个 段,所以数据和代码都可以远访问。 .MODEL TINY;所有数据和代码放在一个 64KB段内。程序可以写成.COM 文件形式,COM 程序必须从0100H的存储单元开始。 其中SMALL是汇编语言程序中最为常用的存储模 式之一。对于本书中的程序来说它就足够了。 SMALL模式把64KB的存储区用于代码,把64KB 的存储区用于数据。另外,TINY模式不能用于本 章中介绍的简化的段定义。 3. 简化段定义 80 x86有四个段寄存器:CS(代码段)、DS(数 据段)、SS(堆栈段)和ES(附加段)。 汇编语言中的各条语句都必须对应于上述的某个 段。 段定义格式可采用简化段定义和完整段定义两种 格式。 程序通常由三个段组成:堆栈段、数据段和代码段。 .STACK;堆栈段的开始标志 .DATA;数据段的开始标志 .CODE;代码段的开始标志 把汇编语言程序划为各个段

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号