汇编语言之第5章

上传人:ji****n 文档编号:54194577 上传时间:2018-09-09 格式:PPT 页数:84 大小:179KB
返回 下载 相关 举报
汇编语言之第5章_第1页
第1页 / 共84页
汇编语言之第5章_第2页
第2页 / 共84页
汇编语言之第5章_第3页
第3页 / 共84页
汇编语言之第5章_第4页
第4页 / 共84页
汇编语言之第5章_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《汇编语言之第5章》由会员分享,可在线阅读,更多相关《汇编语言之第5章(84页珍藏版)》请在金锄头文库上搜索。

1、2018/9/9,8086/8088宏汇编语言程序设计,第5章 程序设计基本技术,顺序程序设计 分支程序设计 循环程序设计 子程序设计 DOS功能子程序的调用,2018/9/9,8086/8088宏汇编语言程序设计,5.1 概述,我们知道,8086/8088CPU把存储器分成若干段,而每一个段是可独立寻址的逻辑单位。 段是8086/8088系列微机的汇编语言程序的基础。一个段就是若干指令和数据的集合。 因此,我们在编制汇编语言源程序时,首先要使用段定义伪指令来构造一个由若干指令和数据组成的程序段。 程序中逻辑段的数目由实际情况确定,通常根据程序中的用途来划分段,如作堆栈使用的段、存放数据的段,

2、存放程序的段等等。,2018/9/9,8086/8088宏汇编语言程序设计,程序基本段结构 DATA SEGMENT DATA ENDS STACK1 SEGMENT PARA STACKDW 20H DUP(0) STACK1 ENDS CODE SEGMENT BEGIN : MOV AX,DATAMOV DS,AX ;装入数据段寄存器MOV AH,4CHINT 21H ;返回到DOS,返回码为0 CODE ENDSEND BEGIN,2018/9/9,8086/8088宏汇编语言程序设计,在程序中,代码段、数据段、附件段和堆栈段这4个段的顺序是任意的。 程序的功能是由代码段来实现的。程序

3、的代码段的基本结构有4类:顺序程序、循环程序、分支程序和子程序。,分支结构 子程序结构,顺序结构 循环结构,2018/9/9,8086/8088宏汇编语言程序设计,编制汇编语言源程序的步骤,(1) 分析问题,确定算法 (2) 根据算法画出程序流程图 (3) 合理分配存储空间和寄存器 (4) 根据流程图编写程序 (5) 调试程序 分析问题,确定算法就是确定解决问题的方法和步骤。 编制流程图是将解决问题的方法、步骤用框图的形式表示出来。如果要解决的问题比较复杂,那么可以逐步细化,直到每一框图都可以很容易编制程序为止。,2018/9/9,8086/8088宏汇编语言程序设计,编制汇编语言源程序的步骤

4、,流程图不仅便于编写程序,而且对程序逻辑上的正确性也比较容易查找和修改。 流程图主要由处理框、判定框、起止框、连接框和流向线5种框图符号组成。,处理框,判定框,起始框,连接框,流向线,2018/9/9,8086/8088宏汇编语言程序设计,(1)处理框:用于说明一程序段(或一条指令)所完成的功能。这种框图通常只有一个入口和一个出口。 (2)判断框:表示进行程序的分支流向判断,框内记入判定条件。这种框图通常有一个入口,两个或两个以上的出口。在每个出口上要注明分支流向的条件。 (3)起止框:表示一个程序或一个程序模块的开始和结束。起始框内通常用程序名、标号或“开始”字符来表示,它仅有一个出口。终止

5、框内通常用“结束”或“返回”字符表示,它仅有一个入口。 (4)连接框:当程序比较复杂时,流程图的连线较多,且常常纵横交错,这时可以用连接框来表示两根流向线的连接关系。所以连接框种常用字母或数字来表示。框内有相同字母或数学就表示它们有连线关系。通常它只有一个入口或出口。 (5)流向线:表示程序的流向。,2018/9/9,8086/8088宏汇编语言程序设计,存储器和寄存器的分配,存储器和寄存器时进行汇编语言程序设计的舞台。由于CPU中的寄存器数量有限而且有些操作要使用特定的寄存器,所以程序中要合理分配各寄存器的用途。 程序运行时,其目标代码时存放在存储器中的,而且操作数和程序执行的结果也是存储在

6、存储单元中的。因此,充分利用存储空间,节约使用存储空间时我们编制一个好的应用程序应该注意的问题。 为了编程方便,我们通常给这些存储单元赋予一个名字(例如变量名)。存储器中的存储单元有3种类型的用途: (1)常数单元:在这些存储单元中存放的数据是整个程序的常量,且不因程序运行的次数发生改变。在程序中不能修改它的值。,2018/9/9,8086/8088宏汇编语言程序设计,存储器和寄存器的分配,(2)数据单元:数据单元是程序运行中处理的对象,除非程序要求处理变动这些单元的内容,可以在程序中设置新值外,通常不要轻易修改这些单元的内容,以便程序可以多次运行。 (3)工作单元:工作单元用于存放中间结果和

7、最后结果,因此工作单元的内容在程序运行期间是经常变化的。 为了合理的利用存储器单元,在程序设计时要合理分配常数单元,数据单元和工作单元,并充分利用寄存器来减少存放中间结果的工作单元,这样不仅可以节约存储单元,还能提高程序运行速度。,2018/9/9,8086/8088宏汇编语言程序设计,编制汇编语言源程序的步骤,完成了存储单元和寄存器的分配后,就要根据程序框图进行汇编语言源程序的编写。 在进行汇编语言源程序编写时,首先按程序中各部分的用途分段,在使用指令语句和伪指令语句的时候要分清其功能,并且正确使用各种寻址方式。 编写好源程序后,就要对源程序进行调试。调试的步骤: (1)用MASM汇编.AS

8、M文件 (2)用LINK连接.OBJ文件 (3)用DEBUG调试.EXE文件,2018/9/9,8086/8088宏汇编语言程序设计,5.2 顺序程序设计,顺序程序是最简单,也是最基本的一种程序结构形式。 顺序程序结构是从开始到结尾都一直是顺序执行的,中途没有任何分支。程序一直按指令序列在存储器中的存放顺序来执行,由CS:IP提供的指令地址来控制。例5.2.1 试编写一程序计算以下表达式: Z=(3X+Y-5)/2。设X、Y的值存放在字变量VARX、VARY中,结果放在VARZ中。,2018/9/9,8086/8088宏汇编语言程序设计,顺序程序设计,算法分析: 1、乘2和除2可以使用算术左移

9、和右移实现 2、3X可以分解成2X+X流程图:,开始,计算 3X,计算 3X+Y,计算 3X+Y-5,计算 (3X+Y-5)/2,存结果,结束,2018/9/9,8086/8088宏汇编语言程序设计,TITLE EXAMPLE1 DATA SEGMENT VARX DW 15 VARY DW 10 VARZ DW ? DATA ENDS STACK1 SEGMENT PARA STACKDW 20H DUP (0) STACK1 ENDS CODE SEGMENT ASSUME CS: CODE, DS:DATA, SS:STACK1 COMP PROC FARPUSH DS ;保护返回DOS

10、地址 MOV AX,0PUSH AX,2018/9/9,8086/8088宏汇编语言程序设计,MOV AX, DATA ;初始化DS,MOV DS,AX,MOV AX,VARX ;AX X,SHL AX,1 ;AX 2X,ADD AX,VARX ;AX 3X,ADD AX,VARY ;AX 3X+Y,SUB AX,5 ; AX 3X+Y-5,SAR AX,1 ; AX (3X+Y-5)/2,MOV VARZ,AX ;存结果,RET ;返回DOS,COMP ENDP,CODE ENDS,END COMP,2018/9/9,8086/8088宏汇编语言程序设计,顺序程序设计,当一个用户程序的可执行

11、文件装入内存后,无论用户程序有几个段,也不管这些段的排列顺序如何,用户程序的目的代码一定是直接加载在程序段前缀(Program Segment Prefix)PSP段的后面。 PSP段给出了用户可执行文件的若干控制信息。其中PSP段的开始处(第1、2字节)有一条软中断指令“INT 20H”。这条指令可以用来实现结束用户程序,返回操作系统的功能。如果使用这种方式返回,则首先用户要把用户程序设置成一个过程,且类型属性为FAR,由于可执行文件转入内存后DS和ES两个段寄存器是指向PSP段的。所以将DS和偏移量00H分别压入堆栈,用户程序结束时用RET指令完成将原先压入堆栈的PSP段基值和00H的偏移

12、量分别送入CS和IP。执行完RET指令后,就可以转去执行PSP段开始处的“INT 20H”软中断指令了。,2018/9/9,8086/8088宏汇编语言程序设计,顺序程序设计,除了用上述方法来结束用户程序,返回操作系统外,还可以使用另外一种方法:使用软中断指令“INT 21H”。 如果使用软中断指令“INT 21H”来返回,则用户程序可以不设置过程,只要在用户程序结束时,使用两条指令即可。指令如下:MOV AH,4CHINT 21H 如果使用此返回方式,程序代码可以修改为:,2018/9/9,8086/8088宏汇编语言程序设计,TITLE EXAMPLE1 DATA SEGMENT VARX

13、 DW 15 VARY DW 10 VARZ DW ? DATA ENDS STACK1 SEGMENT PARA STACKDW 20H DUP (0) STACK1 ENDS CODE SEGMENT ASSUME CS: CODE, DS:DATA, SS:STACK1 STRAT: MOV AX, DATA MOV DS,AX;初始化DS,2018/9/9,8086/8088宏汇编语言程序设计,MOV AX,VARX ;AX X,SHL AX,1 ;AX 2X,ADD AX,VARX ;AX 3X,ADD AX,VARY ;AX 3X+Y,SUB AX,5 ; AX 3X+Y-5,SA

14、R AX,1 ; AX (3X+Y-5)/2,MOV VARZ,AX ;存结果,MOV AH,4CH INT 21H ;返回DOS,CODE ENDS,END STRAT,例2、P82,2018/9/9,8086/8088宏汇编语言程序设计,顺序程序设计,换码指令(XLAT) 指令格式:XLAT 表首址 指令功能:(AL)+(BX) AL 使用这条指令时,将表首址的偏移量送入BX中,而把要查表内的单元的偏移量(0255)送入AL中,两者的和就是要查找元素的实际偏移量,执行指令后,结果存放在AL中。 该指令的执行不影响标志寄存器中的标志位。,2018/9/9,8086/8088宏汇编语言程序设计

15、,5.3 分支程序设计,8086/8088指令系统提供了许多指令来完成对程序流向的控制和转移,以便在程序运行过程中改变指令的执行顺序。 在程序运行过程中,对指令执行的控制是由CS和IP决定的。因此,程序流向的控制和转移,主要是改变CS和IP。若转移仅在同一个段内进行(段内转移) ,则只需要修改IP;若是在两个段之间进行(段间转移),则CS和IP都要修改。 一、转移指令 转移指令分为无条件转移指令和条件转移指令两种。,2018/9/9,8086/8088宏汇编语言程序设计,分支程序设计,无条件转移指令JMP 指令格式: JMP 目标 JMP指令使程序无条件转移到“目标”处,“目标”通常用标号来表达。 例如:JMP TARGET TARGET: . JMP指令的转移可以分为段内转移和段间转移。JMP指令的执行不影响标志寄存器。,2018/9/9,8086/8088宏汇编语言程序设计,分支程序设计,1、段内转移:段内转移时,JMP指令和要转移的目标指令同属一个段。因此,只需要修改IP,而CS保持不变。 (1)段内转移直接寻址:JMP指令的操作数部分直接给出目标单元。 格式:JMP 标号 (2)段内转移间接寻址:JMP指令转移的目标地址在某一个通用寄存器中,或在某一个字存储单元中。 格式: JMP R/M 例如: JMP CX 或者 JMP WORD PTR BX,

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

当前位置:首页 > 生活休闲 > 社会民生

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