收藏 分享(赏)

第4章 分支程序设计.ppt

上传人:gnk289057 文档编号:9180562 上传时间:2019-07-27 格式:PPT 页数:34 大小:588KB
下载 相关 举报
第4章  分支程序设计.ppt_第1页
第1页 / 共34页
第4章  分支程序设计.ppt_第2页
第2页 / 共34页
第4章  分支程序设计.ppt_第3页
第3页 / 共34页
第4章  分支程序设计.ppt_第4页
第4页 / 共34页
第4章  分支程序设计.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、第4章 分支程序设计,4.1 条件标志位的设置规则 4.2 转移指令4.2.1 无条件转移指令4.2.2 条件转移指令 4.3 分支结构程序设计,控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变,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当运算

2、结果中“1”的个数为零或偶数时,PF = 1;否则PF = 0,4.1 条件标志位的设置规则,MOV指令不影响标志位; 加减指令影响上述所有标志,但增1和减1指令不影响CF;乘除指令只影响CF和OF 设AX=78C4H, BX=9F35H. 通过示例观察每条指令执行后对标志位的影响CF SF OF ZF PF ADD AX,BX 1 0 0 0 ADD AH,AL 0 1 1 0 ADD AH,BL 0 1 0 0 SUB AX,BX SUB BX,BX SUB AH,BH,4.2.1 无条件转移指令,(OPD+2)CS,注意: 实际编程时,汇编程序会根据目标地址的距离,自动处理成短转移、近转

3、移或远转移程序员可用操作符short、near ptr 或far ptr 强制,返回首页,JMP FAR PTR 标号,JMP NEAR PTR 标号,JMP DWORD PTR OPD,JMP WORD PTR OPD,例 请写出下列转移指令的寻址方式,并求出执行该转移指令后,IP寄存器、CS寄存器的内容是什么?TABLE是字变量,变量的值是100H;PROG是近标号,表示偏移地址200H,ECX的内容02D3 7650H,段属性值为38E0H。当前IP的内容是1000H,CS的内容是38ACH,DS的内容是28E0H,BX的内容是10H,DI的内容是20H。, JMP PROG JMP W

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

5、)=(28E00H+10H+20H)=(28E30H), 段内直接程序存储器寻址 执行该指令后(IP)=(PROG)偏移属性=0200H 段内间接程序存储器寻址 执行该指令后(IP)=(DS)*10H+(BX)=(28E00H+10H) =(28E10H),JMP指令:段内直接转移,JMP指令:段内寄存器间接转移,JMP指令:段间直接转移,JMP指令:段间间接转移,4.2.2 条件转移指令,1简单条件转移指令 2无符号数条件转移指令 3. 有符号数条件转移指令,格式: Jcc 短标号功能:指定的条件cc如果成立,程序转移到由短标号指定的目标地址去执行指令;条件不成立,则程序将顺序执行转移指令的

6、下一条指令,返回首页,条件标志位的设置规则,1简单条件转移指令,例题4.1,例题4. 2,例题4. 3,例题4. 4,例题4. 5,例4.1:JZ/JNZ指令,test al,80h ;测试最高位jz next0 ;D70(ZF1),转移mov ah,0ffh ;D71,顺序执行jmp done ;无条件转向 next0: mov ah,0 done: .test al,80h ;测试最高位jnz next1 ;D71(ZF0),转移mov ah,0 ;D70,顺序执行jmp done ;无条件转向 next1: mov ah,0ffh done: .,例4. 2:JS/JNS指令,计算|XY

7、|(绝对值)。X和Y为存放于X单元和Y单元的16位操作数,结果存入result。mov ax,Xsub ax,Yjns nonnegneg ax ;neg是求补指令and ax,7fffh nonneg: mov result,ax,例4. 3:JO/JNO指令,计算XY。X和Y为存放于X单元和Y单元的16位操作数,若溢出,则转移到overflow处理。mov ax,Xsub ax,Yjo overflow. ;无溢出,结果正确 overflow: . ;有溢出处理,例4. 4:JP/JNP指令,设字符的ASCII码在AL寄存器中,将字符加上奇校验位,在字符ASCII码中为“1”的个数已为奇数

8、时,则令其最高位为“0”;否则令最高位为“1”and al,7fh;最高位置“0”,同时判断“1”的个数jnp next;个数已为奇数,则转向nextor al,80h ;否则,最高位置“1” next: .,例4. 5:JC/JNC指令,记录BX中1的个数xor al,al ;AL0,CF0 again: test bx,0ffffh ;等价于 cmp bx,0je nextshl bx,1jnc againinc aljmp again next: . ;AL保存1的个数,xor al,al ;AL0,CF0 again: cmp bx,0jz nextshl bx,1 ;也可使用 shr

9、 bx,1adc al,0jmp again next: . ;AL保存1的个数,另一种做法,2无符号数条件转移指令,【例】比较无符号数大小,将较大的数存放AX寄存器 CMP AX, BX ;(AX)(BX) JNB NEXT ;若AX=BX,转移到NEXT XCHG AX,BX ;若AXBX,交换 NEXT:,3. 有符号数条件转移指令,【例】比较有符号数大小,将较大的数存放在AX寄存器 CMP AX,BX ;(AX)(BX) JNL NEXT ;若AX=BX,转移到NEXT XCHG AX,BX ;若AXBX,交换 NEXT:,4.2 分支结构程序设计,4.2.1 汇编语言程序设计的一般步

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

11、分支 练习,分支程序根据条件是真或假决定执行不同的程序段 判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志 通过转移指令可以实现分支控制,返回本节,一、 用条件转移指令实现程序分支,1、单分支,例4.6计算AX的绝对值 法1: cmp ax,0jns nonneg ;分支条件:AX0neg ax ;条件不满足,求补 nonneg:mov result,ax ;条件满足,Bad,法2: cmp ax,0jl yesneg ;分支条件:AX0jmp nonneg yesneg:neg ax ;条件不满足,求补 nonneg:mov result,ax ;条件满足,【例4.7】无符号数

12、除以2将AX中存放的无符号数除以2,如果是奇数,则加1后除以2,test ax,01h ;测试AX最低位jz even ;最低位为0:AX为偶数add ax,1 ;最低位为1:AX为奇数,需要加1 even: rcr ax,1 ;AXAX2,注意:如果采用SHR指令,则不能处理AXFFFFH的特殊情况,2、双分支,例、比较两个字符串是否相等,等则显示YES,不等时显示NO,DATA SEGMENT S1 DB 1234GR9 L1 EQU $-S1 S2 DB 1234GF5 L2 EQU $-S2 RES1 DB YES,$ RES2 DB NO,$ DATA ENDS CODE SEGME

13、NT ASSUME DS:DATA,CS:CODE START: MOV AX,DATAMOV DS,AX,MOV CX,L1 CMP CX,L2 JNZ RESULTN ST: CLDLEA SI,S1LEA DI,S2REPZ CMPSBJNZ RESULTNLEA DX,RES1JMP DISP RESULTN:LEA DX,RES2 DISP: MOV AH,9INT 21HMOV CX,4C00HINT 21H CODE ENDSEND START,【练习】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。设三个带符号数分别在三个字变量X、Y、Z中存储。,STA

14、C SEGMENT STACKDB 200 DUP(0) STACK ENDS DATA SEGMENT X DW 00ABH Y DW 5 Z DW 200 MAX DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATAMOV DS,AX,MOV AX,XCMP AX,Y ;XY?JG LLMOV AX,Y ;YZ? LL: CMP AX,ZJG EXITMOV AX,Z EXIT: MOV MAX,AXMOV AX,4C00HINT 21H CODE ENDSEND START,返回,二、

15、多分支程序设计,1)由多个双分支构成多分支 2)地址法表实现多分支 3)转移法表实现多分支 4)逻辑分解法实现多分支,返回,1)由多个双分支构成多分支,1 X0 Y= 0 X=0-1 X 设输入数据为X、输出数据Y,且皆为字节变量。,DATA SEGMENT X DB -10 Y DB ? DATA ENDS STACK SEGMENT STACKDB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA, SS:STACK, CS:CODE START: MOV AX,DATAMOV DS,AX,CMP X,0 ;与0进行比较JS A2 JNS

16、A1 ;X0转A1MOV Y,0 JMP EXIT A1: MOV Y, 1 JMP EXIT A2: MOV Y,-1 EXIT: MOV AX,4C00HINT 21H CODE ENDSEND START,返回本节,2)地址法表实现多分支,将各分支程序段的入口地址依次存入数据段的一个表中,形成地址表。取各分支程序段的编号作为各分支入口地址的表地址的位移量。某程序段入口地址的表地址为:表地址=编号*2+入口地址首地址,例如:从低到高逐位检查一个字节数据,找出第一个非0位的数,并显示其位置,DATA SEGMENT NUM DB 78H ADDR Dw AD0,AD1,AD2,AD3,AD4

17、,AD5,AD6,AD7 DATA ENDS,CODE SEGMENT ASSUME DS:DATA,CS:CODE START:MOV AX,DATAMOV DS,AXMOV AL,NUMMOV DL, ?CMP AL,0JZ EXITMOV BX,0 AGAIN:SHR AL,1JC NEXTINC BXJMP AGAIN NEXT: SHL BX,1JMP ADDRBX AD0: MOV DL, 30HJMP EXIT,AD1: MOV DL,31HJMP EXIT AD2: MOV DL,32HJMP EXIT AD3: MOV DL,33HJMP EXIT AD4: MOV DL,3

18、4HJMP EXIT AD5: MOV DL,35HJMP EXIT AD6: MOV DL,36HJMP EXIT AD7: MOV DL,37H EXIT: MOV AH,2INT 21HMOV AX,4C00HINT 21H CODE ENDSEND START,返回本节,3)转移法表实现多分支,【例4.9】设某程序有8路分支,试根据给定的N值(18),将程序的执行转移到其中的一路分支。,多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多分支可以化解为双分支或单分支结构的组合,DATA SEGMENTTAB DW P1,P2,P3,P4,P5,P6,P7,P8N DB 5

19、 DATA ENDS STACK SEGMENTDB 200 DUP(0) STACK ENDS CODE SEGMENTASSUME DS:DATA, SS:STACK, CS:CODE START:MOV AX,DATAMOV DS,AX,MOV AL,NDEL ALADD AL,ALMOV BL,ALMOV BH,0JMP TABBX P1: JMP EXIT P2: JMP EXIT,P2: JMP EXIT P3: JMP EXIT P8: EXIT: MOV AX,4C00HINT 21H CODE ENDSEND START,返回本节,无条件转移指令的转移地址采用的是变址寻址。若

20、转移地址用寄存器间接寻址或基址加变址寻址则应如何修改程序?,MOV AL,NDEL ALADD AL,ALMOV BL,ALMOV BH,0JMP TABBX P1: JMP EXIT P2: JMP EXIT,4)逻辑分解法实现多分支,按照条件的先后,依次分解成一串双分支结构,然后按双分支的方法进行程序设计,例如:根据NUM中的内容执行不同的操作,显示1,显示0,显示2,显示3,DATA SEGMENT NUM DB 2 DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATAMOV DS,AXMOV AL,NUMCMP

21、 AL,0JZ NEXT0CMP AL,1JZ NEXT1CMP AL,2JZ NEXT2,CMP AL,3JZ NEXT3 NEXT0:MOV DL,30HJMP EXIT NEXT1:MOV DL,31HJMP EXIT NEXT2:MOV DL,32HJMP EXIT NEXT3:MOV DL,33HJMP EXIT EXIT: MOV AH,2INT 21HMOV AX,4C00HINT 21H CODE ENDSEND START,返回本节,练习,1、用分支结构实现将AL中的最高位内容显示出来2、若已定义整数变量A、B,编程实现如下功能 1)若两数一奇一偶,将奇数存入A,偶数存入B 2)若两数均是奇数,则两数均加1后存入原变量单元 3)若两数均是偶数,则两变量均不变,TEST AL,80HJZ NT1MOV DL,31HJMP DISP NTI: MOV DL,30H DISP: MOV AH,2INT 21H,返回,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报