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

下载本文档

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

文档简介

分支程序设计第1页,课件共34页,创作于2023年2月4.1条件标志位的设置规则

决定转移的标志位(1)进位标志CF 当无符号数运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1;否则置0(2)零标志ZF 若运算结果为0,则ZF=1;否则ZF=0(3)符号标志SF 运算结果最高位为1,则SF=1;否则SF=0(4)溢出标志OF 若无符号数运算的结果有溢出,则OF=1;否则OF=0(5)奇偶标志PF 当运算结果中“1”的个数为零或偶数时,PF=1;否则PF=0第2页,课件共34页,创作于2023年2月4.1条件标志位的设置规则MOV指令不影响标志位;加减指令影响上述所有标志,但增1和减1指令不影响CF;乘除指令只影响CF和OF设AX=78C4H,BX=9F35H.通过示例观察每条指令执行后对标志位的影响 CF SF OF ZF PFADDAX,BX 1 0 0 0 ADDAH,AL 0 1 1 0 ADDAH,BL 0 1 0 0 SUBAX,BX SUBBX,BXSUBAH,BH第3页,课件共34页,创作于2023年2月4.2.1无条件转移指令(OPD+2)→CS注意:

实际编程时,汇编程序会根据目标地址的距离,自动处理成短转移、近转移或远转移程序员可用操作符short、nearptr或farptr强制返回首页JMPFARPTR标号JMPNEARPTR标号JMPDWORDPTROPDJMPWORDPTROPD第4页,课件共34页,创作于2023年2月例请写出下列转移指令的寻址方式,并求出执行该转移指令后,IP寄存器、CS寄存器的内容是什么?TABLE是字变量,变量的值是100H;PROG是近标号,表示偏移地址200H,ECX的内容02D37650H,段属性值为38E0H。当前IP的内容是1000H,CS的内容是38ACH,DS的内容是28E0H,BX的内容是10H,DI的内容是20H。①JMPPROG②JMPWORDPTR[BX]③JMPDWORDPTRTABLE[BX]④JMPECX⑤JMPFARPTRPROG⑥JMP[BX][DI]③段间间接寻址执行该指令后(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)=(28E30H)①段内直接程序存储器寻址执行该指令后(IP)=(PROG)偏移属性=0200H②段内间接程序存储器寻址执行该指令后(IP)=((DS)*10H+(BX))=(28E00H+10H)=(28E10H)第5页,课件共34页,创作于2023年2月JMP指令:段内直接转移第6页,课件共34页,创作于2023年2月JMP指令:段内寄存器间接转移第7页,课件共34页,创作于2023年2月JMP指令:段间直接转移第8页,课件共34页,创作于2023年2月JMP指令:段间间接转移第9页,课件共34页,创作于2023年2月4.2.2条件转移指令1.简单条件转移指令2.无符号数条件转移指令3.有符号数条件转移指令

格式:Jcc短标号功能:指定的条件cc如果成立,程序转移到由短标号指定的目标地址去执行指令;条件不成立,则程序将顺序执行转移指令的下一条指令返回首页条件标志位的设置规则第10页,课件共34页,创作于2023年2月1.简单条件转移指令例题4.1例题4.2例题4.3例题4.4例题4.5第11页,课件共34页,创作于2023年2月例4.1:JZ/JNZ指令 testal,80h ;测试最高位 jznext0 ;D7=0(ZF=1),转移 movah,0ffh ;D7=1,顺序执行 jmpdone ;无条件转向next0: movah,0done: ... testal,80h ;测试最高位 jnznext1 ;D7=1(ZF=0),转移 movah,0 ;D7=0,顺序执行 jmpdone ;无条件转向next1: movah,0ffhdone: ...第12页,课件共34页,创作于2023年2月例4.2:JS/JNS指令计算|X-Y|(绝对值)。X和Y为存放于X单元和Y单元的16位操作数,结果存入result。 movax,X subax,Y jnsnonneg negax ;neg是求补指令 andax,7fffhnonneg: movresult,ax第13页,课件共34页,创作于2023年2月例4.3:JO/JNO指令计算X-Y。X和Y为存放于X单元和Y单元的16位操作数,若溢出,则转移到overflow处理。 movax,X subax,Y jooverflow ... ;无溢出,结果正确overflow: ... ;有溢出处理第14页,课件共34页,创作于2023年2月例4.4:JP/JNP指令设字符的ASCII码在AL寄存器中,将字符加上奇校验位,在字符ASCII码中为“1”的个数已为奇数时,则令其最高位为“0”;否则令最高位为“1” andal,7fh ;最高位置“0”,同时判断“1”的个数 jnpnext ;个数已为奇数,则转向next oral,80h ;否则,最高位置“1”next: ...第15页,课件共34页,创作于2023年2月例4.5:JC/JNC指令记录BX中1的个数 xoral,al ;AL=0,CF=0again: testbx,0ffffh;等价于cmpbx,0 jenext shlbx,1 jncagain incal jmpagainnext: ... ;AL保存1的个数

xoral,al ;AL=0,CF=0again: cmpbx,0 jznext shlbx,1 ;也可使用shrbx,1 adcal,0 jmpagainnext: ... ;AL保存1的个数另一种做法第16页,课件共34页,创作于2023年2月2.无符号数条件转移指令【例】比较无符号数大小,将较大的数存放AX寄存器CMP AX,BX;(AX)-(BX)JNB NEXT ;若AX>=BX,转移到NEXTXCHG AX,BX;若AX<BX,交换NEXT:…第17页,课件共34页,创作于2023年2月3.有符号数条件转移指令SFOF=0+SFSFSF【例】比较有符号数大小,将较大的数存放在AX寄存器CMP AX,BX ;(AX)-(BX)JNL NEXT ;若AX>=BX,转移到NEXTXCHG AX,BX ;若AX<BX,交换NEXT:…第18页,课件共34页,创作于2023年2月4.2分支结构程序设计4.2.1汇编语言程序设计的一般步骤4.2.2流程图4.2.3分支程序设计返回首页第19页,课件共34页,创作于2023年2月4.2.1汇编语言程序设计的一般步骤汇编语言程序设计一般有以下几个步骤:1.分析问题,确定算法2.绘制流程图3.根据流程图编制程序5.调试程序返回本节第20页,课件共34页,创作于2023年2月4.2.2流程图1.流程图的概念

流程图是由特定的几何图形、指向线、文字说明来表示数据处理的步骤,形象描述逻辑控制结构以及数据流程的示意图。流程图具有简洁、明了、直观的特点。2.流程图符号表示(1)起止框:表示程序的开始和结束。起止框(2)判断框

(3)处理框

(4)调用框

(5)指向线

(6)连接框

返回本节第21页,课件共34页,创作于2023年2月4.2.3分支程序设计一、用条件转移指令实现程序分支二、多路分支练习分支程序根据条件是真或假决定执行不同的程序段判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志通过转移指令可以实现分支控制返回本节第22页,课件共34页,创作于2023年2月一、用条件转移指令实现程序分支1、单分支[例4.6]计算AX的绝对值法1:cmpax,0

jnsnonneg;分支条件:AX≥0negax;条件不满足,求补nonneg:movresult,ax ;条件满足BadAx<0?Ax求补n法2:cmpax,0

jlyesneg;分支条件:AX<0jmpnonnegyesneg:negax;条件不满足,求补nonneg:movresult,ax;条件满足第23页,课件共34页,创作于2023年2月【例4.7】无符号数除以2

将AX中存放的无符号数除以2,如果是奇数,则加1后除以2

testax,01h

;测试AX最低位

jzeven

;最低位为0:AX为偶数

addax,1 ;最低位为1:AX为奇数,需要加1even:

rcrax,1 ;AX←AX÷2注意:如果采用SHR指令,则不能处理AX=FFFFH的特殊情况第24页,课件共34页,创作于2023年2月2、双分支第25页,课件共34页,创作于2023年2月例、比较两个字符串是否相等,等则显示YES,不等时显示NODATA SEGMENTS1DB‘1234GR9’L1 EQU$-S1S2DB‘1234GF5’L2 EQU$-S2RES1DB‘YES’,‘$’RES2DB‘NO’,‘$’DATA ENDSCODE SEGMENTASSUMEDS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AXMOVCX,L1CMPCX,L2JNZRESULTNST: CLD LEASI,S1 LEADI,S2 REPZCMPSB JNZRESULTN LEADX,RES1 JMPDISPRESULTN: LEADX,RES2DISP: MOVAH,9 INT21H MOVCX,4C00H INT21HCODEENDS ENDSTART第26页,课件共34页,创作于2023年2月【练习】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。 设三个带符号数分别在三个字变量X、Y、Z中存储。STAC SEGMENTSTACK DB200DUP(0)STACK ENDSDATA SEGMENTX DW00ABHY DW–5Z DW200MAX DW?DATA ENDSCODE SEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA MOV DS,AXMOV AX,XCMP AX,Y ;X>Y?

JGLLMOV AX,Y ;Y>Z?LL:CMP AX,ZJG EXIT

MOV AX,ZEXIT:

MOV MAX,AXMOV AX,4C00HINT21HCODE ENDSEND START返回第27页,课件共34页,创作于2023年2月二、多分支程序设计1)由多个双分支构成多分支2)地址法表实现多分支3)转移法表实现多分支4)逻辑分解法实现多分支返回第28页,课件共34页,创作于2023年2月1)由多个双分支构成多分支1 X>0Y=0 X=0-1 X设输入数据为X、输出数据Y,且皆为字节变量。DATA SEGMENTX DB-10Y DB?DATA ENDSSTACK SEGMENTSTACK DB200DUP(0)STACK ENDSCODE SEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:

MOV AX,DATAMOV DS,AX CMP X,0 ;与0进行比较

JS A2 JNS A1 ;X≥0转A1 MOV Y,0 JMP EXITA1:

MOVY,1 JMP EXITA2:

MOV Y,-1 EXIT:

MOV AX,4C00H INT 21HCODEENDS END START返回本节Y=1Y=-1Y=0X<0X>0第29页,课件共34页,创作于2023年2月2)地址法表实现多分支将各分支程序段的入口地址依次存入数据段的一个表中,形成地址表。取各分支程序段的编号作为各分支入口地址的表地址的位移量。某程序段入口地址的表地址为: 表地址=编号*2+入口地址首地址例如:从低到高逐位检查一个字节数据,找出第一个非0位的数,并显示其位置DATA SEGMENTNUM DB 78HADDR Dw AD0,AD1,AD2,AD3,AD4,AD5,AD6,AD7DATA ENDS右移1位显示?=0?显示相应位数CF=0?取数第30页,课件共34页,创作于2023年2月CODE SEGMENTASSUMEDS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX MOVAL,NUM MOV DL,’?’ CMPAL,0 JZ EXIT MOVBX,0AGAIN:SHR AL,1 JC NEXT INC BX JMP AGAINNEXT: SHL BX,1

JMP ADDR[BX]AD0: MOV DL,30H JMP EXITAD1: MOV DL,31H JMP EXITAD2: MOV DL,32H JMP EXITAD3: MOV DL,33H JMP EXITAD4: MOV DL,34H JMP EXITAD5: MOV DL,35H JMP EXITAD6: MOV DL,36H JMP EXITAD7: MOV DL,37HEXIT: MOV AH,2 INT 21H MOV AX,4C00H INT 21HCODEENDS ENDSTART返回本节右移1位显示?=0?显示相应位数CF=0?取数第31页,课件共34页,创作于2023年2月3)转移法表实现多分支【例4.9】设某程序有8路分支,试根据给定的N值(1~8),将程序的执行转移到其中的一路分支。

多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多分支可以化解为双分支或单分支结构的组合DATA SEGMENTTAB DWP1,P2,P3,P4,P5,P6,P7,P8NDB5DATA ENDSSTACK SEGMENT DB200DUP(0)STACK ENDSCODE SEGMENT

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:

MOV AX,DATA MOV DS,AX

┆ MOV AL,N DEL AL ADD AL,AL MOV BL,AL MOV BH,0 JMP TAB[BX]P1:

……

┆ JMP EXITP2:

……

┆ JMP EXITP2:

……

┆ JMP EXITP3:

……

┆ JMP EXIT

┆P8:

……

┆EXIT:

MOV AX,4C00H INT 21HCODE ENDS END START返回本节无条件转移指令的转移地址采用的是变址寻址。若转移地址用寄存器间接寻址或基址加变址寻址则应如何修改程序? MOV AL,N DEL AL ADD AL,AL MOV BL,AL MOV BH,0 JMP TAB[BX]P1:

……

┆ JMP EXITP

温馨提示

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

评论

0/150

提交评论