《基本程序设计优秀课件.ppt》由会员分享,可在线阅读,更多相关《基本程序设计优秀课件.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基本程序基本程序设计设计第1页,本讲稿共58页 基本程序设计是使用单一结构的程序设计,它是程序设计基本程序设计是使用单一结构的程序设计,它是程序设计的基础。程序有三种基本结构,即顺序结构、分支结构和循环的基础。程序有三种基本结构,即顺序结构、分支结构和循环结构。任何复杂的程序都是由基本结构组成的。因此,一定要结构。任何复杂的程序都是由基本结构组成的。因此,一定要掌握基本程序设计的方法。对于汇编语言程序设计而言,更要掌握基本程序设计的方法。对于汇编语言程序设计而言,更要掌握好基本程序的设计,这是编写复杂程序的基础。掌握好基本程序的设计,这是编写复杂程序的基础。本章将分别介绍各种基本程序设计的方法
2、及子程序的设计。本章将分别介绍各种基本程序设计的方法及子程序的设计。4.1 顺序程序设计4.2 分支程序设计4.3 循环程序设计实训一 分支程序设计实训二 循环程序设计v第第4 4章章 基本程序设计基本程序设计第2页,本讲稿共58页 顺序程序是最简单程序设计,这种程序不使用分支、循环结构,程序按顺顺序程序是最简单程序设计,这种程序不使用分支、循环结构,程序按顺序执行,只能完成相对简单的操作。限于这种特点,在进行顺序程序设计时应序执行,只能完成相对简单的操作。限于这种特点,在进行顺序程序设计时应合理安排指令的先后顺序,以完成相应的功能。合理安排指令的先后顺序,以完成相应的功能。在较为复杂的程序中
3、,顺序程序是逐段出现,它主要完成一些简单操作或在较为复杂的程序中,顺序程序是逐段出现,它主要完成一些简单操作或过程的准备、任务的过渡、结果的存储及程序结束等。它是程序的基本组成部过程的准备、任务的过渡、结果的存储及程序结束等。它是程序的基本组成部分。以下以结合几个实例说明顺序程序的基本方法,它们是以后各种复杂程序分。以下以结合几个实例说明顺序程序的基本方法,它们是以后各种复杂程序设计的基础。设计的基础。4.1 4.1 顺序程序设计顺序程序设计返回本章首页返回本章首页进入下一节进入下一节v第第4 4章章 基本程序设计基本程序设计第3页,本讲稿共58页4.1.1 4.1.1 存储单元内容移位存储单
4、元内容移位 存储单元移位是指其中的内容左移或右移若干位。现举例存储单元移位是指其中的内容左移或右移若干位。现举例说明。说明。【例【例4.1 4.1】将将AXAX寄存器中的内容左移寄存器中的内容左移2 2位,字存储单元位,字存储单元DATDAT中的内容右移中的内容右移3 3位位(移位后的空位补移位后的空位补0).0).分析分析:内容移位一般由移位指令实现内容移位一般由移位指令实现,但要求移后空位为但要求移后空位为0 0,故应使用逻辑移位指令。当移位次数大于故应使用逻辑移位指令。当移位次数大于1 1时,可将移位次数放时,可将移位次数放至至CLCL中进行移位。操作如下:中进行移位。操作如下:MOVM
5、OVCLCL,2 2 SHLSHLAXAX,CLCLINCINCCLCLSHRSHRDATDAT,CLCLv第第4 4章章 基本程序设计基本程序设计第4页,本讲稿共58页4.1.2 4.1.2 乘法运算乘法运算 汇编语言本身也是比较灵活的,乘法运算可用乘法指令直接完汇编语言本身也是比较灵活的,乘法运算可用乘法指令直接完成,有时候也可以由移位指令或加法指令完成。成,有时候也可以由移位指令或加法指令完成。【例【例4.2 4.2】将寄存器将寄存器ALAL的内容乘的内容乘1010,结果存至,结果存至DXDX寄存器。寄存器。分析:对一个数进行乘分析:对一个数进行乘1010运算,可以直接使用乘法指令实现,
6、运算,可以直接使用乘法指令实现,也可由移位指令或加法指令实现,方法分别如下:也可由移位指令或加法指令实现,方法分别如下:1 1用乘法指令实现用乘法指令实现MOVMOVBL,BL,1010IMUL IMUL BLBL;AXALBL=AL10AXALBL=AL10MOVMOVDXDX,AXAXv第第4 4章章 基本程序设计基本程序设计第5页,本讲稿共58页2 2用移位指令实现用移位指令实现 移位操作时,在最高位不变化时,左移一位,相当原数乘移位操作时,在最高位不变化时,左移一位,相当原数乘2 2,因此也可以用移位操作实现乘,因此也可以用移位操作实现乘1010运算。运算。XORXORAHAH,AHA
7、H;AHAH清零清零SALSALAXAX,1 1;AXAX2AXAX2MOVMOVBXBX,AXAX;存至;存至BXBX寄存器寄存器MOVMOVCLCL,2 2SALSALAXAX,CLCL;AXAX8AXAX8ADDADDAXAX,BXBX;AXAX10AXAX10v第第4 4章章 基本程序设计基本程序设计第6页,本讲稿共58页3 3用加法指令实现用加法指令实现 一个数与自己相加可以实现乘一个数与自己相加可以实现乘2 2运算,多次累加就可以实现运算,多次累加就可以实现乘乘1010运算。运算。MOVMOVAHAH,0 0ADDADDAXAX,AXAX;AXAX2AXAX2MOVMOVBXBX,
8、AXAX;存至;存至BXBX寄存器寄存器ADDADDAXAX,AXAX;AXAX4AXAX4ADDADDAXAX,AXAX;AXAX8AXAX8ADDADDAXAX,BXBX;AXAX10AXAX10v第第4 4章章 基本程序设计基本程序设计第7页,本讲稿共58页4.1.3 4.1.3 屏蔽与置位屏蔽与置位 对字节或字变量中的某些位进行置对字节或字变量中的某些位进行置0 0操作,称为屏蔽操作。操作,称为屏蔽操作。使某些位强迫置使某些位强迫置1 1则是置位操作。它们是数据处理常用的方法。则是置位操作。它们是数据处理常用的方法。【例【例4.3 4.3】将字节类型变量】将字节类型变量DATDAT的高
9、的高4 4位置位置0,0,其余各位保持不其余各位保持不变。变。解解:屏蔽操作多用逻辑运算指令实现屏蔽操作多用逻辑运算指令实现.本例使用逻辑与指令完本例使用逻辑与指令完成。任何位与成。任何位与0 0相与,结果都为相与,结果都为0 0,由此达到该位被屏蔽的目的。,由此达到该位被屏蔽的目的。非屏蔽位应与非屏蔽位应与1 1相与相与,以保证该位不变以保证该位不变.MOVMOVALAL,DATDATANDANDALAL,0FH0FH;屏蔽高四位;屏蔽高四位MOVMOVDATDAT,AXAXv第第4 4章章 基本程序设计基本程序设计第8页,本讲稿共58页 通过逻辑运算指令也很容易实现字或字节的置位操作。一般
10、使用通过逻辑运算指令也很容易实现字或字节的置位操作。一般使用逻辑或指令实现置位操作逻辑或指令实现置位操作 。例如把上例中例如把上例中DATDAT变量的高四位置变量的高四位置1 1,用下面指令即实现即可:,用下面指令即实现即可:OR OR DATDAT,0F0H0F0Hv第第4 4章章 基本程序设计基本程序设计第9页,本讲稿共58页4.1.4 4.1.4 拆字与合字拆字与合字 【例例4.4 4.4】将存储单元】将存储单元DATDAT中两位压缩的中两位压缩的BCDBCD数拆成二个非压缩数拆成二个非压缩BCDBCD数数(高位高位BCDBCD数放在数放在DAT+1DAT+1单元,低位单元,低位BCDB
11、CD数放在数放在DAT+2DAT+2单元单元)。分析:将分析:将DATDAT单元中的单元中的BCDBCD数拆开可用移位的方法。对高位数拆开可用移位的方法。对高位BCDBCD数可逻辑右移数可逻辑右移4 4位而成位而成为非压缩数;低位为非压缩数;低位BCDBCD数可屏蔽其高四位而成为非压缩数可屏蔽其高四位而成为非压缩BCDBCD数。指令如下:数。指令如下:MOVMOVAL,DATAL,DATMOVMOVCL,4CL,4SHRSHRAL,CLAL,CL;得到高位;得到高位BCDBCD数数MOVMOVDAT+1,ALDAT+1,ALMOVMOVAL,DATAL,DATANDANDAL,0FHAL,0F
12、H;得到低位;得到低位BCDBCD数数MOVMOVDAT+2,ALDAT+2,ALv第第4 4章章 基本程序设计基本程序设计第10页,本讲稿共58页 【例例4.54.5】将存储单元】将存储单元DAT1DAT1和和DAT2DAT2中分别存有两个非压缩的中分别存有两个非压缩的BCDBCD数,数,将其合成一个压缩将其合成一个压缩BCDBCD数数(DAT1DAT1单元为高位单元为高位BCDBCD数,数,DAT2DAT2单元为低位单元为低位BCDBCD数数),结果存入,结果存入DAT0DAT0单元。单元。分析:将两个单元中的分析:将两个单元中的BCDBCD数合并可用加法指令与移位指令相结合数合并可用加法
13、指令与移位指令相结合的方法。其中高位的方法。其中高位BCDBCD数可由数可由DAT1DAT1单元数据逻辑左移单元数据逻辑左移4 4位得到;再与位得到;再与DAT2DAT2单元相加即可完成合并。指令如下:单元相加即可完成合并。指令如下:MOVMOVAL,DAT0AL,DAT0MOVMOVCL,4CL,4SHLSHLAL,CLAL,CLADDADDAL,DAT1AL,DAT1MOVMOVDAT0,ALDAT0,ALv第第4 4章章 基本程序设计基本程序设计第11页,本讲稿共58页4.1.5 4.1.5 数据与数据与ASCIIASCII码的相互转换码的相互转换 编程中经常要用到数据显示的问题,通常的
14、做法是将要显示编程中经常要用到数据显示的问题,通常的做法是将要显示的数据转换为的数据转换为ASCIIASCII码后,再调用相关的中断来显示。在二、十、码后,再调用相关的中断来显示。在二、十、十六等常用进制的数据中,最为复杂的是十六进制数据的显示,十六等常用进制的数据中,最为复杂的是十六进制数据的显示,查阅查阅ASCIIASCII表可知,数据表可知,数据0 09 9的的ASCASC码为该数据加上码为该数据加上30H30H,数据,数据A AF F的的ASCIIASCII码为该数据加上码为该数据加上37H37H。对于从键盘上输入的数据,由于。对于从键盘上输入的数据,由于是以是以ASCIIASCII码
15、形式输入的,通常转换为数据本身再进行处理,其码形式输入的,通常转换为数据本身再进行处理,其转换的方法较多,但通常的方法是上述过程的逆过程,即对转换的方法较多,但通常的方法是上述过程的逆过程,即对30H30H39H39H(0 09 9的的ASCASC码)减去码)减去30H30H,数据,数据41H41H46H46H(A AF F的的ASCIIASCII码)码)减去减去37H37H。下面举例说明。下面举例说明。v第第4 4章章 基本程序设计基本程序设计第12页,本讲稿共58页 【例例4.64.6】在字节存储单元】在字节存储单元DATDAT中有两位十六进制的数据为中有两位十六进制的数据为6AH6AH,
16、要求将该,要求将该数据显示到屏幕上。数据显示到屏幕上。分析:要实现该十六进制数据的显示,一般是调用分析:要实现该十六进制数据的显示,一般是调用DOSDOS或或BIOSBIOS提供的中提供的中断,而这些中断几乎都要求将要显示的内容转换为断,而这些中断几乎都要求将要显示的内容转换为ASCIIASCII码。以下用码。以下用DOSDOS系统系统功能调用的功能调用的2 2号功能完成字符显示。程序如下:号功能完成字符显示。程序如下:DATADATASEGMENTSEGMENTDATDATDBDB6AH6AHDATADATAENDSENDSCODECODESEGMENTSEGMENTASSUME CSASS
17、UME CS:CODECODE,DSDS:DATA DATA v第第4 4章章 基本程序设计基本程序设计第13页,本讲稿共58页STARTSTART:MOVMOVAXAX,DATADATAMOVMOVDSDS,AXAXMOVMOVDLDL,DATDATMOVMOVALAL,DLDL;暂存至;暂存至ALAL寄存器寄存器MOVMOVCLCL,4 4SHRSHRDLDL,CLCLADDADDDLDL,30H30H;高位十六进制数据;高位十六进制数据66转换为转换为ASCIIASCII码码MOVMOVAHAH,02H02HINTINT21H21H;显示;显示MOVMOVDLDL,ALALANDANDD
18、LDL,0FH0FHADDADDDLDL,37H37H;低位十六进制数据;低位十六进制数据AA转换为转换为ASCIIASCII码码INTINT21H21H;显示;显示MOVMOVAHAH,4CH4CHINTINT21H21HCODECODEENDSENDSENDENDSTARTSTARTv第第4 4章章 基本程序设计基本程序设计第14页,本讲稿共58页4.1.6 4.1.6 简单算术运算简单算术运算【例例4.7 4.7】在字存储单元】在字存储单元A A、B B和和C C中分别存放着一个有符号数,求(中分别存放着一个有符号数,求(C C89H89HABAB)/A/A,商和余数分别存入字存储单元,
19、商和余数分别存入字存储单元D D和和E E。分析:直接用有符号数运算指令完成即可。程序如下:分析:直接用有符号数运算指令完成即可。程序如下:DATADATASEGMENTSEGMENTA ADWDW1234H1234HB BDWDW5678H5678HC CDWDW3456H3456HD DDWDW?E EDWDW?DATADATAENDSENDSCODECODESEGMENTSEGMENTASSUME CS:CODE,DS:DATAASSUME CS:CODE,DS:DATAv第第4 4章章 基本程序设计基本程序设计第15页,本讲稿共58页START:START:MOVMOVAX,DATAA
20、X,DATAMOVMOVDS,AXDS,AXMOVMOVAX,CAX,CSUBSUBAX,89HAX,89HCWDCWD;扩展为双字;扩展为双字MOVMOVCX,DXCX,DXMOVMOVBX,AXBX,AX;结果暂存至;结果暂存至CX,BXCX,BXMOVMOVAX,AAX,AIMULIMULB B;求;求ABABADDADDAX,BXAX,BXADCADCDX,CXDX,CX;与前面结果相加;与前面结果相加IDIVIDIVA A;AXAX是商,是商,DXDX是余数是余数MOVMOVD,AXD,AXMOVMOVE,DXE,DX;保存结果;保存结果MOVMOVAH,4CHAH,4CHINTIN
21、T21H21HCODECODEENDSENDSENDENDSTARTSTARTv第第4 4章章 基本程序设计基本程序设计第16页,本讲稿共58页4.1.7 4.1.7 查表查表【例例4.8 4.8】在以】在以TABLETABLE为首地址的内存中顺序存有为首地址的内存中顺序存有0 01010的平方数表。今从键盘上的平方数表。今从键盘上输入一个数(输入一个数(1111),求其平方值,结果保存至),求其平方值,结果保存至RSLTRSLT单元。单元。分析:因为平方表已顺序排放在内存中。又已知首地址分析:因为平方表已顺序排放在内存中。又已知首地址TABLETABLE,只要把输入数据,只要把输入数据作为位
22、移量与首址相加,就指向了表中平方值的地址,取其内容即为该数的平方作为位移量与首址相加,就指向了表中平方值的地址,取其内容即为该数的平方值。程序如下:值。程序如下:DATADATASEGMENTSEGMENTTABLETABLEDB 0DB 0,1 1,4 4,9 9,1616,2525,3636,4949,6464,8181,100100RSLTRSLTDBDB?DATADATAENDSENDSCODECODESEGMENTSEGMENTASSUME CSASSUME CS:CODECODE,DSDS:DATADATAv第第4 4章章 基本程序设计基本程序设计第17页,本讲稿共58页START
23、START:MOVMOVAXAX,DATADATAMOVMOVDSDS,AXAXMOVMOVAHAH,00H00HINTINT16H16H;输入数据;输入数据ANDANDALAL,0FH0FH;将;将ASCIIASCII码转换为数据码转换为数据XORXORBXBX,BXBXMOVMOVBLBL,ALAL;存至;存至BXBXLEALEASISI,TABLETABLEMOVMOVALAL,SI+BXSI+BX;查表;查表MOVMOVRSLTRSLT,ALAL;保存结果;保存结果MOVMOVAHAH,4CH4CHINTINT21H21HCODECODEENDSENDSENDENDSTARTSTART
24、返回本章首页返回本章首页v第第4 4章章 基本程序设计基本程序设计第18页,本讲稿共58页4.2 4.2 分支程序设计分支程序设计 分支程序使计算机具备判断能力,计算机可以根据给定的条件进行判断,并作分支程序使计算机具备判断能力,计算机可以根据给定的条件进行判断,并作出相应的处理,它可以把程序分成不同的处理段,实现情况不同的处理,从而使计出相应的处理,它可以把程序分成不同的处理段,实现情况不同的处理,从而使计算机具有一定的算机具有一定的思维思维能力。这是顺序程序所能不能实现的。所以,分支程序是能力。这是顺序程序所能不能实现的。所以,分支程序是程序的重要组成结构之一。汇编语言的分支主要由转移指令
25、实现,而过多的转移指程序的重要组成结构之一。汇编语言的分支主要由转移指令实现,而过多的转移指令会使程序的结构变得复杂,因而进行分支程序设计时进行合理安排是至关重要的。令会使程序的结构变得复杂,因而进行分支程序设计时进行合理安排是至关重要的。返回本章首页返回本章首页返回上一节返回上一节进入下一节进入下一节v第第4 4章章 基本程序设计基本程序设计第19页,本讲稿共58页4.2.1 4.2.1 单重分支单重分支 单重分支是最简单的分支结构,如果条件成立则完成某项操作,否单重分支是最简单的分支结构,如果条件成立则完成某项操作,否则执行其它操作或后续指令。其结构可以用图则执行其它操作或后续指令。其结构
26、可以用图4-14-1来表示。来表示。(a)条件不成立执行后续指令 (b)条件不同执行不同操作 条件?处理 Yes No 条件?处理2 Yes No 处理1 v第第4 4章章 基本程序设计基本程序设计第20页,本讲稿共58页【例例4.9 4.9】在存储单元】在存储单元DATDAT中存放着一位十六进制数,将其显示到屏幕上。中存放着一位十六进制数,将其显示到屏幕上。分析:本题只需对该位十六进制数进行判断,方法同例分析:本题只需对该位十六进制数进行判断,方法同例4.64.6相同。程序如下:相同。程序如下:DATADATASEGMENTSEGMENTDATDATDBDB0CH0CHDATADATAEND
27、SENDSCODECODESEGMENTSEGMENTASSUME CS:CODE,DS:DATAASSUME CS:CODE,DS:DATAv第第4 4章章 基本程序设计基本程序设计第21页,本讲稿共58页START:START:MOVMOVAX,DATAAX,DATAMOV MOV DS,AXDS,AXMOVMOVAL,DATAL,DATCMPCMPAL,9AL,9JGJGOTHROTHRADDADDAL,30HAL,30H;小于;小于1010则转换为数字(则转换为数字(0 09 9)JMPJMPDISPDISPOTHR:OTHR:ADDADDAL,37HAL,37H;大于;大于1010则
28、转换为大写字母(则转换为大写字母(A AF F)DISP:DISP:MOVMOVDL,ALDL,ALMOVMOVAH,2AH,2INTINT21H21HDONE:DONE:MOVMOVAH,4CHAH,4CHINTINT21H21HCODE CODE ENDSENDSENDENDSTARTSTARTv第第4 4章章 基本程序设计基本程序设计第22页,本讲稿共58页【例【例4.10 4.10】在字节存储单元在字节存储单元X X、Y Y中各有一个无符号数。根据这两个中各有一个无符号数。根据这两个无符号数的大小,在屏幕显示无符号数的大小,在屏幕显示XYXY或或X XY Y。分析:两个无符号数比较大小
29、常用的方法是使用比较指令分析:两个无符号数比较大小常用的方法是使用比较指令CMPCMP,根据其,根据其对标志位的影响用无符号条件转移指令实现转移。程序如下:对标志位的影响用无符号条件转移指令实现转移。程序如下:DATADATASEGMENTSEGMENTDAT0DAT0DBDB98H98HDAT1DAT1DBDB0A0H0A0HDATADATAENDSENDSCODECODESEGMENTSEGMENTASSUME CS:CODE,DS:DATAASSUME CS:CODE,DS:DATAv第第4 4章章 基本程序设计基本程序设计第23页,本讲稿共58页START:START:MOVMOVAX
30、,DATAAX,DATAMOVMOVDS,AXDS,AXMOVMOVALAL,X XCMPCMPY Y,ALAL;比较;比较JAJAYGXYGX;X X大则转大则转YGEXYGEXMOVMOVALAL,JMPJMPDISPDISPYGXYGX:MOVMOVALAL,DISPDISP:MOVMOVDLDL,X X;显示比较结果;显示比较结果MOVMOVAHAH,2 2 INTINT21H21HMOVMOVDLDL,ALALINTINT21H21HMOVMOVDLDL,YYINTINT21H21HMOVMOVAHAH,4CH4CHINTINT21H21HCODE CODE ENDSENDSENDE
31、NDSTARTSTARTv第第4 4章章 基本程序设计基本程序设计第24页,本讲稿共58页 本例中,根据比较结果影响本例中,根据比较结果影响CFCF标志位。利用标志位。利用JAJA指令实现分支转移,即指令实现分支转移,即YXYX时转时转YGDXYGDX。在分支处理中分别为显示结果作准备(分别准备显示。在分支处理中分别为显示结果作准备(分别准备显示XYXY或或X XY Y)。)。DISPDISP标号开始的程序段是用来显示结果的。标号开始的程序段是用来显示结果的。v第第4 4章章 基本程序设计基本程序设计第25页,本讲稿共58页4.2.2 4.2.2 多重分支多重分支 在程序设计中,更多的情况是对
32、几个条件同时进行判断从而确定程序在程序设计中,更多的情况是对几个条件同时进行判断从而确定程序的转移方向,此时只能采用数个单重分支的组合来完成,这就是多重分支的转移方向,此时只能采用数个单重分支的组合来完成,这就是多重分支结构。结构。【例【例4.11 4.11】编写一程序】编写一程序,求:求:X+10H X+10H (X0X10X10)其中其中X X、Y Y都是有符号字变量都是有符号字变量 分析:本题有三个条件进行判断,故属于多重分支程序设计。在进行分析:本题有三个条件进行判断,故属于多重分支程序设计。在进行较为复杂的分支程序设计时,应先处理简单分支,再处理复杂分支,这样较为复杂的分支程序设计时
33、,应先处理简单分支,再处理复杂分支,这样更方便编程。程序如下:更方便编程。程序如下:v第第4 4章章 基本程序设计基本程序设计第26页,本讲稿共58页STACKSTACKSEGMENT PARA STACK STACK SEGMENT PARA STACK STACK DB DB 100 DUP(0)100 DUP(0)STACK STACK ENDSENDSDATADATASEGMENT SEGMENT X XDW?DW?Y YDW?DW?DATADATAENDSENDSCODECODESEGMENTSEGMENTASSUME CS:CODE,DS:DATAASSUME CS:CODE,DS
34、:DATASTARTSTART:MOV MOV AX,DATAAX,DATAMOV MOV DS,AXDS,AXMOV MOV AX,XAX,XCMP CMP AX,0AX,0JGEJGECASE23CASE23ADDADDAX,10HAX,10H;第一种情况的计算结果;第一种情况的计算结果JMP JMP RESULTRESULTv第第4 4章章 基本程序设计基本程序设计第27页,本讲稿共58页CASE23:CASE23:CMPCMPAX,10DAX,10DJGJGCASE3CASE3MOVMOVBX,30DBX,30DIMULIMULBXBX;第二种情况的计算结果;第二种情况的计算结果JMP
35、JMPRESULTRESULTCASE3:CASE3:SUBSUBAX,190HAX,190H;第三种情况的计算结果;第三种情况的计算结果RESULT:RESULT:MOVMOVY,AXY,AX;结果保存到变量;结果保存到变量Y Y中中 MOVMOVAH,4CHAH,4CHINTINT21H21HCODECODEENDSENDSEND END START STARTv第第4 4章章 基本程序设计基本程序设计第28页,本讲稿共58页4.2.3 4.2.3 用地址表实现分支用地址表实现分支 当程序分支比较复杂时,可将各分支的入口地址存于地址表中,以实现当程序分支比较复杂时,可将各分支的入口地址存于
36、地址表中,以实现分支程序设计。分支程序设计。【例【例4.12 4.12】从键盘上输入一个数(】从键盘上输入一个数(55),求其平方值,结果保存至),求其平方值,结果保存至RSLTRSLT单元。单元。分析:本题可用例分析:本题可用例4.84.8的方法,也可以用地址表实现。程序如下:的方法,也可以用地址表实现。程序如下:DATADATASEGMENTSEGMENTADDRADDRDWDWC0,C1,C2,C3,C4C0,C1,C2,C3,C4RSLTRSLTDWDW?DATADATAENDSENDSCODECODESEGMENTSEGMENTASSUME CS:CODE,DS:DATAASSUME
37、 CS:CODE,DS:DATAv第第4 4章章 基本程序设计基本程序设计第29页,本讲稿共58页START:START:MOVMOVAX,DATAAX,DATAMOVMOVDS,AXDS,AXAGAIN:AGAIN:MOVMOVAH,00HAH,00HINTINT16H16H;输入数据;输入数据CMPCMPAL,0AL,0JBJBAGAINAGAINCMPCMPAL,4AL,4JAJAAGAINAGAIN;不在不在0 04 4之间,重新输入之间,重新输入ANDANDAL,0FHAL,0FH;ASCIIASCII码转换为数据码转换为数据SHLSHLAL,1AL,1;地址表为字类型,故乘地址表为
38、字类型,故乘2 2XORXORAH,AHAH,AHLEALEABX,ADDRBX,ADDRADDADDBX,AXBX,AXJMPJMPWORD PTRBXWORD PTRBX;用地址表实现分支;用地址表实现分支v第第4 4章章 基本程序设计基本程序设计第30页,本讲稿共58页C0:C0:MOVMOVAL,0AL,0JMPJMPSAVESAVE;0 0的平方是的平方是0 0C1:C1:MOVMOVAL,1AL,1JMPJMPSAVESAVE;1 1的平方是的平方是1 1C2:C2:MOVMOVAL,2AL,2MOVMOVBL,ALBL,ALMULMULBLBLJMPJMPSAVESAVE;2 2
39、的平方是的平方是2*22*2C3:C3:MOVMOVAL,3AL,3MOVMOVBL,ALBL,ALMULMULBLBLJMPJMPSAVESAVE;3 3的平方是的平方是3*33*3C4:C4:MOVMOVAL,4AL,4MOVMOVBL,ALBL,ALMULMULBLBL;4 4的平方是的平方是4*44*4SAVE:SAVE:MOVMOVRSLT,AXRSLT,AX;保存;保存MOVMOVAH,4CHAH,4CHINTINT21H21HCODE CODE ENDSENDSENDENDSTARTSTART返回本章首页返回本章首页v第第4 4章章 基本程序设计基本程序设计第31页,本讲稿共58
40、页4.3 4.3 循环程序设计循环程序设计 在进行程序设计时,会出现某段程序反复多次执行的情况,在进行程序设计时,会出现某段程序反复多次执行的情况,如果这段程序是连在一起反复执行的,则可用循环程序结构来如果这段程序是连在一起反复执行的,则可用循环程序结构来实现。其方法是用重复次数或某个条件控制循环程序的执行。实现。其方法是用重复次数或某个条件控制循环程序的执行。采用循环程序结构不仅使程序变得简洁清晰,而且减少程序对采用循环程序结构不仅使程序变得简洁清晰,而且减少程序对内存的占用,因此,循环程序是重要的程序结构之一。内存的占用,因此,循环程序是重要的程序结构之一。返回本章首页返回本章首页返回上一
41、节返回上一节进入下一节进入下一节v第第4 4章章 基本程序设计基本程序设计第32页,本讲稿共58页4 4.3.1 .3.1 循环程序的结构循环程序的结构 循环程序是多种多样的,但一般认为循环程序由四部分构成:循环程序是多种多样的,但一般认为循环程序由四部分构成:1 1初始化部分初始化部分 本部分主要为循环程序作准备工作,如置循环次数、地址指针或关键字,寄本部分主要为循环程序作准备工作,如置循环次数、地址指针或关键字,寄存器置初值及标志位设置等。存器置初值及标志位设置等。2 2循环工作部分循环工作部分 本部分是实际进行工作的部分,是循环结构的主体。本部分是实际进行工作的部分,是循环结构的主体。3
42、 3参数调整部分参数调整部分 本部分实现地址指针或循环次数的修改等,以便继续循环。本部分实现地址指针或循环次数的修改等,以便继续循环。4 4循环控制部分循环控制部分 本部分循环条件的检查,以判断是否继续循环。本部分循环条件的检查,以判断是否继续循环。以上四部分中,以上四部分中,2 2、3 3、4 4有时统称为循环体。循环程序根据循环控制条件的不有时统称为循环体。循环程序根据循环控制条件的不同,通常又分两种结构,如图同,通常又分两种结构,如图4-24-2所示。所示。v第第4 4章章 基本程序设计基本程序设计第33页,本讲稿共58页(a)先工作后判断循环条件该结构为后判断型循环,循环次数已知,多用
43、该结构为后判断型循环,循环次数已知,多用LOOPLOOP指令等构造循环。指令等构造循环。初始初始化化 循环条件满足?循环条件满足?处处 理理 YesYes NoNo v第第4 4章章 基本程序设计基本程序设计第34页,本讲稿共58页(b)(b)先判断循环条件后工作先判断循环条件后工作 该结构为先判断型循环,循环次数未知,多用条件转移指令构造循环。该结构为先判断型循环,循环次数未知,多用条件转移指令构造循环。初始初始化化 NoNo 循环条件满足?循环条件满足?处理处理 YesYes v第第4 4章章 基本程序设计基本程序设计第35页,本讲稿共58页4.3.2 4.3.2 单重循环单重循环 单重循
44、环程序结构,程序中只有一个循环体,循环体内不再含有其它循单重循环程序结构,程序中只有一个循环体,循环体内不再含有其它循环体,下面举例说明。环体,下面举例说明。【例【例4.13 4.13】求】求1 1400400的所有偶数的和,结果保存到的所有偶数的和,结果保存到RSLTRSLT存储单元。存储单元。分析:分析:1 1400400间共有间共有200200个偶数,故需要加个偶数,故需要加200200次,也就是说循环次数为次,也就是说循环次数为200200。由于程序中由于程序中CXCX寄存器同时充当了循环计数器和寄存器同时充当了循环计数器和200200个偶数值,使每一次循环个偶数值,使每一次循环CXC
45、X的值减的值减2 2,故,故CXCX初值为初值为400400。程序如下:。程序如下:DATADATASEGMENTSEGMENTRSLTRSLTDWDW?DATADATAENDSENDSCODECODESEGMENTSEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATAv第第4 4章章 基本程序设计基本程序设计第36页,本讲稿共58页STARTSTART:MOVMOVAXAX,DATADATAMOVMOVDSDS,AXAXMOVMOVCXCX,400400XORXORAXAX,AXAXNEXTNEXT:ADDADDAXAX,CXCX;计算偶数和;计
46、算偶数和DECDECCXCXDECDECCXCXJNZJNZNEXTNEXT;200200个数未完则继续循环个数未完则继续循环MOVMOVRSLTRSLT,AXAX;保存结果;保存结果MOVMOVAHAH,4CH4CHINTINT21H21HCODECODEENDSENDSENDENDSTARTSTARTv第第4 4章章 基本程序设计基本程序设计第37页,本讲稿共58页【例【例4.14 4.14】在以】在以DATDAT为首地址的字缓冲区中存有一批数据为首地址的字缓冲区中存有一批数据,数据个数为数据个数为1010,编,编程找出其最大的值,结果存入程找出其最大的值,结果存入RSLTRSLT单元。单
47、元。分析:求最大值通常采用逐个比较法,即把第一个数做比较标准,与其后的分析:求最大值通常采用逐个比较法,即把第一个数做比较标准,与其后的数比较。如标准数大,则再与下一个数比较;如果标准数小,则取大数做标数比较。如标准数大,则再与下一个数比较;如果标准数小,则取大数做标准数。由于循环次数已知,故可采用图准数。由于循环次数已知,故可采用图4-24-2(a a)的结构。程序如下:)的结构。程序如下:DATADATASEGMENTSEGMENTDATDATDWDW1234H1234H,0ABH0ABH,0ABCDH0ABCDH,9999H9999H,0 0DWDW1 1,5678H5678H,0BBC
48、CH0BBCCH,9876H9876H,5678H5678HRSLTRSLTDWDW?DATADATAENDSENDSCODECODESEGMENTSEGMENTASSUME CS:CODE,DS:DATAASSUME CS:CODE,DS:DATAv第第4 4章章 基本程序设计基本程序设计第38页,本讲稿共58页START:START:MOVMOVAX,DATAAX,DATAMOVMOVDS,AXDS,AXLEALEASI,DATSI,DAT;SISI做地址指针做地址指针MOVMOVAX,SIAX,SIMOVMOVCX,9CX,9;1010个数共比较个数共比较9 9次次INCINCSISII
49、NCINCSISINEXT:NEXT:CMPCMPAX,SIAX,SIJGEJGEGOONGOON;AXAX大于下一个数则转大于下一个数则转GOONGOONMOVMOVAX,SIAX,SI;否则将大值付给;否则将大值付给AXAXGOON:GOON:INCINCSISIINCINCSISI;修改地址指针;修改地址指针LOOPLOOPNEXTNEXT;循环;循环MOVMOVRSLT,AXRSLT,AX;保存结果;保存结果MOVMOVAH,4CHAH,4CHINTINT21H21HCODECODEENDSENDSENDENDSTARTSTARTv第第4 4章章 基本程序设计基本程序设计第39页,本讲
50、稿共58页【例【例4.15 4.15】在以】在以DATDAT为首地址的字缓冲区中存有一批数据为首地址的字缓冲区中存有一批数据,以以*作为结束,编程作为结束,编程找出其最大的值,结果存入找出其最大的值,结果存入RSLTRSLT单元。单元。分析:本例与例分析:本例与例4.144.14的不同在于数据个数未知,但有一个条件知道,就是该批的不同在于数据个数未知,但有一个条件知道,就是该批数据以数据以*结束,故属于条件控制循环,循环次数未知的结构,即图结束,故属于条件控制循环,循环次数未知的结构,即图4-24-2(b b)的结)的结构。程序如下:构。程序如下:DATADATASEGMENTSEGMENTD