汇编语言程序设计汇编语言.ppt

上传人:wuy****n92 文档编号:73452134 上传时间:2023-02-19 格式:PPT 页数:42 大小:312.11KB
返回 下载 相关 举报
汇编语言程序设计汇编语言.ppt_第1页
第1页 / 共42页
汇编语言程序设计汇编语言.ppt_第2页
第2页 / 共42页
点击查看更多>>
资源描述

《汇编语言程序设计汇编语言.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计汇编语言.ppt(42页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第 4 章 汇编语言程序设计1本章讲述:4.1 汇编语言程序格式4.2 伪指令语句4.3 DOS系统功能调用和BIOS功能调用4.4 程序设计方法4.5 宏汇编和条件汇编28086汇编语言程序的一个例子MY_DATA SEGMENT ;定义数据段SUM DB?;为符号SUM保留一个字节MY_DATA ENDS ;定义数据段结束MY_CODE SEGMENT ;定义码段 ASSUME CS:MY_CODE,;规定CS和DS的内容 DS:MY_DATAPORT_VAL EQU 3 ;端口的符号名GO:MOV AX,MY_DATA ;DS初始化为MY_DATA MOV DS,AX MOV SUM,0

2、 ;清SUM单元CYCLE:CMP SUM,100 ;SUM单元与100相比较 JNA NOT_DONE ;若未超过,转至NOT_DONE MOV AL,SUM ;若超过,把SUM单元的内容 OUT PORT_VAL,AL ;通过AL输出 HLT ;然后停机NOT DONE:IN AL,PORT_VAL ;未超过时,输入下一个字节 ADD SUM,AL ;与以前的结果累加 JMP CYCLE ;转至CYCLEMY CODE ENDS ;码段结束 END GO ;整个程序结束 3 由上例看出8086汇编的一个语句行由以下4个部分组成:标号(或名称)操作码 操作数 ;注释 各部分之间至少要用一个空

3、格作为间隔。IBM宏汇编对于语句行的格式是自由的,但如果写成格式化就便于阅读,建议读者按格式化来写语句行。另外,IBM宏汇编并不要求一个语句只能写一行,一个语句可以有后续行,规定以字符“&”作为后续行的标志。44.1 汇编语言程序格式4.1.1 指令性语句与伪指令(指示性)语句指令性语句标号:指令助记符 操作数,操作数;注释伪指令语句名字 伪指令助记符 操作数,操作数;注释54.1.2 数据项 常数、变量和标号常数、变量和标号n常数q没有任何属性的纯数值。在汇编期间,它的值已能完全确定,在程序运行中值也不会发生变化。它可以有以下几种类型:二进制数,八进制数,十进制数,十六进制数 实数:它由整数

4、、小数和指数3部分组成,字符串常数:用引号括起来的一个或多个字符。6n变量q代表存放在某些存储单元的数据,这些数据在程序运行期间随时可以修改。变量的属性p段属性(SEG):表示变量存放在哪一个逻辑段中(即变量所在段的段基值);p偏移量属性(OFFSET):表示变量在逻辑段中离段起始点的字节数;p类型属性(TYPE):表示变量占用存储单元的字节数。7标号n标号是一条指令目标代码的符号地址,它常作为转移指令(含子程序调用指令)的操作数。n段属性(SEG)、偏移量(OFFSET)、距离属性(NEAR、FAR)84.1.3 表达式 表达式(Expressions)是由运算对象及运算符成。粗略地说,一个

5、表达式是一个由操作数和运算符组合的序列,在汇编时它能产生一个值。92.运算符(Operators)IBM宏汇编通常有以下几种运算符:算术运算符(Arithmetic Operators);逻辑运算符(Logical Operators);关系运算符(Relational Operators);数值返回运算符(Analytic Operators);修改属性运算符(Synthetic Operators);其它运算符10(1)算术运算符 这是读者十分熟悉的运算符-+(加)、-(减)、*(乘)、/(除)运算符。另一个算术运算符是MOD(求余),它产生除法以后的余数。因此19/7是2(商是2),而1

6、9MOD7是5(余数是5)。算术运算符应用于数字操作数,结果也是数字的。当算术运算符应用于存储器即地址操作数时其规则就更加严格:只有当结果有明确的、有意义的物理解释时,这些运算才是有效的。11(2)逻辑运算符 按位操作的逻辑运算符有:AND(与)、OR(或)、XOR(异或)和NOT(非)。逻辑运算的操作数只能是数字的,而且结果是数字的。存储器地址操作数不能进行逻辑运算。注意:AND、OR、XOR和NOT,也是8086指令的助记符。但是,作为IBM宏汇编的运算符是在程序汇编时计算的。而作为指令的助记符,则是在程序执行时计算的。12(3)关系运算符 在IBM宏汇编中有以下关系运算符:相等 EQ(E

7、qual);不等 NE(Not Equal);小于 LT(Less Than);大于 GT(Greater Than);小于或等于 LE(Less Than or Equal);大于或等于 GE(Greater Than or Equal)。13(4)数值返回运算符 分析运算符可以把存储器操作数分解为它的组成部分,如它的段值SEG、段内偏移量OFFSET、类型TYPE、长度LENGTH和大小SIZE。(5)属性修改运算符 属性修改运算符可以由已经存在的存储器操作数生成一个段值与偏移量相同、而类型不同的新的存储器操作数。如段前缀、PTR、THIS、SHORT、HIGH/LOW等。14(6)其它运

8、算符()、,MASK及WIDTH154.2 伪指令语句(指示性语句)在IBM宏汇编中有以下几种指示性语句(Directive statements):(1)数据定义语句(Data definition);(2)标号定义语句(Symbol definition);(3)段定义语句(Segmentation definition);(4)过程定义语句(Procedure definition);(5)程序开始、结束语句(Termination)。此外,还有段分配、群定义、结构定义、记录定义等语句。164.2.1 数据定义语句 格式:变量名 助记符 操作数,操作数;注释变量名 助记符 n DUP(操

9、作数,操作数);注释(1)字节定义伪指令 名字 DB (表达式或数据项表)(2)字定义伪指令 名字 DW (表达式或数据项表)(3)4字节定义伪指令 名字 DD(表达式或数据项表)(4)8字节定义伪指令 名字 DQ (表达式或数据项表)(5)10字节定义伪指令 名字 DT (表达式或数据项表)174.2.2 标号定义语句等值语句等值语句:(符号名)EQU(表达式)等号语句等号语句:(符号名)(表达式)注意:用EQU语句赋值的符号名不能被重新赋值,“”可以。184.2.3 段定义语句 8086的存储器是分段的,所以8086必须按段来组织程序和利用存储器,这就需要有段定义语句。段定义的主要命令有:

10、(1)SEGMENT,(2)ENDS,(3)ASSUME,(4)ORG。SEGMENT和ENDS语句把汇编语言源程序分成段,这些段就相应于存储器段,在这些存储器段中,存放相应段的目标码。汇编程序必须知道程序的段结构,并知道在各种指令执行时将访问哪一个段由段寄存器所指向。这个信息是由ASSUME语句提供的。19 通常在汇编语言的源程序中,至少要定义码段(指令段)、堆栈段和数据段,有时还要定义附加段。每一个段必须有一个名称,如MY_DATA、MY_CODE等。一个段由命令SEGMENT开始,由命令ENDS结束,它们必须成对出现,而且它们的语句中必须有名称,名称必须相同。最后用语句END来结束整个源

11、程序。ASSUME语句,只是使汇编程序知道在程序执行时各个段寄存器的值,而这些段寄存器的实际值(除了码段寄存器CS以外),还必须在程序执行时,用MOV指令来赋给。20 一般来说,存储器段具体在哪儿是不重要的,可由汇编程序来选择。但是,在有些情况下,可能要给汇编程序一些约束,例如:“不要使这个段与别的段搭接”,保证这个段所用的第一个字节在偶数地址,这样对于一个字的访问可以在一个存储器读写周期完成。或“在下列地址开始这个段”。可以把这些约束写入到源程序中。另一个语句ORG(origin),它规定了段内的起始地址。伪指令ORG的一般格式为:ORG 表达式 此语句指定了段内在它以后的程序或数据块存放的

12、起始地址,即以语句中的表达式的值作为起始地址,连续存放,除非遇到一个新的ORG语句。214.2.4 过程定义语句 过程是程序的一部分,它们可被程序调用。每次可以调用一个过程。当过程中的指令执行完后,控制返回调用它的地方。在8086中调用过程和从过程返回的指令是CALL和RET。这些指令可以有两种情况:段内的和段交叉的。段交叉指令把过程应该返回处的段地址和段内偏移量这两者都入栈保护(CALL指令)和退栈(RET指令)。段内的调用与返回指令只入栈和退栈段内的地址偏移量。22过程定义语句的格式为:PROCEDURE_NAME PROCNEAR或PROCEDURE_NAME PROCFARRETPRO

13、CEDURE_NAME ENDP 伪指令 PROC与ENDP都必须有名称,两者必须成对出现,名称必须相同。利用过程调用语句可以把程序分段,以便于阅读、理解、调试和修改。23 若整个程序由主程序和若干个子程序组成,则主程序和这些子程序必须一起包含在码段中(除非用段交叉调用)。主程序和各个子程序都作为一个过程,用上述的过程定义语句来定义。用段内CALL指令调用的过程,必须用段内的RET指令返回,这样的过程是NEAR过程;用段交叉CALL指令调用的过程,必须用段交叉RET指令返回,这样的过程是FAR过程。过程定义语句PROC和ENDP(End Procedure)限定了一个过程且指出它是一个NEAR

14、或FAR过程。这在两方面帮助了汇编程序。244.2.5 程序开始和结束语句 除了一个例外(END结束语句)以外,每一个结束语句(Termination Statements)都与某个开始语句成对出现。例如,SEGMENT和ENDS,PROC和ENDP。惟一的例外就是END语句,它标志着整个源程序的结束,它告诉汇编程序,没有更多的指令要汇编了。END语句的格式是:END表达式 其中,表达式必须产生一个存储器地址值,这个地址是当程序执行时,第一条要执行的指令的地址。254.3 DOS系统功能调用和BIOS中断调用 为了在程序运行过程中了解运行的情况,应该设法把结果在显示器CRT上显示出来。要在程序

15、中显示结果,方便的方法是调用操作系统中的I/O子程序。操作系统的核心是由许多有关I/O驱动、磁盘读写以及文件管理等子程序构成。这些子程序都编了号,可由汇编语言的源程序调用。在调用时,把子程序的号(或称系统功能调用号)送至AH,把子程序规定的入口参数,送至指定的寄存器,然后由中断指令INT 21H来实现调用。在这里通过几个程序例子介绍少量的有关I/O的功能调用,便于读者在程序中使用。26274.3.3 BIOS中断调用 驻留在ROM中的BIOS提供了系统加电自检、引导装入IO设备的处理程序及接口控制等功能模块来处理所有的系统中断。与DOS功能调用相同,用户可以直接用指令设置参数,然后中断调用BI

16、OS中的程序,给用带来了极大的方便。284.4 程序设计方法一、汇编语言程序设计基本步骤 1.分析问题,确定模型2.确定算法 3.绘制流程图4.编写程序5.检查和调试 29二、汇编语言程序的基本结构n顺序结构n分支结构n循环结构n子程序304.4.1 顺序结构314.4.2 分支结构32n实现334.4.3 循环结构344.4.4 子程序结构Call proc1ret主程序子程序proc135n实现方法q主程序有调用指令callq子程序有返回指令retn特点qCall指令与ret缺一不可q现场保护q入口出口参数设置364.5 宏汇编与条件汇编 在前面举例中,若一个程序段要多次使用,为了简化程序

17、采用了子程序的办法。因此,常常把一些经常使用的典型的程序编为子程序,一方面简化了程序的编制,另外也可以提高程序的质量和可靠性。这样的目的也可以用宏指令和宏汇编来实现。374.5.1 宏定义宏指令名 MACRO 形式参数,形式参数,宏体 ENDM 38宏指令与子程序的区别 宏指令是用一条宏指令来代替一段程序,以简化源程序。子程序也有类似的功能,那么,这两者之间有什么区别呢?(1)宏指令是为了简化源程序的书写,在汇编时,汇编程序处理宏指令,把宏定义体插入到宏调用处。所以,宏指令并没有简化目标程序。有多少次宏调用,在目标程序中仍需要有同样多次的目标代码插入。所以,宏指令没有能节省目标程序所占的内存单

18、元。子程序是在执行时由CPU处理的。若在一个主程序中多次调用同一个子程序,在目标程序的代码中,主程序中仍只有调用指令的目标代码,子程序的代码仍是一个。39 (2)根据上述比较,可以看出:若在一个源程序中多次调用一个程序段,则可用子程序,也可以用宏指令来简化源程序。用子程序的方法,汇编后产生的目标代码少,也即目标程序占用的内存空间少,节约了内存空间。但是,子程序在执行时,每调用一次都要先保护断点,通常在程序中还要保护现场;在返回时,先要恢复现场,然后恢复断点(返回)。这些操作都额外增加了时间,因而执行时间长,速度慢。而宏指令恰好相反,它的目标程序长,占用的内存单元多;但是执行时不需要保护断点、保护现场以及恢复、返回等这些额外的操作,因而执行时间短,速度快。404.5.2 条件汇编 IBM宏汇编提供条件汇编功能。各种条件汇编语句的一般格式为:IF条件(指令体1)ELSE(任选)(指令体2)ENDIF 41 其中,表达式表示条件,其值只有两个:不是真(TURE)就是假(FALSE)。当条件为真时,汇编程序就对指令体1中所包含的汇编语句进行汇编;若条件为假,且语句中如果有ELSE以及语句体2的话,则汇编程序就跳过语句体1而对指令体2中的语句进行汇编;但若条件为假,且语句中没有ELSE以及指令体2,则汇编程序就跳过这一组条件汇编语句,往下进行。ENDIF是任一种条件语句的结束符。42

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

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com