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

上传人:宝路 文档编号:49762421 上传时间:2018-08-02 格式:PPT 页数:42 大小:112.34KB
返回 下载 相关 举报
汇编语言程序设计汇编语言_第1页
第1页 / 共42页
汇编语言程序设计汇编语言_第2页
第2页 / 共42页
汇编语言程序设计汇编语言_第3页
第3页 / 共42页
汇编语言程序设计汇编语言_第4页
第4页 / 共42页
汇编语言程序设计汇编语言_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《汇编语言程序设计汇编语言》由会员分享,可在线阅读,更多相关《汇编语言程序设计汇编语言(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_DATA PORT_VAL EQU 3 ;端口的符号名 GO: MOV AX,MY_DATA ;DS初始化为MY_DATAMOV DS,

2、AXMOV SUM,0 ;清SUM单元 CYCLE: CMP SUM,100 ;SUM单元与100相比较JNA NOT_DONE ;若未超过,转至NOT_DONEMOV AL,SUM ;若超过,把SUM单元的内容OUT PORT_VAL,AL ;通过AL输出HLT ;然后停机 NOT DONE: IN AL,PORT_VAL ;未超过时,输入下一个字节ADD SUM,AL ;与以前的结果累加JMP CYCLE ;转至CYCLE MY 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(求余

6、),它产生除法以后的余数。因此 19/7是2(商是2),而19MOD7是5(余数是5)。算术运算符应用于数字操作数,结果也是 数字的。当算术运算符应用于存储器即地址操作数 时其规则就更加严格: 只有当结果有明确的 、有意义的物理解释时,这些运算才是有效 的。11(2) 逻辑运算符按位操作的逻辑运算符有: AND(与)、 OR(或)、XOR(异或)和NOT(非)。逻辑运算的操作数只能是数字的,而且结 果是数字的。存储器地址操作数不能进行逻 辑运算。注意: AND、OR、XOR和NOT,也是8086 指令的助记符。但是,作为IBM宏汇编的运 算符是在程序汇编时计算的。而作为指令的 助记符,则是在程

7、序执行时计算的。12(3) 关系运算符在IBM宏汇编中有以下关系运算符: 相等 EQ(Equal); 不等 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) 属性修改运算符属性修改运算符可以由已经存在的存储 器操作数生成一个段值与偏移量相同

8、、而类 型不同的新的存储器操作数。如段前缀、 PTR、THIS、SHORT、HIGH/LOW等。 14(6)其它运算符()、 、,MASK及WIDTH154.2 伪指令语句(指示性语句)在IBM宏汇编中有以下几种指示性语句(Directive statements): (1) 数据定义语句(Data definition); (2) 标号定义语句(Symbol definition);(3) 段定义语句(Segmentation definition);(4) 过程定义语句(Procedure definition);(5) 程序开始、结束语句(Termination)。此外,还有段分配、群定

9、义、结构定义、记录定义 等语句。164.2.1 数据定义语句 格式: 变量名 助记符 操作数,操作数;注释 变量名 助记符 n DUP(操作数,操作数);注释 (1)字节定义伪指令名字 DB (表达式或数据项表) (2)字定义伪指令名字 DW (表达式或数据项表) (3)4字节定义伪指令名字 DD (表达式或数据项表) (4)8字节定义伪指令名字 DQ (表达式或数据项表) (5)10字节定义伪指令名字 DT (表达式或数据项表)174.2.2 标号定义语句等值语句 : (符号名) EQU (表达式) 等号语句 : (符号名) (表达式)注意:用EQU语句赋值的符号名不能被重新赋 值,“ ”可

10、以。184.2.3 段定义语句8086的存储器是分段的,所以8086必须按段来 组织程序和利用存储器,这就需要有段定义语句。 段定义的主要命令有: (1) SEGMENT,(2) ENDS ,(3) ASSUME,(4) ORG。SEGMENT和ENDS语句把汇编语言源程序分成 段,这些段就相应于存储器段,在这些存储器段中 ,存放相应段的目标码。汇编程序必须知道程序的段结构,并知道在各种 指令执行时将访问哪一个段由段寄存器所指向。这 个信息是由ASSUME语句提供的。 19通常在汇编语言的源程序中,至少要定义 码段(指令段)、堆栈段和数据段,有时还要 定义附加段。每一个段必须有一个名称,如 M

11、Y_DATA、MY_CODE等。一个段由命令 SEGMENT开始,由命令ENDS结束,它们 必须成对出现,而且它们的语句中必须有名 称,名称必须相同。最后用语句END来结束 整个源程序。ASSUME语句,只是使汇编程序知道在 程序执行时各个段寄存器的值,而这些段寄 存器的实际值(除了码段寄存器CS以外),还 必须在程序执行时,用MOV指令来赋给。 20一般来说,存储器段具体在哪儿是不重要的,可 由汇编程序来选择。但是,在有些情况下,可能要 给汇编程序一些约束,例如: “不要使这个段与别 的段搭接”,保证这个段所用的第一个字节在偶数地 址,这样对于一个字的访问可以在一个存储器读写 周期完成。或“

12、在下列地址开始这个段”。可以把这 些约束写入到源程序中。另一个语句ORG(origin),它规定了段内的起始 地址。伪指令ORG的一般格式为: ORG 表达式此语句指定了段内在它以后的程序或数据块存放 的起始地址,即以语句中的表达式的值作为起始地 址,连续存放,除非遇到一个新的ORG语句。 214.2.4 过程定义语句过程是程序的一部分,它们可被程序调用。每次 可以调用一个过程。当过程中的指令执行完后,控 制返回调用它的地方。在8086中调用过程和从过程返回的指令是CALL 和RET。这些指令可以有两种情况: 段内的和段交 叉的。段交叉指令把过程应该返回处的段地址和段内偏 移量这两者都入栈保护

13、(CALL指令)和退栈(RET指令 )。段内的调用与返回指令只入栈和退栈段内的地址 偏移量。22过程定义语句的格式为: PROCEDURE_NAMEPROCNEAR 或 PROCEDURE_NAMEPROCFAR RET PROCEDURE_NAMEENDP伪指令 PROC与ENDP都必须有名称,两 者必须成对出现,名称必须相同。利用过程 调用语句可以把程序分段,以便于阅读、理 解、调试和修改。23若整个程序由主程序和若干个子程序组成,则主 程序和这些子程序必须一起包含在码段中(除非用段 交叉调用)。主程序和各个子程序都作为一个过程, 用上述的过程定义语句来定义。用段内CALL指令调用的过程,

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

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

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

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