第5章8086汇编语言程序设计ppt课件_第1页
第5章8086汇编语言程序设计ppt课件_第2页
第5章8086汇编语言程序设计ppt课件_第3页
第5章8086汇编语言程序设计ppt课件_第4页
第5章8086汇编语言程序设计ppt课件_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第5 5章章 分支与循环程序设计分支与循环程序设计第第5 5章章 分支与循环程序设计分支与循环程序设计本章主要内容本章主要内容 顺序程序设计顺序程序设计1 分支程序设计分支程序设计2 循环程序设计循环程序设计3第第5 5章章 分支与循环程序设计分支与循环程序设计汇编言语程序设计概述汇编言语程序设计概述v80868086汇编言语程序采用模块化构造,通常汇编言语程序采用模块化构造,通常由一个主程序模块和多个子程序过程由一个主程序模块和多个子程序过程模块构成。模块构成。v对于简单程序,只需主程序模块,没有子对于简单程序,只需主程序模块,没有子程序模块。程序模块。v汇编言语程序有汇编言语程序有3 3

2、种根本构造:种根本构造:v顺序构造顺序构造v分支构造分支构造v循环构造循环构造第第5 5章章 分支与循环程序设计分支与循环程序设计程序的质量规范程序的质量规范v衡量程序的质量通常有以下几个规范:衡量程序的质量通常有以下几个规范:v程序正确、完好;程序正确、完好;v程序易读性强;程序易读性强;v程序的执行速度快;程序的执行速度快;v程序占内存小,程序代码的行数少。程序占内存小,程序代码的行数少。第第5 5章章 分支与循环程序设计分支与循环程序设计汇编言语程序设计的根本步骤汇编言语程序设计的根本步骤v 分析问题,笼统出描画问题的数学模型;分析问题,笼统出描画问题的数学模型;v 确定处理问题的算法或

3、算法思想;确定处理问题的算法或算法思想;v 程序模块划分程序模块划分在处理复杂实践问题时在处理复杂实践问题时,往往需求把它分成假设干功能模块,在进展,往往需求把它分成假设干功能模块,在进展功能模块划分后,必需确定各功能模块间的通功能模块划分后,必需确定各功能模块间的通讯问题;讯问题;v 绘制各功能模块流程图或构造图;绘制各功能模块流程图或构造图;v 分配存储空间、存放器等任务单元;分配存储空间、存放器等任务单元;第第5 5章章 分支与循环程序设计分支与循环程序设计汇编言语程序设计的根本步骤续汇编言语程序设计的根本步骤续v 根据流程图,编写程序;根据流程图,编写程序;v 静态检查,纠正错误;静态

4、检查,纠正错误;v 上机运转调试,纠正错误,直至测试经过;上机运转调试,纠正错误,直至测试经过;v 整理资料,建立完好的文档。整理资料,建立完好的文档。第第5 5章章 分支与循环程序设计分支与循环程序设计5.15.1顺序构造程序设计顺序构造程序设计v顺序构造程序又称简单程序。顺序构造程序又称简单程序。v采用这种构造的程序,按照指令书写的顺采用这种构造的程序,按照指令书写的顺序逐条执行,程序的执行途径没有分支和序逐条执行,程序的执行途径没有分支和循环。循环。第第5 5章章 分支与循环程序设计分支与循环程序设计顺序构造程序设计举例顺序构造程序设计举例v【例【例5-25-2】编程将内存数据段字节】编

5、程将内存数据段字节单元单元INDATINDAT存放的一个数存放的一个数n n假设假设0 n 9 0 n 9 ,以十进制方式在,以十进制方式在屏幕上显示出来。屏幕上显示出来。v例如,假设例如,假设INSTRINSTR单元存放的是数单元存放的是数8 8,那么在屏幕上显示:,那么在屏幕上显示:8D8D。第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-25-2】程序代码】程序代码DATA SEGMENT DATA SEGMENT ; ;数据段定义数据段定义 INDAT DB 8 INDAT DB 8DATA ENDSDATA ENDSCODE SEGMENT CODE SEGMENT

6、; ;代码段定义代码段定义 ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART: START: MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX ; ;初始化初始化DSDS第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-25-2】程序代码】程序代码( (续续) ) MOV DL,INDAT MOV DL,INDAT OR DL,30HOR DL,30H MOV AHMOV AH2 2 INT 21HINT 21H MOV DL,DMOV DL,D MOV AH,2MOV AH,2 INT 2

7、1HINT 21HMOV AH,4CHMOV AH,4CH INT 21H INT 21H CODE ENDSCODE ENDS END START END START第第5 5章章 分支与循环程序设计分支与循环程序设计5.2 5.2 分支构造程序设计分支构造程序设计v分支构造程序利用条件转移指令或跳转表分支构造程序利用条件转移指令或跳转表,使程序执行完某条指令后,根据指令执,使程序执行完某条指令后,根据指令执行后形状标志的情况选择要执行哪个程序行后形状标志的情况选择要执行哪个程序段。段。v分支构造程序的指令执行顺序与指令的存分支构造程序的指令执行顺序与指令的存储顺序不一致。储顺序不一致。v转

8、移指令转移指令JMPJMP和和JccJcc可以实现分支构造。可以实现分支构造。第第5 5章章 分支与循环程序设计分支与循环程序设计分支构造的三种方式分支构造的三种方式第第5 5章章 分支与循环程序设计分支与循环程序设计单分支构造程序设计举例单分支构造程序设计举例v【例【例5-35-3】编写程序段,求】编写程序段,求AXAX中存放的带符中存放的带符号数的绝对值,结果存号数的绝对值,结果存RESRES单元。单元。v v CMP AX,0 CMP AX,0v JGE ISPOSITIVE JGE ISPOSITIVEv NEG NEGAXAXvISPOSITIVE:ISPOSITIVE:v MOV

9、RES,AX MOV RES,AXv v本例采用的是单分支构造。特点是:条件本例采用的是单分支构造。特点是:条件成立时程序跳转;否那么,顺序执行。成立时程序跳转;否那么,顺序执行。第第5 5章章 分支与循环程序设计分支与循环程序设计双分支构造程序设计举例双分支构造程序设计举例v【例【例5-45-4】 编程判别编程判别DATDAT单元存放的带符单元存放的带符号数的正负。号数的正负。v如该数为负数,那么显示如该数为负数,那么显示“DAT is a “DAT is a negative number!negative number!;否那么显示;否那么显示“DAT “DAT is a nonnega

10、tive number!is a nonnegative number!。第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-45-4】续】续DATA SEGMENT DATA SEGMENT ; ;数据段定义数据段定义 N DB DAT is a negative number!,$ N DB DAT is a negative number!,$ NN DB DAT is a nonnegative number! $ NN DB DAT is a nonnegative number! $DATA ENDSDATA ENDSCODE SEGMENT CODE SEGMENT

11、; ;代码段定义代码段定义 ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART: START: MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX ; ;设置设置DSDS第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-45-4】续】续 MOV AX,-3 MOV AX,-3 CMP AX,0 CMP AX,0 JGE ISNN JGE ISNN LEA DX,N LEA DX,N MOV AH,9 MOV AH,9 INT 21H INT 21H JMP FINISH JMP FINISH第第

12、5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-45-4】续】续ISNN: ISNN: LEA DX,NNLEA DX,NN MOV AH,9MOV AH,9 INT 21HINT 21HFINISH:FINISH: MOV AH,4CHMOV AH,4CH INT 21HINT 21HCODE CODE ENDSENDS END START END START第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-45-4】续】续v【例【例5-45-4】采用的是双分支构造。】采用的是双分支构造。v采用这种构造时,特别要留意第一个分支采用这种构造时,特别要留意第一个分支后要

13、利用后要利用JMPJMP指令程序第指令程序第1616行使程序跳行使程序跳转到第二个分支的后面。转到第二个分支的后面。v总结:总结:v首先除第一分支外,第二分支和出口位置首先除第一分支外,第二分支和出口位置用标号标名用标号标名v第一分支终了时后要加第一分支终了时后要加JMPJMP指令使程序跳转指令使程序跳转到出口位置到出口位置第第5 5章章 分支与循环程序设计分支与循环程序设计多分支构造程序设计举例多分支构造程序设计举例v【例【例5-55-5】 编程求分段函数编程求分段函数Y Y的值。知变量的值。知变量X X为为1616位带符位带符号数,分段函数的值要求保号数,分段函数的值要求保管到字单元管到字

14、单元Y Y中。函数定义如中。函数定义如下:下:1(X 0)Y0(X = 0)1(X 10WHILE I10第第5 5章章 分支与循环程序设计分支与循环程序设计循环程序构造循环程序构造第第5 5章章 分支与循环程序设计分支与循环程序设计设计循环构造程序时,要留意的问题:设计循环构造程序时,要留意的问题:v选用计数循环还是条件循环?选用计数循环还是条件循环?v采用直到型循环构造还是当型循环构造?采用直到型循环构造还是当型循环构造?v要综合思索循环执行的条件和循环退出的条要综合思索循环执行的条件和循环退出的条件:件:v可以用循环次数、计数器、标志位、变量值可以用循环次数、计数器、标志位、变量值等多种

15、方式来作为循环的控制条件等多种方式来作为循环的控制条件v特别留意:特别留意:v不要把初始化部分放到循环体中。不要把初始化部分放到循环体中。v循环体中要有能改动循环条件的语句。循环体中要有能改动循环条件的语句。第第5 5章章 分支与循环程序设计分支与循环程序设计v运用LOOP,LOOPZ,LOOPNZ时均为相对寻址,跳转地址必需在IP+128ip-128之间。否那么可用JMP与三循环指令结合控制循环。LOP:.LOOP ANETJMP BNETANET:JMP LOPBNET: 第第5 5章章 分支与循环程序设计分支与循环程序设计循环构造程序设计举例循环构造程序设计举例v【例【例5-65-6】

16、编程显示以编程显示以“!结尾的字符串。!结尾的字符串。v如:如:“Welcome to “Welcome to MASM!MASM!。只知道循环终了的条件是该字只知道循环终了的条件是该字符串以符串以“!终了,不知道字符!终了,不知道字符串的长度,所以,可用条件控串的长度,所以,可用条件控制的方法来控制循环的次数。制的方法来控制循环的次数。第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-65-6】续】续DATA SEGMENT DATA SEGMENT MYSTR DB Welcome to MASM! MYSTR DB Welcome to MASM!DATA ENDSDATA

17、 ENDSCODE SEGMENT CODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART: START: MOV AX,DATA MOV AX,DATA MOV DS,AXMOV DS,AX第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-65-6】续】续LEA SI,MYSTRLEA SI,MYSTRNEXTCHAR:NEXTCHAR:MOV DL,SIMOV DL,SIMOV AH,2MOV AH,2INT 21HINT 21HCMP DL,!CMP DL,!JZ FINISHJZ FINISHINC

18、SIINC SIJMP NEXTCHARJMP NEXTCHAR第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-65-6】续】续FINISH:FINISH:MOV AH,4CHMOV AH,4CHINT 21HINT 21HCODE ENDSCODE ENDS END STARTEND START第第5 5章章 分支与循环程序设计分支与循环程序设计计数循环程序计数循环程序v【例【例5-65-6】 将内存数据段将内存数据段INSTRINSTR地址开场存放地址开场存放的一个由字母组成的字符串中的小写字母全部的一个由字母组成的字符串中的小写字母全部转换成大写字母其他字符不变后存至内存

19、转换成大写字母其他字符不变后存至内存数据段数据段OUTSTROUTSTR地址处。地址处。v如原字符串是如原字符串是“hello ASM! 20190601“hello ASM! 20190601,那么,那么转换完后应该是转换完后应该是“HELLO ASM! 20190601“HELLO ASM! 20190601。第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-65-6】续】续DATA SEGMENT DATA SEGMENT INSTR INSTR DB hello ASM! 20190601 DB hello ASM! 20190601STRLENSTRLEN EQU $-

20、INSTR EQU $-INSTR OUTSTR OUTSTR DB STRLEN DUP(?) DB STRLEN DUP(?)DATA ENDSDATA ENDSCODE SEGMENT CODE SEGMENT ASSUME CS:CODE,DS:DATAASSUME CS:CODE,DS:DATASTART: START: MOV AX,DATAMOV AX,DATAMOV DS,AXMOV DS,AX第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-65-6】续】续 LEA SI,INSTR LEA SI,INSTRLEA DI,OUTSTRLEA DI,OUTSTRM

21、OV CX,STRLENMOV CX,STRLENNEXTCHAR:NEXTCHAR:MOV AL,SIMOV AL,SICMP AL,aCMP AL,aJB UNCHGJB UNCHG; ;不是小写字母不是小写字母, ,那么不转换那么不转换CMP AL,zCMP AL,zJA UNCHGJA UNCHG; ;不是小写字母不是小写字母, ,那么不转换那么不转换SUB AL,20HSUB AL,20H; ;将小写字母转换为大写字母将小写字母转换为大写字母UNCHG:UNCHG:MOVMOVDI,ALDI,ALINC SIINC SIINC DIINC DILOOP NEXTCHARLOOP NE

22、XTCHAR第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-65-6】续】续MOV AH,4CHMOV AH,4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START第第5 5章章 分支与循环程序设计分支与循环程序设计循环构造程序设计举例续循环构造程序设计举例续v【例【例5-75-7】 编程以二进制方式显示编程以二进制方式显示BXBX的值假的值假设为无符号数。设为无符号数。v 假设假设(BX)=20(BX)=20,那么显示:,那么显示:0000000000010100B0000000000010100B。v分析:分析:v由于知由

23、于知BXBX是是1616位的,因此,循环的次数就是位的,因此,循环的次数就是1616次次,所以可以采用计数法控制循环。,所以可以采用计数法控制循环。第第5 5章章 分支与循环程序设计分支与循环程序设计第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-75-7】续】续CODE SEGMENT CODE SEGMENT ASSUME CS:CODE ASSUME CS:CODESTART: START: MOV AX,DATAMOV AX,DATA MOV DS,AX MOV DS,AX MOV BX,20 MOV BX,20 MOV CX,16 ; MOV CX,16 ; 计数器计

24、数器CX,CX,置初值置初值1616NEXTCHAR:NEXTCHAR: ROL BX,1 ROL BX,1 ; ;显示顺序是从左往右显示顺序是从左往右, , MOV DL,BL MOV DL,BL ; ;要显示的值仅占最低位要显示的值仅占最低位D0D0 AND DL,1 AND DL,1 ; ;去除去除D7D7D1D1 OR DL,30H OR DL,30H MOV AH,2 MOV AH,2 INT 21H INT 21H; ;利用利用2 2号号DOSDOS调用显示调用显示LOOP NEXTCHARLOOP NEXTCHAR; ;循环执行循环执行1616次次FINISH:FINISH:MO

25、V DL,BMOV DL,BMOV AH,2MOV AH,2INT 21HINT 21H; ;利用利用2 2号号DOSDOS调用调用, ,显示显示BBMOV AH,4CHMOV AH,4CHINT 21HINT 21H ; ; 前往操作系统前往操作系统CODE ENDSCODE ENDSEND STARTEND START第第5 5章章 分支与循环程序设计分支与循环程序设计v【例【例5-85-8】 编程以十六进制方式显示编程以十六进制方式显示BXBX的的值假设为无符号数。值假设为无符号数。v如如(BX)=20(BX)=20,那么显示,那么显示0014H0014H。第第5 5章章 分支与循环程序

26、设计分支与循环程序设计N第第5 5章章 分支与循环程序设计分支与循环程序设计CODE SEGMENT CODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART: START: MOV AX,DATAMOV AX,DATAMOV DS,AX MOV DS,AX MOV BX,20MOV BX,20;BX;BX中存放的是要显示的数中存放的是要显示的数MOV CH,4MOV CH,4第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-85-8】续】续NEXT:NEXT:MOVMOV CL,4 CL,4ROL BX,CL

27、ROL BX,CL ; ;将最高将最高4 4位二进制值移至低位二进制值移至低4 4位位MOV DL,BLMOV DL,BLAND DL,0FHAND DL,0FH; ;仅保管本次要显示的数值仅保管本次要显示的数值OR DL,30H ;OR DL,30H ;得到要显示的字符的得到要显示的字符的ASCIIASCII值值CMP DL,39H ;CMP DL,39H ;是小于是小于99JBE DISPHEXJBE DISPHEXADD DL,7ADD DL,7; ;得到得到10101515所对应的字符所对应的字符ASCIIASCII值值第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-8

28、5-8】续】续DISPHEX:DISPHEX:MOV AH,2MOV AH,2INT 21HINT 21H; ;利用利用DOSDOS功能调用功能调用, ,显示字符显示字符DEC CHDEC CHJNZ NEXTJNZ NEXT ; ;显示下一位十六进制数字显示下一位十六进制数字MOV DL,HMOV DL,H; ;显示字符显示字符HHMOV AH,2MOV AH,2INT 21HINT 21HMOV AH,4CHMOV AH,4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START第第5 5章章 分支与循环程序设计分支与循环程序设计v【例【例5

29、-95-9】 编程以十进制方式显示编程以十进制方式显示BXBX的值的值假设为无符号数。假设为无符号数。v如如(BX)=20(BX)=20,那么显示,那么显示20D20D。v分析:分析:v本例分两步实现。本例分两步实现。v1 1转换并保管结果。转换并保管结果。v2 2显示。显示。第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-95-9】续】续v本例分两步实现。本例分两步实现。v1 1转换并保管结果转换并保管结果v这一步将二进制数转换为十进制值,即求出十进制这一步将二进制数转换为十进制值,即求出十进制值各位上的数字。由于值各位上的数字。由于1616位二进制数最大能表示的位二进制数最

30、大能表示的数是数是6553565535,所以,转换后,最多是一个万位的十进,所以,转换后,最多是一个万位的十进制数。转换的步骤就是:把要转换的数依次除以制数。转换的步骤就是:把要转换的数依次除以1000010000,10001000,100100和和1010,分别可以得到万位数字、,分别可以得到万位数字、千位数字、百位数字和十位数字。除以千位数字、百位数字和十位数字。除以1010得到的余得到的余数就是个位数字。程序中,将得到的这些数字先存数就是个位数字。程序中,将得到的这些数字先存入内存指定单元,供显示模块运用。入内存指定单元,供显示模块运用。v2 2显示显示v本例程序把转换和显示分成两个模块

31、来实现,使得本例程序把转换和显示分成两个模块来实现,使得程序的构造明晰。程序的构造明晰。第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-95-9】续】续DATA SEGMENT DATA SEGMENT DECNUM DB 5 DUP(?)DECNUM DB 5 DUP(?)DATA ENDSDATA ENDSCODE SEGMENT CODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART: START: MOV AX,DATAMOV AX,DATAMOV DS,AX MOV DS,AX MOV BX,65

32、530MOV BX,65530; ;要转换的值要转换的值LEA SI,DECNUMLEA SI,DECNUM第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-95-9】续】续 MOV DX,0 MOV DX,0 MOV AX,BX MOV AX,BXMOV CX,10000MOV CX,10000DIV CXDIV CXMOV SI,AL;MOV SI,AL;求得万位的值求得万位的值, ,存入指定单元存入指定单元INC SIINC SIMOV AX,DXMOV AX,DXMOV DX,0MOV DX,0MOV CX,1000MOV CX,1000DIV CXDIV CXMOV S

33、I,AL;MOV SI,AL;求得千位的值求得千位的值, ,存入指定单元存入指定单元第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-95-9】续】续 INC SI INC SIMOV AX,DXMOV AX,DXMOV DX,0MOV DX,0MOV CX,100MOV CX,100DIV CXDIV CXMOV SI,AL;MOV SI,AL;求得百位的值求得百位的值, ,存入指定单元存入指定单元INC SIINC SIMOV AX,DXMOV AX,DXMOV CL,10MOV CL,10DIV CLDIV CLMOV SI,ALMOV SI,AL; ;求得十位的值求得十位

34、的值, ,存入指定单元存入指定单元第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-95-9】续】续 INC SI INC SIMOV SI,AHMOV SI,AH ; ;此时此时, ,余数就是个位的值余数就是个位的值, ,LEA SI,DECNUMLEA SI,DECNUMMOV CX,5MOV CX,5DISP:DISP:MOVMOVDL,SIDL,SI; ;依次取出十进制数各位的值依次取出十进制数各位的值OR DL,30HOR DL,30H; ;将取出的值转换为将取出的值转换为ASCIIASCII值值MOV AH,2MOV AH,2INT 21HINT 21H; ;利用利用

35、DOSDOS功能调用功能调用, ,显示显示INC SIINC SILOOP DISPLOOP DISP第第5 5章章 分支与循环程序设计分支与循环程序设计【例【例5-95-9】续】续 MOV DL,D MOV DL,DMOV AH,2MOV AH,2INT 21HINT 21HMOV AH,4CHMOV AH,4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START第第5 5章章 分支与循环程序设计分支与循环程序设计条件循环程序条件循环程序v假设循环次数预先不能确定,可谓设法根据问题假设循环次数预先不能确定,可谓设法根据问题的特定条件进展循环控

36、制。如例的特定条件进展循环控制。如例1 1v例:求例:求12+22+32+12+22+32+。前项的和刚大于前项的和刚大于10001000的项数的项数N,N,并将项数存入到并将项数存入到T T单元中。单元中。第第5 5章章 分支与循环程序设计分支与循环程序设计DATA SEGMENT DATA SEGMENT T DB ? T DB ?DATA ENDSDATA ENDSCOSEG SEGMENT COSEG SEGMENT ASSUME DS:DATA,CS:COSEGASSUME DS:DATA,CS:COSEGSTART: MOV AX,DATASTART: MOV AX,DATA MO

37、V DS,AX MOV DS,AX MOV CL,0 ; MOV CL,0 ;项数计数器项数计数器 MOV DL,0 MOV DL,0 ;自然数计数器;自然数计数器 MOV BX,0 MOV BX,0 ;和;和INCR: INC DL INCR: INC DL ;构成一个自然数;构成一个自然数第第5 5章章 分支与循环程序设计分支与循环程序设计MOV AL,DLMOV AL,DLMOV SH,ALMOV SH,ALMUL AHMUL AHADD BX,AX ADD BX,AX ;计算累加和;计算累加和INC CL INC CL ;计项数;计项数CMP BX,1000CMP BX,1000JA

38、ATORENJA ATORENJMP INCR JMP INCR ;和;和=1000=1000,继续求下一项,继续求下一项STOREN:MOV T,CLSTOREN:MOV T,CLMOV AH,4CHMOV AH,4CHINT 21HINT 21HCOSEG ENDSCOSEG ENDS END START END START第第5 5章章 分支与循环程序设计分支与循环程序设计v【例【例5-105-10】 请用冒泡排序法编程将内存请用冒泡排序法编程将内存ARRAYARRAY单元开场存储的一组单元开场存储的一组8 8位带符号数据按位带符号数据按从大到小陈列从大到小陈列 v编制多重循环程序时要留

39、意内外循环应完全编制多重循环程序时要留意内外循环应完全嵌套在外循环内,不得出现内外循环交叉,嵌套在外循环内,不得出现内外循环交叉,内外循环的初始化部分也不能混淆。内外循环的初始化部分也不能混淆。v冒泡法:冒泡法:N N个数要进展个数要进展N-1N-1趟。第一趟从第一趟。第一趟从第一个开场一次对相邻两个数进展比较,假设数个开场一次对相邻两个数进展比较,假设数的大小次序错误,那么交换,否那么不作任的大小次序错误,那么交换,否那么不作任何操作。进展何操作。进展N-1N-1次比较终了时,最小数排在次比较终了时,最小数排在最后。然后,进展第二趟,只需求进展最后。然后,进展第二趟,只需求进展N-2N-2次

40、次比较,就可排好次小数。第三趟,进展比较,就可排好次小数。第三趟,进展N-3N-3次次比较,比较,依次类推。依次类推。第第5 5章章 分支与循环程序设计分支与循环程序设计第第5 5章章 分支与循环程序设计分支与循环程序设计DATA SEGMENT DATA SEGMENT NUMNUMDBDB5,9,8,7,3,155,9,8,7,3,15LENLENEQUEQU$-NUM$-NUMDATA ENDSDATA ENDSCODE SEGMENT CODE SEGMENT ASSUME ASSUME CS:CODE,DS:DATACS:CODE,DS:DATASTART:START:MOV AX,

41、DATAMOV AX,DATAMOV DS,AX MOV DS,AX MOV CX,LENMOV CX,LEN DEC CX DEC CX;CX;CX比较趟数,即外循环次数比较趟数,即外循环次数第第5 5章章 分支与循环程序设计分支与循环程序设计LOP1:LOP1: MOV DX,CXMOV DX,CX; ; 保管外循环次数在保管外循环次数在DXDX,内循环比较次,内循环比较次数在数在CXCX中。中。 MOV SI,0 MOV SI,0 LOP2: LOP2: MOV AL,NUMSI MOV AL,NUMSI CMP AL,ANUMSI+1 CMP AL,ANUMSI+1 ; ;相邻两数据比较相邻两数据比较 JAE CONT JAE CONT XCHG XCHG AL,NUMSI+1 AL,NUMSI+1 MOV MOV NUMSI,AL NUMSI,ALCONT :INC SI ;CONT :INC SI ;修正数据地址指针修正数据地址指针LOOP LOP2LOOP LOP2; ; 内循环终了内循环终了 MOV CX,DX MOV CX,DX ;恢复外循环计数值;恢复外循环计数值LOOP LOP1 LOOP LOP1 ;外循环能否终了;外循环能否终了第第5 5章章 分支与循环程序设计分支与循环程序设计MOV AH,4CHMOV AH,4CHIN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论