微机原理与接口技术 教学课件 ppt 作者 吉海彦 第04章 汇编语言程序设计

上传人:E**** 文档编号:89507535 上传时间:2019-05-26 格式:PPT 页数:69 大小:273.50KB
返回 下载 相关 举报
微机原理与接口技术 教学课件 ppt 作者 吉海彦 第04章  汇编语言程序设计_第1页
第1页 / 共69页
微机原理与接口技术 教学课件 ppt 作者 吉海彦 第04章  汇编语言程序设计_第2页
第2页 / 共69页
微机原理与接口技术 教学课件 ppt 作者 吉海彦 第04章  汇编语言程序设计_第3页
第3页 / 共69页
微机原理与接口技术 教学课件 ppt 作者 吉海彦 第04章  汇编语言程序设计_第4页
第4页 / 共69页
微机原理与接口技术 教学课件 ppt 作者 吉海彦 第04章  汇编语言程序设计_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《微机原理与接口技术 教学课件 ppt 作者 吉海彦 第04章 汇编语言程序设计》由会员分享,可在线阅读,更多相关《微机原理与接口技术 教学课件 ppt 作者 吉海彦 第04章 汇编语言程序设计(69页珍藏版)》请在金锄头文库上搜索。

1、第四章 汇编语言程序设计,第一节 汇编语言源程序 汇编语言是用指令的助记符、符号地址、标号和伪指令等来书写程序 一、汇编语言源程序的结构 一个完整的汇编语言源程序通常由若干个逻辑段(SEGMENT)组成,包括代码段、数据段、附加段和堆栈段,它们分别映射到存储器中的物理段上,例4-1 两个字(A6B8H, 206DH)相加的完整的汇编语言程序,DATA SEGMENT ;定义数据段 DATA1 DW 0A6B8H ;定义被加数 DATA2 DW 206DH ;定义加数 SUM DW 2 DUP(?) ;定义和 DATA ENDS ;数据段结束 CODE SEGMENT ;定义代码段 ASSEME

2、 CS:CODE,DS:DATA ;段寄存器说明 START: MOV AX,DATA MOV DS,AX ;初始化DS LEA SI,SUM ;存放结果的偏移地址送SI MOV AX,DATA1 ;取被加数 ADD AX,DATA2 ;两数相加 MOV SI,AX ;和送入SUM MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;代码段结束 END START ; 源程序结束,二、汇编语言语句类型及格式 指令性语句的格式: 标号: 前缀 操作码 操作数,操作数 ;注释 例如指令性语句: START: MOV AX,DATA ;将立即数DATA送累加器AX 指示性语句的

3、格式: 名字 伪操作 操作数,操作数, ;注释 例如指示性语句: DATA1 DB 56H,78H,9AH ;定义字节型数据,“DB”是伪操作,指令性语句与指示性语句在格式上的区别:, 指令性语句中的“标号”表示指令的符号地址,其后面通常要加上“:”。 指示性语句中的“名字”通常表示变量名、段名和过程名等,其后不加“:”。名字在多数情况下表示的是变量名,用来表示存储器中一个数据区的地址。 指令性语句中的操作数最多为两个操作数,也可以没有操作数。 而指示性语句中的操作数可根据需要有多个,当操作数有不止一个时,相互之间用逗号隔开。,汇编语言语句中的操作数,三、数据项及表达式 操作数可以是寄存器、存

4、储器单元或数据项。而数据项又可以是常量、标号、变量和表达式 1常量 二进制常量 十进制常量 十六进制常量 字符串常量,2标号 指令的标号是由编程者确定的,它不能与指令助记符或伪指令重名,也不允许由数字开头,标号的字符个数不超过31个。 指令性语句中的标号代表存放一条指令的存储单元的符号地址,其后通常加一个冒号。,标号具有3种属性:段、偏移量和类型。 标号的段属性是就是标号所在段的段地址。 标号的偏移量就是标号所在段的起始地址到定义该标号的地址之间的字节数(即偏移地址)。偏移量是一个16位无符号数。 标号的类型有NEAR和FAR两种。前一种标号称为近标号,只能在段内被引用,地址指针为2个字节。后

5、一种标号称为远标号,可以在其他段被引用,地址指针为4个字节。,3变量 变量名由字母开头,长度不超过31个字符。变量是存储器中某个数据区的名字,因为数据区中的内容是可以改变的,因此变量的值也可以改变。变量在指令中可以作为存储器操作数引用。 变量也具有3种属性,即:段、偏移量和类型。 变量的段属性就是它所在段的段地址。因为变量一般在存储器的数据段或附加段中,所以变量的段值在DS或ES寄存器中。 变量的偏移量属性是该变量所在段的起始地址到变量地址之间的字节数。 变量的类型有BYTE(字节)、WORD(字)、DWORD(双字)、QWORD(四字)、TBYTE(十个字节)等,表示数据区中存取操作对象的大

6、小。,使用变量时需注意以下两点: 变量的类型与指令的要求要相符。例如指令MOV AX,VAR中,要求VAR必须定义为字类型变量。 在定义变量时,变量名对应的是数据区的首地址。如果数据区中有多个数据,则对其他数据操作时,需修改地址。例如: BUFFER DB 56H,78H,9AH MOV AL,BUFFER+2 ;将9AH送(AL),4表达式 表达式是由常数、操作数、操作符和运算符组合而成 表达式中常用的运算符有以下几种: 算术运算符 算术运算符有(加)、(减)、*(乘)、/(除)、MOD(取余)等 逻辑运算符 逻辑运算符包括AND(与)、OR(或)、NOT(非)、XOR(异或) 例如:指令M

7、OV AL,0A6H XOR 0CEH等价于MOV AL,68H, 关系运算符 关系运算符包括EQ(等于)、NE(不等于)、LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于)。 关系运算符连接的必须是两个数值,或同一段中的两个存储单元地址。关系运算符的运算结果是一个逻辑值,当关系不成立(为假)时,结果为0;当关系成立(为真)时,结果为0FFFFH, 取值运算符 取值运算符用来分析一个存储器操作数的属性 OFFSET 利用运算符OFFSET可以得到一个标号或变量的偏移地址。例如: MOV SI,OFFSET DATA1 ;将变量DATA1的偏移地址送SI 该指令等同于以下指令: LE

8、A SI,DATA1 SEG 利用运算符SEG可以得到一个标号或变量的段地址。例如: MOV AX,SEG DATA ;将变量DATA的段地址送AX MOV DS,AX ;(DS)(AX), 属性运算符 属性运算符PTR用来指定其后的存储器操作数的类型。 例如:MOV AX,WORD PTRSI ;将SI和SI+1所指向的两个存储单元送AX 段超越运算符 运算符“:”跟在某个段寄存器名(DS、ES、SS或CS)之后表示段超越,用来指定一个存储器操作数的段属性。 例如:MOV AX,ES:BX ;将ES段中由BX指向的字操作数送(AX),第二节 伪指令,一、数据定义伪指令 数据定义伪指令用来定义

9、一个变量的类型,给存储器赋初值,或给变量分配存储空间 1定义字节(DB) DB(Define Byte)用来定义一个变量,并初始化其内存单元。 格式:变量名 DB 表达式 表达式可以是以下情况之一: 一个常数表达式; 问号(?)作为非确定的初始值; 一个或多个字符的字符串; 重复子句: 重复次数 DUP(表达式),例如: DATA1 DB 11H,22H,33,44H,55H ;定义了5个字节常数 STRING1 DB A ;定义了一个字符 STRING2 DB How Are You? ;定义了一个字符串 SUM DB ? ;预置了一个不确定的值(变量) BUFFER DB 10 DUP(?

10、) ;预置了10个具有不确定值的单元,2定义字(DW) DW(Define Word)定义一个字(两个单元)。 DW伪操作后面的每个操作数都占用两个字节,在内存中存放时,低字节在前,高字节在后。 DW的格式和表达式与DB类似。例如: DATA2 DW 1234H,5678H,9ABCH BUFFER DW 50 DUP(?) 数据定义伪指令还有DD、DQ、DT,二、符号定义伪指令 符号定义伪指令EQU用于给一个表达式赋予一个名字。以后在程序中凡是用到该表达式的时候,就用这个名字来代替;在需要修改该表达式的值时,只需在赋予名字的地方修改即可。其格式为: 名字 EQU 表达式 格式中的表达式可以是

11、一个常数、符号、数值表达式、地址表达式,甚至可以是指令助记符。,例如: COUNT EQU 100 ;常量 VAR EQU 64*1024 ;数值表达式 ADDR EQU DS:BP+8 ;地址表达式 GOTO EQU JMP ;指令助记符 EQU指令不能对同一个符号重复定义。若希望对同一个符号重复定义,可以用“”伪指令。例如: EMP=60H ;EMP代表数值60H EMP=80H ;在此将EMP重新赋值,EMP代表数值80H,三、段定义伪指令 段定义语句可使编程者按段组织程序和使用存储器。段定义伪指令有SEGMENT和ENDS 段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS

12、,1定位类型:表示此段的起始边界要求,可以是PAGE,PARA,WORD和BYTE。它们表示如下的地址要求: PAGE= B PARA= B(隐含值) WORD= B BYTE= B 分别称它们为以页、节、字、字节为边界。若该项省略,则其默认值位PARA。,2组合类型:用来告诉连接程序本段与其他段的关系,分别为NONE,PUBLIC,COMMON,AT表达式以及STACK和MEMORY。,四、设定段寄存器伪指令 伪指令ASSUME告诉汇编程序一个段属于哪个段寄存器。当汇编程序遇到一个段名时,它就自动地引用给出的段寄存器将段名加以汇编。 格式为: ASSUME 段寄存器名: 段名,段寄存器名:

13、段名, 格式中的段寄存器名可以是CS、DS、ES或SS。,在一个源程序中,ASSUME伪指令要放在可执行程序开始位置的前面。 例如,以下程序是一个完整代码段的定义方法。 CODE SEGMENT PARA PUBLIC CODE ASSUME CS:CODE,DS:DATA,ES:EDATA,SS:STACK MOV AX,DATA MOV DS,AX MOV AX,EDATA MOV ES;AX MOV AX,STACK MOV SS,AX CODE ENDS,五、过程定义伪指令 过程就是子程序。 调用过程和从过程返回的指令是CALL和RET。 过程定义伪指令的格式为: 过程名 PROC N

14、EAR/FAR RET 过程名 ENDP,例4-2 编写一个软件延时的子程序。,DELAY PROC ;定义一个过程 PUSH BX ; 保护BX原来的内容 PUSH CX ; 保护CX原来的内容 MOV BL,50 ; 外循环次数 NEXT: MOV CX,2000 ; 内循环次数 WAITS: LOOP WAITS ; (CX)0则循环 DEC BL ;修改外循环计数值 JNZ NEXT ; (BX)0则继续外循环 POP CX ;恢复CX原来的内容 POP BX ;恢复BX原来的内容 RET ;过程返回 DELAY ENDP ;过程结束,六、结束伪指令 END伪指令表示程序到此为止,告诉汇编程序汇编任务到此结束。其格式为: END 标号 END伪操作后面的标号表示程序的开始地址。,第三节 DOS功能调用,所有的DOS系统功能调用都是利用软中断指令INT 21H来实现的。INT 21H是一个具有90多个子功能的中断服务程序,这些子功能大致可分为设备管理、目录管理、文件管理和其他等四个方面。INT 21H对每一个子功能都进行了编号称为功能号。 DOS系统功能调用的方法为: AH功能号; 在其他寄存器中放入该功能所要求的入口参数; INT 21H;,INT 21H的几个最常用的功能,1键盘输入单字符 功能号1和功能号8都可以接收键盘输入的单字符,输入

展开阅读全文
相关资源
相关搜索

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

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