分支程序设计_第1页
分支程序设计_第2页
分支程序设计_第3页
分支程序设计_第4页
分支程序设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、分支程序设计第1页,共34页,2022年,5月20日,10点16分,星期一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年,5月20日,10点16分,星期一4.1 条件标志位的设置

2、规则MOV指令不影响标志位; 加减指令影响上述所有标志,但增1和减1指令不影响CF;乘除指令只影响CF和OF设AX=78C4H, BX=9F35H. 通过示例观察每条指令执行后对标志位的影响CFSFOFZFPFADD AX,BX1000ADD AH,AL0110ADD AH,BL0100SUB AX,BXSUB BX,BXSUB AH,BH第3页,共34页,2022年,5月20日,10点16分,星期一4.2.1 无条件转移指令(OPD+2)CS注意: 实际编程时,汇编程序会根据目标地址的距离,自动处理成短转移、近转移或远转移 程序员可用操作符short、near ptr 或far ptr 强制

3、返回首页JMP FAR PTR 标号JMP NEAR PTR 标号JMP DWORD PTR OPDJMP WORD PTR OPD第4页,共34页,2022年,5月20日,10点16分,星期一例 请写出下列转移指令的寻址方式,并求出执行该转移指令后,IP寄存器、CS寄存器的内容是什么?TABLE是字变量,变量的值是100H;PROG是近标号,表示偏移地址200H,ECX的内容02D3 7650H,段属性值为38E0H。当前IP的内容是1000H,CS的内容是38ACH,DS的内容是28E0H,BX的内容是10H,DI的内容是20H。 JMP PROG JMP WORD PTR BX JMP

4、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)段属性=38E0H 段内间接寻址,执行该指令后(IP)=(DS)*10H+(BX)+(DI)=(28E00H+10H+20H

5、)=(28E30H) 段内直接程序存储器寻址执行该指令后(IP)=(PROG)偏移属性=0200H 段内间接程序存储器寻址执行该指令后(IP)=(DS)*10H+(BX)=(28E00H+10H)=(28E10H)第5页,共34页,2022年,5月20日,10点16分,星期一JMP指令:段内直接转移第6页,共34页,2022年,5月20日,10点16分,星期一JMP指令:段内寄存器间接转移第7页,共34页,2022年,5月20日,10点16分,星期一JMP指令:段间直接转移第8页,共34页,2022年,5月20日,10点16分,星期一JMP指令:段间间接转移第9页,共34页,2022年,5月2

6、0日,10点16分,星期一4.2.2 条件转移指令1简单条件转移指令2无符号数条件转移指令3. 有符号数条件转移指令 格式: Jcc 短标号功能:指定的条件cc如果成立,程序转移到由短标号指定的目标地址去执行指令;条件不成立,则程序将顺序执行转移指令的下一条指令返回首页条件标志位的设置规则第10页,共34页,2022年,5月20日,10点16分,星期一1简单条件转移指令例题4.1例题4. 2例题4. 3例题4. 4例题4. 5第11页,共34页,2022年,5月20日,10点16分,星期一例4.1:JZ/JNZ指令test al,80h;测试最高位jz next0;D70(ZF1),转移mov

7、 ah,0ffh;D71,顺序执行jmp done;无条件转向next0:mov ah,0done:.test al,80h;测试最高位jnz next1;D71(ZF0),转移mov ah,0;D70,顺序执行jmp done;无条件转向next1:mov ah,0ffhdone:.第12页,共34页,2022年,5月20日,10点16分,星期一例4. 2:JS/JNS指令计算|XY|(绝对值)。X和Y为存放于X单元和Y单元的16位操作数,结果存入result。mov ax,Xsub ax,Yjns nonnegneg ax;neg是求补指令and ax,7fffhnonneg:mov re

8、sult,ax第13页,共34页,2022年,5月20日,10点16分,星期一例4. 3:JO/JNO指令计算XY。X和Y为存放于X单元和Y单元的16位操作数,若溢出,则转移到overflow处理。mov ax,Xsub ax,Yjo overflow.;无溢出,结果正确overflow:.;有溢出处理第14页,共34页,2022年,5月20日,10点16分,星期一例4. 4:JP/JNP指令设字符的ASCII码在AL寄存器中,将字符加上奇校验位,在字符ASCII码中为“1”的个数已为奇数时,则令其最高位为“0”;否则令最高位为“1”and al,7fh;最高位置“0”,同时判断“1”的个数j

9、np next;个数已为奇数,则转向nextor al,80h;否则,最高位置“1”next:.第15页,共34页,2022年,5月20日,10点16分,星期一例4. 5:JC/JNC指令记录BX中1的个数xor al,al;AL0,CF0again:test bx,0ffffh ;等价于 cmp bx,0je nextshl bx,1jnc againinc aljmp againnext:.;AL保存1的个数xor al,al;AL0,CF0again:cmp bx,0jz nextshl bx,1;也可使用 shr bx,1adc al,0jmp againnext:.;AL保存1的个数

10、另一种做法第16页,共34页,2022年,5月20日,10点16分,星期一2无符号数条件转移指令【例】比较无符号数大小,将较大的数存放AX寄存器CMPAX, BX ;(AX)(BX)JNBNEXT ;若AX=BX,转移到NEXTXCHGAX,BX ;若AX=BX,转移到NEXTXCHGAX,BX;若AXBX,交换NEXT:第18页,共34页,2022年,5月20日,10点16分,星期一4.2 分支结构程序设计4.2.1 汇编语言程序设计的一般步骤4.2.2 流程图4.2.3 分支程序设计返回首页第19页,共34页,2022年,5月20日,10点16分,星期一4.2.1 汇编语言程序设计的一般步

11、骤汇编语言程序设计一般有以下几个步骤:1分析问题,确定算法2绘制流程图3根据流程图编制程序5调试程序返回本节第20页,共34页,2022年,5月20日,10点16分,星期一4.2.2 流程图1流程图的概念流程图是由特定的几何图形、指向线、文字说明来表示数据处理的步骤,形象描述逻辑控制结构以及数据流程的示意图。流程图具有简洁、明了、直观的特点。2流程图符号表示(1)起止框:表示程序的开始和结束。起止框(2)判断框 (3)处理框 (4)调用框 (5)指向线 (6)连接框 返回本节第21页,共34页,2022年,5月20日,10点16分,星期一4.2.3 分支程序设计一、用条件转移指令实现程序分支二

12、、多路分支练习分支程序根据条件是真或假决定执行不同的程序段判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志通过转移指令可以实现分支控制返回本节第22页,共34页,2022年,5月20日,10点16分,星期一一、 用条件转移指令实现程序分支1、单分支例4.6计算AX的绝对值法1: cmp ax,0 jns nonneg ;分支条件:AX0 neg ax ;条件不满足,求补nonneg:mov result,ax;条件满足 BadAx0?Ax求补n法2: cmp ax,0 jl yesneg ;分支条件:AX0 jmp nonnegyesneg:neg ax ;条件不满足,求补non

13、neg:mov result,ax ;条件满足第23页,共34页,2022年,5月20日,10点16分,星期一【例4.7】无符号数除以2 将AX中存放的无符号数除以2,如果是奇数,则加1后除以2test ax,01h;测试AX最低位jz even;最低位为0:AX为偶数add ax,1;最低位为1:AX为奇数,需要加1even:rcr ax,1;AXAX2注意:如果采用SHR指令,则不能处理AXFFFFH的特殊情况第24页,共34页,2022年,5月20日,10点16分,星期一2、双分支第25页,共34页,2022年,5月20日,10点16分,星期一例、比较两个字符串是否相等,等则显示YES,

14、不等时显示NODATASEGMENTS1 DB 1234GR9L1EQU $-S1S2 DB 1234GF5L2EQU $-S2RES1 DB YES,$RES2 DB NO,$DATAENDSCODESEGMENTASSUME 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,4C00H

15、INT 21HCODE ENDS END START第26页,共34页,2022年,5月20日,10点16分,星期一【练习】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。设三个带符号数分别在三个字变量X、Y、Z中存储。STACSEGMENT STACK DB 200 DUP(0)STACKENDSDATASEGMENTX DW 00ABHY DW 5Z DW 200MAXDW ?DATAENDSCODESEGMENTASSUME DS:DATA,SS:STACK,CS:CODE START: MOVAX,DATA MOVDS,AX MOVAX,X CMPAX,Y;XY

16、? JG LL MOVAX,Y;YZ?LL: CMPAX,Z JG EXIT MOVAX,ZEXIT: MOVMAX,AX MOVAX,4C00H INT 21HCODEENDS ENDSTART返回第27页,共34页,2022年,5月20日,10点16分,星期一二、多分支程序设计1)由多个双分支构成多分支2)地址法表实现多分支3)转移法表实现多分支4)逻辑分解法实现多分支返回第28页,共34页,2022年,5月20日,10点16分,星期一1)由多个双分支构成多分支 1X0Y= 0X=0 -1X设输入数据为X、输出数据Y,且皆为字节变量。DATASEGMENTX DB -10Y DB ?DAT

17、AENDSSTACKSEGMENT STACK DB 200 DUP(0)STACKENDSCODESEGMENTASSUME DS: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年,5月20日,10点16分,星期一2)地址法表实现多分支将各分支程序段的

18、入口地址依次存入数据段的一个表中,形成地址表。取各分支程序段的编号作为各分支入口地址的表地址的位移量。某程序段入口地址的表地址为:表地址=编号*2+入口地址首地址例如:从低到高逐位检查一个字节数据,找出第一个非0位的数,并显示其位置DATASEGMENTNUMDB78HADDRDwAD0,AD1,AD2,AD3,AD4,AD5,AD6,AD7 DATAENDS右移1位显示?=0?显示相应位数CF=0?取数第30页,共34页,2022年,5月20日,10点16分,星期一CODESEGMENTASSUME DS:DATA,CS:CODE START:MOVAX,DATAMOVDS,AXMOV AL

19、,NUMMOVDL, ?CMP AL,0JZEXIT MOV BX,0AGAIN:SHRAL,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返回

20、本节右移1位显示?=0?显示相应位数CF=0?取数第31页,共34页,2022年,5月20日,10点16分,星期一3)转移法表实现多分支【例4.9】设某程序有8路分支,试根据给定的N值(18),将程序的执行转移到其中的一路分支。多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多分支可以化解为双分支或单分支结构的组合DATASEGMENT TABDW P1,P2,P3,P4,P5,P6,P7,P8 N DB 5DATAENDSSTACKSEGMENT DB 200 DUP(0)STACKENDSCODESEGMENT ASSUME DS:DATA, SS:STACK, CS:CODE START:MOVAX,DATAMOVDS,AXMOVAL,NDELALADDAL,ALMOVBL,ALMOVBH,0JMPTABBXP1:JMPEXITP2:JMPEXITP2: JMPEXITP3: JMPEXITP8:EXIT:MOVAX,4C00H INT21HCODEENDS ENDSTART返回本节无条件转移指令的转移地址采用的是变址寻址。若转移地址用寄存器间接寻址或基址加变址寻址则应如何修改程序?MOVAL,NDELALADDAL,ALMOVBL,ALMOVBH,0JMPTABBXP1:JMPEXITP2:JMPEXITLEA BX,T

温馨提示

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

评论

0/150

提交评论