资源描述:
《《分支循环结构部分》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、标号:条件满足?处理4.4.3分支程序NYIF…THEN结构程序结构:…测试/比较指令(TEST/CMP)条件转移指令(Jx标号)处理体标号:其他指令…程序结构:TEST/CMP指令Jx标号1处理体P1JMP标号2标号1:处理体P2标号2:其他指令…条件满足?处理P1处理P2标号1:标号2:条件1条件2IF…THEN…ELSE结构标号1:条件1成立?P1NYCASE结构程序结构:…TEST/CMP指令(测试条件1)Jx标号1;不满足转标号1处理体P1…JMP标号n+1标号1:TEST/CMP指令(测试条件2)Jx标号2;不满足转
2、标号2处理体P2…JMP标号n+1标号2:TEST/CMP指令(测试条件3)Jx标号3;不满足转标号3处理体P3…JMP标号n+1标号3:TEST/CMP指令(测试条件4)……标号n+1:(公共出口)条件2成立?条件n成立?…Pn+1标号2:标号n:标号n+1:P2PnNNYY例:P178,[例4-14],统计成绩。流程图中虚线框内例题18:求某数X的绝对值,并送回原处。求X的绝对值,即要求完成下面的运算:X,X>=0Y=-X,X<0显然,这是一个分支程序,程序将根据X的值不同完成不同的运算,其流程图如图4-3所示,程序如下:首
3、先是各个段寄存器的初始化部分:STACKSEGMENTSTACKDW256DUP(?)STACKENDSDATASEGMENTXADRDW3456H,8192H;定义变量XDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA;数据段的段基址装入DSMOVDS,AXMOVAX,XADR;变量X送SX寄存器ANDAX,AX;(AX)>=0?JNSDONE;若(AX)>=0,则跳到DONENEGAX;否则求(AX)的补码MOVXADR,AX;存结果DONE:
4、MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART4.4.4循环程序1.DO…UNTIL<条件>结构先执行,再判断条件。工作部分至少执行一次。初始化循环体循环控制继续循环?YN2.DOWHILE<条件>结构先判断条件,再执行。工作部分有可能一次都不执行。初始化循环体循环控制继续循环?YN注意:循环可以嵌套(多重循环),但多个循环体之间不能交叉,控制条件不能混淆。例22:编制程序使S=1+2X3+3X4+4X5+….+N(N+1),直到N(N+1)项大于200为止。首先绘制流程图:如图4-8所示根据流程图编
5、制的程序如下所示:TITLEACCUMULATESUMCODESEGMENTASSUMECS:CODE,DS:CODE.SS:CODEORG100HSTART:MOVDX,;DX-1MOVBL,2;BL-2REPEAT:MOVAL,BL;乘积项的两个因子分别递增INCBLMULBL;N(N+1)-AXADDDX,AX;计算累加和-AXCMPAX,200;N(N+1)=<200?JNAREPEAT;若N(N+1)=<200则重复MOVRESULT,DX;否则N(N+1)>200存结果MOVAH,4CH;返回DOSINT21HORG
6、200HRESULTDW?;存放结果单元CODEENDSENDSTART掌握以下几点:调用子程序用CALL指令,返回调用程序用RET指令。子程序允许嵌套调用。进入子程序后首先要保护主程序的运行状态(标志位)和使用的寄存器内容(称为保护现场),退出子程序前要恢复现场。调用前要预先确定子程序中要使用哪些寄存器,并定义入口参数和出口参数。参数传递可利用寄存器、存储单元或堆栈(要用BP寻址)。4.4.5子程序设计举例例1:二进制数(0-F)转换成ASCII(‘0’-‘F’)的子程序。BIN2ASCPROC;要转换的数在AL的低四位;转换
7、结果仍在AL中CMPAL,9JAA2FADDAL,30HJMPDONEA2F:ADDAL,37HDONE:RETBIN2ASCENDP调用方法:(在主程序中)…MOVAL,0CHCALLBIN2ASC(AL中有0CH的ASCII码43H,’C’)作业:例题16、例题21、例题23、例题27