《分支程序设计PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《分支程序设计PPT讲稿.ppt(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、分支程序设计第1页,共34页,编辑于2022年,星期五4.1 条件标志位的设置规则决定转移的标志位(1)进位标志CF当无符号数运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1;否则置0(2)零标志ZF若运算结果为0,则ZF=1;否则ZF=0(3)符号标志SF运算结果最高位为1,则SF=1;否则SF=0(4)溢出标志 OF 若无符号数运算的结果有溢出,则OF1;否则 OF0(5)奇偶标志 PF当运算结果中“1”的个数为零或偶数时,PF=1;否则PF=0第2页,共34页,编辑于2022年,星期五4.1 条件标志位的设置规则MOV指令不影响标志位;加减指令影响上述所有标志,但增1和减
2、1指令不影响CF;乘除指令只影响CF和OF设AX=78C4H,BX=9F35H.通过示例观察每条指令执行后对标志位的影响CFSFOFZFPFADD AX,BX1000ADD AH,AL0110ADD AH,BL0100SUB AX,BXSUB BX,BXSUB AH,BH第3页,共34页,编辑于2022年,星期五4.2.1 无条件转移指令(OPD+2)CS注意注意:实实际际编编程程时时,汇汇编编程程序序会会根根据据目目标标地地址址的的距距离离,自自动动处处理理成成短短转转移移、近近转转移移或远转移或远转移 程序员可用操作符程序员可用操作符short、near ptr 或或far ptr 强制强
3、制返回首页返回首页JMP FAR PTR JMP FAR PTR 标号标号JMP NEAR PTR JMP NEAR PTR 标号标号JMP DWORD PTR OPDJMP DWORD PTR OPDJMP WORD PTR OPDJMP WORD PTR OPD第4页,共34页,编辑于2022年,星期五例 请写出下列转移指令的寻址方式,并求出执行该转移指令后,IP寄存器、CS寄存器的内容是什么?TABLE是字变量,变量的值是100H;PROG是近标号,表示偏移地址200H,ECX的内容02D3 7650H,段属性值为38E0H。当前IP的内容是1000H,CS的内容是38ACH,DS的内容
4、是28E0H,BX的内容是10H,DI的内容是20H。JMP PROG JMP WORD PTR BX JMP DWORD PTR TABLEBX JMP ECX JMP FAR PTR PROG JMP BXDI 段间间接寻址执行该指令后(IP)=(DS)*10H+(BX)+位移量)的低字=(28F10H)低字,(CS)=(DS)*10H+(BX)+位移量)的高字=(28F10H)高字 段间间接寻址,执行该指令后(IP)=(ECX)低字=7650H,(CS)=(ECX)高字=02D3H 段间直接寻址,执行该指令后(IP)=(PROG)偏移属性=0200H,(CS)=(PROG)段属性=38E
5、0H 段内间接寻址,执行该指令后(IP)=(DS)*10H+(BX)+(DI)=(28E00H+10H+20H)=(28E30H)段内直接程序存储器寻址执行该指令后(IP)=(PROG)偏移属性=0200H 段内间接程序存储器寻址执行该指令后(IP)=(DS)*10H+(BX)=(28E00H+10H)=(28E10H)第5页,共34页,编辑于2022年,星期五JMP指令:段内直接转移第6页,共34页,编辑于2022年,星期五JMP指令:段内寄存器间接转移第7页,共34页,编辑于2022年,星期五JMP指令:段间直接转移第8页,共34页,编辑于2022年,星期五JMP指令:段间间接转移第9页,
6、共34页,编辑于2022年,星期五4.2.2 条件转移指令1简单条件转移指令2无符号数条件转移指令3.有符号数条件转移指令 格式格式:Jcc:Jcc 短标号短标号功能功能:指定的条件指定的条件cccc如果成立,程序转移到由短标号指定的目标地址去如果成立,程序转移到由短标号指定的目标地址去执行指令;条件不成立,则程序将顺序执行转移指令的下一条指令执行指令;条件不成立,则程序将顺序执行转移指令的下一条指令返回首页返回首页条件标志位的设置规则条件标志位的设置规则第10页,共34页,编辑于2022年,星期五1简单条件转移指令例题例题4.1例题例题4.2例题例题4.3例题例题4.4例题例题4.5第11页
7、,共34页,编辑于2022年,星期五2无符号数条件转移指令【例】比较无符号数大小,将较大的数存放AX寄存器CMPAX,BX ;(AX)(BX)JNB NEXT ;若AX=BX,转移到NEXTXCHGAX,BX ;若AX=BXAX=BX,转移到,转移到NEXTNEXTXCHGXCHGAXAX,BXBX;若;若AXBXAXBX,交换,交换NEXTNEXT:第18页,共34页,编辑于2022年,星期五4.2 分支结构程序设计4.2.1 汇编语言程序设计的一般步骤4.2.2 流程图4.2.3 分支程序设计返回首页返回首页第19页,共34页,编辑于2022年,星期五4.2.1 汇编语言程序设计的一般步骤
8、汇编语言程序设计一般有以下几个步骤:1分析问题,确定算法2绘制流程图3根据流程图编制程序5调试程序返回本节返回本节第20页,共34页,编辑于2022年,星期五4.2.2 流程图1流程图的概念流程图是由特定的几何图形、指向线、文字说明来表示数据处理的步骤,形象描述逻辑控制结构以及数据流程的示意图。流程图具有简洁、明了、直观的特点。2流程图符号表示流程图符号表示(1)起止框:表示程序的开始和结束。)起止框:表示程序的开始和结束。起止框起止框(2)判断框)判断框(3)处理框)处理框(4)调用框)调用框(5)指向线)指向线(6)连接框)连接框 返回本节返回本节第21页,共34页,编辑于2022年,星期
9、五4.2.3 分支程序设计一、用条件转移指令实现程序分支二、多路分支练习分支程序根据条件是真或假决定执行不同的程序段分支程序根据条件是真或假决定执行不同的程序段判断的条件是各种指令,如判断的条件是各种指令,如CMP、TEST等执行后形成的等执行后形成的状态标志状态标志通过转移指令可以实现分支控制通过转移指令可以实现分支控制返回本节返回本节第22页,共34页,编辑于2022年,星期五一、用条件转移指令实现程序分支1、单分支 例例4.64.6计算计算AXAX的绝对值的绝对值法法1:cmp ax,01:cmp ax,0 jns nonnegjns nonneg;分支条件:分支条件:AX0AX0 ne
10、g ax ;neg ax ;条件不满足,求补条件不满足,求补nonneg:nonneg:mov result,axmov result,ax;条件满足条件满足 BadAx0?Ax求补n法法2:cmp ax,0 jl yesneg;分支条件:分支条件:AX0 jmp nonnegyesneg:neg ax ;条件不满足,求补条件不满足,求补nonneg:mov result,ax;条件满足条件满足第23页,共34页,编辑于2022年,星期五【例4.7】无符号数除以无符号数除以2 2 将AX中存放的无符号数除以2,如果是奇数,则加1后除以2 test ax,01htest ax,01h;测试测试A
11、XAX最低位最低位jz evenjz even;最低位为最低位为0 0:AXAX为偶数为偶数add ax,1add ax,1;最低位为最低位为1 1:AXAX为奇数,需要加为奇数,需要加1 1even:even:rcr ax,1rcr ax,1;AXAX2;AXAX2注意:如果采用注意:如果采用SHRSHR指令,则不能处理指令,则不能处理AXAXFFFFHFFFFH的特殊情况的特殊情况第24页,共34页,编辑于2022年,星期五2、双分支第25页,共34页,编辑于2022年,星期五例、比较两个字符串是否相等,等则显示YES,不等时显示NODATA SEGMENTS1 DB 1234GR9L1E
12、QU$-S1S2 DB 1234GF5L2EQU$-S2RES1 DB YES,$RES2 DB NO,$DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE START:MOVAX,DATAMOVDS,AXMOV CX,L1CMP CX,L2JNZ RESULTNST:CLDLEA SI,S1LEA DI,S2REPZ CMPSBJNZ RESULTNLEA DX,RES1JMP DISPRESULTN:LEA DX,RES2DISP:MOV AH,9INT 21HMOV CX,4C00HINT 21HCODE ENDS END START第26页,共34页
13、,编辑于2022年,星期五【练习】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。设三个带符号数分别在三个字变量X、Y、Z中存储。STACSEGMENT STACK DB 200 DUP(0)STACK ENDSDATASEGMENTX DW 00ABHY DW 5Z DW 200MAXDW?DATAENDSCODESEGMENTASSUME DS:DATA,SS:STACK,CS:CODE START:MOV AX,DATA MOV DS,AX MOVAX,X CMPAX,Y;XY?JG LL MOVAX,Y;YZ?LL:CMPAX,Z JG EXIT MOVAX,Z
14、EXIT:MOVMAX,AX MOVAX,4C00H INT 21HCODEENDS ENDSTART返回返回第27页,共34页,编辑于2022年,星期五二、多分支程序设计1)由多个双分支构成多分支2)地址法表实现多分支3)转移法表实现多分支4)逻辑分解法实现多分支返回返回第28页,共34页,编辑于2022年,星期五1)由多个双分支构成多分支 1X0Y=0X=0 -1X设输入数据为X、输出数据Y,且皆为字节变量。DATASEGMENTX DB -10Y DB?DATAENDSSTACKSEGMENT STACK DB 200 DUP(0)STACKENDSCODESEGMENTASSUME D
15、S:DATA,SS:STACK,CS:CODESTART:MOVAX,DATA MOVDS,AX CMPX,0;与;与0进行比较进行比较 JSA2JNSA1;X0转转A1MOVY,0 JMPEXITA1:MOV Y,1 JMPEXITA2:MOVY,-1EXIT:MOVAX,4C00H INT21H CODE ENDS ENDSTART返回本节返回本节Y=1Y=-1Y=0X0第29页,共34页,编辑于2022年,星期五2)地址法表实现多分支将各分支程序段的入口地址依次存入数据段的一个表中,形成地址表。取各分支程序段的编号作为各分支入口地址的表地址的位移量。某程序段入口地址的表地址为:表地址=编
16、号*2+入口地址首地址例如:从低到高逐位检查一个字节数据,找出第一个非例如:从低到高逐位检查一个字节数据,找出第一个非0位的数,位的数,并显示其位置并显示其位置DATASEGMENTNUMDB78HADDRDwAD0,AD1,AD2,AD3,AD4,AD5,AD6,AD7 DATAENDS右移1位显示?=0?显示相应位数CF=0?取数第30页,共34页,编辑于2022年,星期五CODESEGMENTASSUME DS:DATA,CS:CODE START:MOVAX,DATAMOVDS,AXMOV AL,NUMMOVDL,?CMP AL,0JZEXIT MOV BX,0AGAIN:SHRAL,
17、1JCNEXTINCBXJMPAGAINNEXT:SHLBX,1JMPADDRBXAD0:MOVDL,30HJMPEXITAD1:MOVDL,31HJMPEXITAD2:MOVDL,32HJMPEXIT AD3:MOVDL,33HJMPEXITAD4:MOVDL,34HJMPEXITAD5:MOVDL,35HJMPEXITAD6:MOVDL,36HJMPEXITAD7:MOVDL,37HEXIT:MOV AH,2INT 21HMOVAX,4C00HINT21HCODE ENDSEND START返回本节返回本节右移1位显示?=0?显示相应位数CF=0?取数第31页,共34页,编辑于2022年,
18、星期五3)转移法表实现多分支【例4.9】设某程序有8路分支,试根据给定的N值(18),将程序的执行转移到其中的一路分支。多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多分支可以化解为双分支或单分支结构的组合分支可以化解为双分支或单分支结构的组合DATASEGMENT TABDW P1,P2,P3,P4,P5,P6,P7,P8 N DB 5DATAENDSSTACKSEGMENT DB 200 DUP(0)STACK ENDSCODESEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE
19、START:MOV AX,DATAMOV DS,AX MOVAL,NDELALADDAL,ALMOVBL,ALMOVBH,0JMPTABBXP1:JMPEXITP2:JMPEXITP2:JMPEXITP3:JMPEXIT P8:EXIT:MOVAX,4C00H INT21HCODEENDS ENDSTART返回本节返回本节无条件转移指令的转移地址采用的是变址寻址。若转移地址用寄存器间接寻无条件转移指令的转移地址采用的是变址寻址。若转移地址用寄存器间接寻址或基址加变址寻址则应如何修改程序址或基址加变址寻址则应如何修改程序?MOVAL,NDELALADDAL,ALMOVBL,ALMOVBH,0JM
20、PTABBXP1:JMPEXITP2:JMPEXITLEA BX,TABMOV AH,0ADD BX,AXJMP BX第32页,共34页,编辑于2022年,星期五4)逻辑分解法实现多分支按照条件的先后,依次分解成一串双分支结构,然后按双分支的方法进行程序设计例如:根据例如:根据NUM中的内容执行不同的操作中的内容执行不同的操作AL=0显示1显示0AL=1显示2AL=2显示3AL=3DATASEGMENTNUM DB 2DATAENDSCODESEGMENTASSUME DS:DATA,CS:CODE START:MOVAX,DATAMOVDS,AXMOV AL,NUMCMP AL,0JZNEX
21、T0CMPAL,1JZNEXT1CMPAL,2JZNEXT2CMPAL,3JZNEXT3NEXT0:MOVDL,30HJMPEXITNEXT1:MOVDL,31HJMP EXITNEXT2:MOVDL,32HJMPEXITNEXT3:MOVDL,33HJMPEXITEXIT:MOV AH,2INT 21HMOVAX,4C00HINT21HCODE ENDSEND START返回本节返回本节第33页,共34页,编辑于2022年,星期五练习1、用分支结构实现将AL中的最高位内容显示出来2、若已定义整数变量A、B,编程实现如下功能1)若两数一奇一偶,将奇数存入A,偶数存入B2)若两数均是奇数,则两数均加1后存入原变量单元3)若两数均是偶数,则两变量均不变TEST AL,80HJZ NT1MOV DL,31HJMP DISPNTI:MOV DL,30HDISP:MOV AH,2INT 21H返回返回第34页,共34页,编辑于2022年,星期五