循环和分支程序设计书.ppt
《循环和分支程序设计书.ppt》由会员分享,可在线阅读,更多相关《循环和分支程序设计书.ppt(104页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、循环和分支程序设计书现在学习的是第1页,共104页5.1概述l5.1.1汇编语言程序设计的一般步骤l5.1.2流程图返回本章首页返回本章首页现在学习的是第2页,共104页5.1.1 汇编语言程序设计的一般步骤返回本节返回本节现在学习的是第3页,共104页汇编语言程序设计一般有以下几个步骤:(1)分析题意,确定算法;分析和理解题意,找出合理的算法及适当的数据结构;(2)根据算法画出程序流程图;(3)根据流程图编制程序;(4)上机调试程序;任何程序必须经过调试才能检查出你的设计思想是否正确,以及你的程序是否符合你的设计思想。调试时可用工具DEBUG进行调试。程序结构有:顺序、循环、分支、和子程序四
2、种数据结构。(5)运行程序;现在学习的是第4页,共104页5.1.2 流程图l1流程图的概念l流程图是由特定的几何图形、指向线、文字说明来表示数据处理的步骤,形象描述逻辑控制结构以及数据流程的示意图。流程图具有简洁、明了、直观的特点。2流程图符号表示流程图符号表示(1)起止框:表示程序的)起止框:表示程序的开始和结束。开始和结束。起止框起止框现在学习的是第5页,共104页(2)判断框(3)处理框)处理框(4)调用框)调用框 现在学习的是第6页,共104页l(5)指向线(6)连接框)连接框 返回本节返回本节现在学习的是第7页,共104页l5.2顺序程序设计顺序程序设计l下面举例说明顺序程序的设计
3、。l例5.1数组中存放若干个字节元素。将两个数组对应元素相加,运算结果存放在第三个数组相应结果单元中。本例每个数组有1个元素,每个元素占1字节长。l(1)E:MASMEDITC100.ASMlDATASEGMENTlDATA1DB1;被加数lDATA2DB5;加数lDATA3DB0;和初值lDATAENDSlCODESEGMENTlASSUMECS:CODE,DS:DATA现在学习的是第8页,共104页lSTART:MOVAX,DATAlMOVDS,AXlMOVSI,0lCLC;清进位标志;清进位标志lMOVAL,DATA1SIlADCAL,DATA2SI;字节相加;字节相加lMOVDATA3
4、SI,ALl;-输出显示部分输出显示部分-lMOVBX,OFFSETDATA3lMOVDL,BXlADDDL,30HlMOVAH,2lINT21Hl;-返回返回DOS-lMOVAX,4C00HlINT21HCODEENDSlENDSTART现在学习的是第9页,共104页l(2)E:MASMMASMC100.ASMl(3)E:MASMLINKC100l(4)E:MASMC100l6l(5)lE:MASMDEBUGC100.EXE现在学习的是第10页,共104页5.2顺序程序设计l【例5.2】试编写一程序计算以下表达式的值。l=(v-(*+-540)/xl式中x、v均为有符号字数据。l设、的值存放
5、在字变量、V中,结果存放在双字变量之中,程序的流程图如图5.1所示。返回本章首页返回本章首页现在学习的是第11页,共104页图图5 5.1 1 顺顺序序运运算算程程序序流流程程图图现在学习的是第12页,共104页l源程序如下:lDATASEGMENTlXDW200lYDW100lZDW3000lVDW10000lWDW2DUP(?)lDATAENDSlSTACKSEGMENTSTACKlDB200DUP(0)lSTACKENDSlCODESEGMENTlASSUMEDS:DATA,CS:CODE,SS:STACK现在学习的是第13页,共104页lSTART:MOVAX,DATAlMOVDS,A
6、X;DATAAXlMOVAX,XlIMULY;(;(X)*(Y)DX:AXlMOV CX,AXlMOVBX,DX;(;(DX:AX)(BX:CX)lMOVAX,ZlCWD;(;(Z)符号扩展)符号扩展lADDCX,AXlADCBX,DX;(BX:CX)+(DX:AX)(BX:CX)lSUBCX,540lSBBBX,0;(;(BX:CX)-540(BX:CX)lMOVAX,V现在学习的是第14页,共104页lCWD;(V)符号扩展lSUB AX,CXlSBBDX,BX;(DX:AX)-(BX:CX)(DX:AX)lIDIVX;(DX:AX)/XlMOVW,AX;商WlMOVW+2,DX;余数DX
7、W+2lMOVAH,4CHlINT 21HlCODEENDS;退出DOS状态lENDSTART现在学习的是第15页,共104页5.3分支程序设计l5.3.1用条件转移指令实现程序分支l5.3.2用跳转表实现多路分支返回本章首页返回本章首页现在学习的是第16页,共104页1、分支程序的结构形式:分支程序结构可以有两种形式:一个是二路分支:IFTHENELSE形式;一个是多路分支:CASE形式;常用的语句:5.3.1 用条件转移指令实现程序分支JZ结果为零JNZ结果不为零JS/结果为负JNS结果为正JL小于JLE小于等于JG大于JGE大于等于现在学习的是第17页,共104页在某一种确定条件下,只能
8、执行多个分之中一个分支。在某一种确定条件下,只能执行多个分之中一个分支。例例5.3 5.3 已知已知X=80,X值在数据段中定义,编写程序:值在数据段中定义,编写程序:若若X50则则Z=X+Y,否则否则Z=X-Y,结果存入,结果存入Z。X,Y,Z均为字数据。均为字数据。DATASEGMENTlXDW80;数据段中;数据段中DATAENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAlMOVDS,AXMOVAX,XCMPAX,50JGHIGHSUBAX,YJMPEXITHIGH:ADDAX,YEXIT:MOVZ,AXlMOVA
9、H,4CHlINT21HCODEENDSlENDSTART现在学习的是第18页,共104页l【例5.4】编写计算下面函数值的程序:l1X0lY=0 X=0l-1 Xhigh,则查找失败,置则查找失败,置CF=1,退出程序。,退出程序。否则,计算中点:否则,计算中点:mid(low+high)/2;K与中点元素与中点元素rmid比较,若比较,若k=rmid,则查找成功,退出程序;则查找成功,退出程序;若若krmid,则转步骤(则转步骤(5);lowmid+1,转转低半部查找低半部查找(lower),highmid-1,返回步骤(返回步骤(2),继续查找),继续查找高半部查找高半部查找(highe
10、r),lowmid+1,返回步骤(返回步骤(3),继续查找),继续查找现在学习的是第31页,共104页流程图如下:现在学习的是第32页,共104页DsegsegmentLow_idxdw?;低地址元素的下标.High_idxdw?;高地址元素的下标.Dsegends.现在学习的是第33页,共104页B_searchprocnearMovax,55;查找元素“55”(ax)Cmpax,es:di+2;(ax)第一个元素,比较.Jachk_last;(ax)第一个元素,则到chk_lastLeasi,es:di+2;(ax)第一个元素,则第一个元素SJeexit;(ax)=第一个元素,则退出.St
11、c;(ax)第一个元素,则CF=1,未找Jmpexit;退出.Chk_last:Movsi,es:di;元素个数S.Shlsi,1;长度*2=到最后元素(下标)的字节数Addsi,di;形成最后元素的地址Cmpax,es:si;比较,high_idxcmpcx,dx;若lowhigh,则转no_match,置cjano_match:int(low+high)/2cx(中间)addcx,dx;shrcx,1;中间元素下标(si)movsi,cx;shlsi,1;将下标值*2形成元素偏移地址compare:;数组基地址BX+元素偏移量元素地cmpax,es:bx+si;址bx+si.(ax)与中间
12、元素bx+si比较jeexit;若相等则退出jahigher;若(ax)(mid)则转high现在学习的是第35页,共104页ax中间元素:;若(ax)(mid)inccx;1、中间元素下标值:(cx)(cx)+movlow_idx,cx;2、low_idx(cx)将中间元素变为低地址元素jmpmid.;3、转mid,计算中间元素No_match:Stc;未找到,置cf=1Exit:Popds;弹出dsRetB_searchendp 程序首先把查找值与数组的第一个元素和最后一个元素相比较,如果找到或该数小于第一个元素或大于最后一个元素,则结束查找,否则从SEARCH开始折半查找。现在学习的是第
13、36页,共104页SEARCH从SEARCH开始,首先把数组长度作为数组中间元素下标,把它从数组的第一个单元中取出来,并使它成为偶数,然后再把下标加到DI中以形成数组的中间元素的地址并开始比较查找;如果比较相等则转至ALL_DONE结束查找;否则要确定下一步的查找是在数组的低半部还是高半部中进行。它们要做的工作是:首先检查下标是否等于2,如果等于2则说明整个查找失败,应把CF置1并转至ALL_DONE结束查找;其次,把下标除以2,以便做进一步的折半查找,然后使下标形成偶数值;如果要在低半部查找,则从当前的地址(DI)中减去下标值(si)以形成新的查找地址;如果要在高半部查找,则把下标值加到当前
14、地址值中。以上过程重复进行直到下标值减到2或者查找值找到为止。现在学习的是第37页,共104页Dsegsegment定义数据段Starteddw?存放数组的首地址DsegendsCsegsegment代码段BsearchprocfarAssumecs:cseg,ds:dsegPushdsPushaxMovax,dsegMovds,axPopax;将已存入ax中的数弹出Cmpax,es:di+2;(ax)第一个元素吗?Jachklast;到CHKLAST开始比较大于现在学习的是第38页,共104页 取偏移地址leasi,es:di+2;到时,则取地址存入sijeexit;=退出,CF=0不置位s
15、tc;置CF=1,未找到转EXITjmpexitchklast:movsi,es:di;取第一单元中数组长度shlsi,1;长度*2=最后元素下标addsi,d;形成最后元素地址cmpax,es:si;比较jbsearch;最后元素,置CF=1,退出jmpexitsearch:movstarad,di;将起始地址存入startadmovsi,es:di;取长度(si)evenr:testsi,1;是偶数则第0位为1jzaddI;当ZF=1时则为全0,为偶数现在学习的是第39页,共104页incsi;为奇数+1形成偶数addiadddi,si;形成查找元素的地址compare:cmpax,es:
16、di;比较(ax)=?es:dijealldone:=则转alldonejahigher;ax则到高半部cmpsi,2;si=2jneidxok;不为2则继续查找nomatch:stc;CF=1,未找到jealldoneidxok:shrsi,1;(si)/2=si逻辑右移0testsi,1;为偶数吗?jesubidx;是incsi;否则加1subidx:subdi,si;再低半部,di-si形成jmpshartcompare;元素地址higher:cmpsi,2;在高半部现在学习的是第40页,共104页jenomatch;未找到,置CF=1shrsi,2;(si)/2(si)jmpshort
17、evenisi;转eveni,将di+s高半部alldone:movsi,dmovdi,startaddr元素的位置Sexit:popds偏移位置retbsearchendpcsegendsend如果数组如下:ListDw12、11、22、33、44、55、66、77、88、99、111、222、333.要求查找的数为(ax)=55。数组长度为12,第一次比较的是数组的第6个元素66;因5533.所以第三次用高半部折半查找,比较的是第五个元素55.这样经过三次比较后,因查找成功而退出程序。如果要查找的数是(ax)=57.现在学习的是第41页,共104页则第二次比较的仍是第六个元素66;因573
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 分支 程序设计
限制150内