第五章二分支程序设计

上传人:痛*** 文档编号:164563684 上传时间:2022-10-25 格式:PPT 页数:41 大小:239.50KB
收藏 版权申诉 举报 下载
第五章二分支程序设计_第1页
第1页 / 共41页
第五章二分支程序设计_第2页
第2页 / 共41页
第五章二分支程序设计_第3页
第3页 / 共41页
资源描述:

《第五章二分支程序设计》由会员分享,可在线阅读,更多相关《第五章二分支程序设计(41页珍藏版)》请在装配图网上搜索。

1、2022-10-25宁波大学科技学院计算机系1第五章(二)分支程序设计第五章(二)分支程序设计2022-10-25宁波大学科技学院计算机系2二二.分支程序设计分支程序设计 case 1 case 2 case n?case 1 case 2 case n CASE 结构结构 IF-THEN-ELSE 结构结构分支实现方法:分支实现方法:(1)逻辑分解法逻辑分解法(2)地址表法地址表法(3)转移表法(跳跃表法)转移表法(跳跃表法)(值与地址有对应关系的表)(值与地址有对应关系的表)逻辑尺法逻辑尺法2022-10-25宁波大学科技学院计算机系3一、与转移地址有关的寻址方式:一、与转移地址有关的寻址

2、方式:1 1、段内段内寻址寻址 段内直接寻址段内直接寻址 JMP NEAR PTR 标号名标号名 段内间接寻址段内间接寻址 JMP BX JMP WORD PTR 存储单元寻址存储单元寻址2、段间段间寻址寻址 段间直接寻址段间直接寻址 JMP FAR PTR 标号名标号名 段间间接寻址段间间接寻址 JMP DWORD PTR 存储单元寻址存储单元寻址用来确定用来确定转移指令转移指令及及CALL指令指令的转移地址。的转移地址。与转移有关的寻址方式与转移有关的寻址方式(参见参见P28):2022-10-25宁波大学科技学院计算机系4(1)段内直接寻址段内直接寻址(目的地址由标号给出)(目的地址由标

3、号给出)转向的有效地址转向的有效地址=当前当前(IP)+位移量位移量(8bit/16bit)位移量位移量位移量位移量64KBIP2022-10-25宁波大学科技学院计算机系5目的地址是相对于目的地址是相对于IP当前地址来转移的,当前地址来转移的,它是相对寻址方式。它是相对寻址方式。例例:JMP NEAR PTR NEXT 近转移近转移16位位 -32768 +32767 JMP SHORT NEXT 短转移短转移8位位 -128 +127 EA CS:EA 指令地址指令地址注意:用于无条件转移时可以是注意:用于无条件转移时可以是16位或位或8位;位;用于条件转移时只能是用于条件转移时只能是8位

4、。位。位移量IP当前值2022-10-25宁波大学科技学院计算机系6(2)段内间接寻址(目的地址在存储器中)段内间接寻址(目的地址在存储器中)转向的有效地址转向的有效地址EA在一个寄存器或存储单元中。在一个寄存器或存储单元中。(可以用除了立即数以外的任何一种寻址方式得到可以用除了立即数以外的任何一种寻址方式得到)例:例:(BX)=1256H (SI)=528EH TABLE=20A2H (DS)=2000H (232F8H)=3280H (264E4H)=2450H JMP BX ;(IP)=1256H JMP TABLEBX JMP WORD PTR TABLEBX ;(IP)=3280H

5、JMP BXSI JMP WORD PTR BXSI ;(IP)=2450H注意:注意:这种寻址方式只能用于无条件转移,且要用这种寻址方式只能用于无条件转移,且要用WORD PTR标志内存标志内存 单元的类型是有效地址的字类型。单元的类型是有效地址的字类型。2022-10-25宁波大学科技学院计算机系7code1 segment jmp far ptr next code1 endscode2 segment next:.code2 ends(3)段间直接寻址(目的地址由标号给出)段间直接寻址(目的地址由标号给出)完成从一个段到另一个段的转移。完成从一个段到另一个段的转移。CS和和IP两项都要

6、修改。两项都要修改。用指令中提供的转移目标的用指令中提供的转移目标的段地址段地址和和偏移地址偏移地址取代取代CS 和和 IP。注意:注意:只能用于无条件转移,且要用只能用于无条件转移,且要用far ptr说明目标标号的属性。说明目标标号的属性。例例:执行时:将执行时:将next的段属性值送的段属性值送CS,将其有效地址值送,将其有效地址值送IP。2022-10-25宁波大学科技学院计算机系8(4)段间间接寻址(目的地址在存储器中)段间间接寻址(目的地址在存储器中)完成从一个段到另一个段的转移。完成从一个段到另一个段的转移。用存储器中的两个相继字的内容取代用存储器中的两个相继字的内容取代CS 和

7、和 IP。(存储单元的地址可用除立即数和寄存器以外的存储单元的地址可用除立即数和寄存器以外的 任何一种数据寻址方式得到任何一种数据寻址方式得到)只能用于无条件转移。只能用于无条件转移。例:例:JMP DWORD PTR INTERS+BX2022-10-25宁波大学科技学院计算机系9 二、二、控制转移指令:控制转移指令:无条件转移指令无条件转移指令 JMP 条件转移指令条件转移指令JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、JLE/JNLE、JCXZ 循环指令循环指令 LOOP、LOOPZ/LOOPE、LOOPNZ/LOO

8、PNE 子程序调用和返回指令子程序调用和返回指令 CALL、RET 中断与中断返回指令中断与中断返回指令 INT、INTO、IRET2022-10-25宁波大学科技学院计算机系101、无条件转移指令、无条件转移指令JMP(参见(参见P47):):分类:分类:段内转移段内转移只改变只改变IP的值的值段间转移段间转移既改变既改变IP的值又改变的值又改变CS的值的值段内直接短转移段内直接短转移:JMP SHORT OPR 执行操作:执行操作:(IP)(IP)+8位位移量(位位移量(OPR$)例如:例如:JMP SHORT NEXT段内直接近转移段内直接近转移:JMP NEAR PTR OPR 执行操

9、作:执行操作:(IP)(IP)+16位位移量(位位移量(OPR$)例如:例如:JMP NEAR PTR NEXT段内间接转移段内间接转移:JMP WORD PTR OPR 执行操作:执行操作:(IP)(EA)例如:例如:JMP WORD PTR BX2022-10-25宁波大学科技学院计算机系11段间直接远转移段间直接远转移:JMP FAR PTR OPR 执行操作:执行操作:(IP)OPR 的段内偏移地址的段内偏移地址 (CS)OPR 所在段的段地址所在段的段地址例如:例如:JMP FAR PTR NEXT段间间接转移段间间接转移:JMP DWORD PTR OPR 执行操作:执行操作:(I

10、P)(EA)(CS)(EA+2)例如:例如:JMP DWORD PTR BX其中:其中:EA为为OPR所给定的寻址方式的所给定的寻址方式的EA JMP指令不影响标志位指令不影响标志位2022-10-25宁波大学科技学院计算机系122、条件转移指令:、条件转移指令:注意:注意:只能使用只能使用段内段内直接寻址直接寻址的的8 位位移量(位位移量(-128-128+127+127)(1)根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移 格式格式 测试条件测试条件JZ(JE)OPR ZF=1JNZ(JNE)OPR ZF=0JS OPR SF=1JNS OPR SF=0JO OPR OF=1

11、JNO OPR OF=0JP OPR PF=1JNP OPR PF=0JC OPR CF=1JNC OPR CF=0其中:其中:OPR只能是标号,不能是存储单元寻址。只能是标号,不能是存储单元寻址。2022-10-25宁波大学科技学院计算机系13课堂练习课堂练习一位有符号十进制数的输入、输出:一位有符号十进制数的输入、输出:1、键盘输入、键盘输入X(9X7)2、求、求Y=X+2(7Y9)3、输出、输出Y注意:注意:X的输入要判断符号位如果是负数则需要输的输入要判断符号位如果是负数则需要输入两次,第二次接收值,且要求补码;正数只要入两次,第二次接收值,且要求补码;正数只要输入一次。输入一次。Y的

12、输出也一样对负数要先输出负号,其值要的输出也一样对负数要先输出负号,其值要求补码再输出。求补码再输出。2022-10-25宁波大学科技学院计算机系14 JS/JNS 否否 是是CMP AL,否否 是是 JZ/JNZ JMP B B JMP A A 开始输入ALAL=X=AL-30H输入ALAL-30HX=AL求补ALXY=AL+2Y是负数求Y的绝对值输出DLY+30H输出Y返回DOS结束2022-10-25宁波大学科技学院计算机系15(2)比较两个比较两个无符号数无符号数,并根据比较结果转移,并根据比较结果转移 格式格式 测试条件测试条件 =JNB(JAE,JNC)OPR CF=0 JNBE(

13、JA)OPR CFZF=0其中:其中:CF ZF CFZF 含义含义 表示的条件表示的条件0 0 0 无借位,不为无借位,不为0 0 1 1 无借位,为无借位,为0 =1 0 1 有借位,不为有借位,不为0 100 =100 100转转NEXTAJZ NEXTE;=100转转NEXTEMOV DL,;JMP EXITNEXTE:MOV DL,=EXIT:MOV AH,2;输出一个字符输出一个字符 INT 21H AL(X)AL与100比较DL=DL=DL=输出2022-10-25宁波大学科技学院计算机系17(3)比较两个比较两个带符号数带符号数,并根据比较结果转移,并根据比较结果转移 格式格式

14、 测试条件测试条件 =JNL(JGE)OPR SF OF=0 JNLE(JG)OPR (SF OF)ZF=0适用于带符号数的比较适用于带符号数的比较其中:其中:SF OF SFOF 含义含义 表示的条件表示的条件0 0 0 为正或为正或0,无溢出,无溢出 0 1 1 为正或为正或0,有溢出,有溢出 1 0 1 为负,无溢出为负,无溢出 1 1 0 为负,有溢出为负,有溢出 若有溢出则为其逆条件若有溢出则为其逆条件2022-10-25宁波大学科技学院计算机系18SF OF ZF SFOF (SFOF)ZF含义含义表示的条件表示的条件 0 0 000为正,不为为正,不为0,无溢出,无溢出 0 0

15、101为为0 0 1 011见前页见前页 0 1 111 1 0 011 1 0 011 1 1 000为负,溢出为负,溢出 1 1 101为为0 2022-10-25宁波大学科技学院计算机系19例:求例:求A字节单元中数据的绝对值,存放到字节单元中数据的绝对值,存放到B字字节单元中。节单元中。程序段:程序段:MOV AL,ACMP AL,0;与;与0比较比较JGE NEXT;0则不求补则不求补NEG AL;否则求补;否则求补NEXT:MOV B,AL2022-10-25宁波大学科技学院计算机系20例:如果有符号数例:如果有符号数 X50,转到,转到TOO_HIGH;否则计算;否则计算 XY,

16、如果溢出则转到,如果溢出则转到 OVERFLOW;否则;否则|XY|RESULT JGJGJOJOJNSJNS MOV AX,XMOV AX,XCMP AX,50CMP AX,50 TOO_HIGHTOO_HIGHSUB AX,YSUB AX,Y OVERFLOWOVERFLOW NONNEGNONNEGNEG AXNEG AX NONNEG:NONNEG:MOV RESULT,AX MOV RESULT,AXTOO_HIGH:TOO_HIGH:OVERFLOW:OVERFLOW:2022-10-25宁波大学科技学院计算机系21例:例:A、B 是有符号双精度数,分别存于是有符号双精度数,分别存

17、于 DX,AX 及及 BX,CX 中,中,A B 时转时转 GREATER,否则转,否则转 LESS。分析:先比较高字,若相等再比较低字;高字要考虑符号。分析:先比较高字,若相等再比较低字;高字要考虑符号。CMP DX,BXCMP DX,BX JGJG GREATER GREATER JLJL LESS LESS CMP AX,CXCMP AX,CX JAJA GREATER GREATERLESS:LESS:GREATER:GREATER:2022-10-25宁波大学科技学院计算机系22思考P142/42022-10-25宁波大学科技学院计算机系23三三.多分支程序设计多分支程序设计用来完成

18、多分支的实现,类似于高级语言中的用来完成多分支的实现,类似于高级语言中的CASE语句。语句。实现方法:实现方法:1、逻辑分解法、逻辑分解法利用条件语句实现,用于双分支或多分支。利用条件语句实现,用于双分支或多分支。2、转移表法、转移表法转移的入口地址集中放到转移的入口地址集中放到程序程序中,用标号表中,用标号表示起始地址,段内短转移每地址占示起始地址,段内短转移每地址占2字节,近转移则字节,近转移则3字节。字节。3、跳跃表法(地址表法)、跳跃表法(地址表法)将转移的入口地址集中放到将转移的入口地址集中放到数数据段据段,其起始地址用变量名表示,因为地址占,其起始地址用变量名表示,因为地址占2字节

19、,所以字节,所以表地址表地址=地址表首址地址表首址+控制字控制字*24、逻辑尺法、逻辑尺法利用一个控制字作为逻辑尺,根据其中的每利用一个控制字作为逻辑尺,根据其中的每一位是一位是0还是还是1来作为是或不是两种不同操作的判断依据。操来作为是或不是两种不同操作的判断依据。操作前必须事先根据需要设置好逻辑尺的数据。作前必须事先根据需要设置好逻辑尺的数据。2022-10-25宁波大学科技学院计算机系241、逻辑分解法、逻辑分解法 否否 是是 否否 是是程序段:程序段:MOV AL,X MOV BL,Y CMP AL,BL JZ ZERO JL LESS MOV DL,JMP EXITLESS:MOV

20、DL,JMP EXITZERO:MOV DL,=EXIT:MOV AH,02H INT 21H开始输入X、YXY?XY?输出输出输出返回DOS结束2022-10-25宁波大学科技学院计算机系252、转移表法、转移表法格式:格式:转移指令转移指令集中放在在集中放在在代码段代码段中中START:LEA BX,TABLE;转移表首址转移表首址BX MOV AH,01H INT 21H;输入控制字输入控制字AL SUB AL,30H MOV AH,0 ADD AX,AX;控制字控制字*2,因为短转移占,因为短转移占2字节字节 ADD BX,AX;BX基址基址+偏移地址偏移地址 JMP BX;注意!注意

21、!BX不能加不能加,因为目标,因为目标;地址在指令中,而不是在存储单元中。;地址在指令中,而不是在存储单元中。TABLE:JMP SHORT MODE0;转移表转移表 JMP SHORT MODE1 JMP SHORT MODE2 2022-10-25宁波大学科技学院计算机系26MODE0:;相应的分支程序相应的分支程序JMP EXITMODE1:JMP EXITMODE2:JMP EXITEXIT:2022-10-25宁波大学科技学院计算机系273、跳跃表法(地址表法)、跳跃表法(地址表法)格式:格式:转移地址转移地址集中放在在集中放在在数据段数据段中做成一个表中做成一个表DATA SEGM

22、ENTX DB?;转移地址序号;转移地址序号TABLE DWADDR0,ADDR1,ADDR2,;转移地址表;转移地址表DATA ENDS 如果分支地址比较多也可以表示为:如果分支地址比较多也可以表示为:TABLEDWADDR0DWADDR1DWADDR22022-10-25宁波大学科技学院计算机系28CODE SEGMENTMOV AH,01H;输入控制字输入控制字INT 21HSUB AL,30HMOV X,ALMOV AH,0;扩展到扩展到AXADD AX,AX;AX*2,因为每个地址占,因为每个地址占2字节字节 MOV SI,AX;偏移量偏移量SILEA BX,TABLESI;转移地址

23、转移地址BXJMP BX;取数据段中的地址值,取数据段中的地址值,;注意注意BX的的 不能少不能少2022-10-25宁波大学科技学院计算机系29ADDR0:JMP EXITADDR1:JMP EXITADDR2:JMP EXITEXIT:2022-10-25宁波大学科技学院计算机系30课堂练习课堂练习1分别用逻辑分解法、转移表法和跳跃表法实现:分别用逻辑分解法、转移表法和跳跃表法实现:键盘输入一位数(键盘输入一位数(04),根据其值分别输出),根据其值分别输出MODE0MODE42022-10-25宁波大学科技学院计算机系31 1、逻辑分解法、逻辑分解法DATA SEGMENTNUM DB?

24、TB0 DB MODE0$TB1 DB MODE1$TB2 DB MODE2$TB3 DB MODE3$TB4 DB MODE4$DATA ENDSCODE SEGMENT2022-10-25宁波大学科技学院计算机系32接收键盘输入接收键盘输入AL LEA DX,TB4AL30HNUM JMP EXIT另起一行另起一行EXIT0:LEA DX,TB0MOV AL,NUM JMP EXITCMP AL,0EXIT1:LEA DX,TB1JZ EXIT0 JMP EXITCMP AL,1EXIT2:LEA DX,TB2JZ EXIT1 JMP EXITCMP AL,2EXIT3:LEA DX,TB

25、3JZ EXIT2EXIT:MOV AH,09HCMP AL,3 INT 21HJZ EXIT3 CODE ENDSEND START2022-10-25宁波大学科技学院计算机系332、转移表法、转移表法DATA SEGMENTNUM DB?TB0 DB MODE0$TB1 DB MODE1$TB2 DB MODE2$TB3 DB MODE3$TB4 DB MODE4$DATA ENDSCODE SEGMENT2022-10-25宁波大学科技学院计算机系34接收键盘输入接收键盘输入ALAL30H NUM换行换行MOV AL,NUMLEA BX,BTABMOV AH,0SHL AX,1ADD B

26、X,AXJMP BXBTAB:JMP SHORT MD0JMP SHORT MD1JMP SHORT MD2JMP SHORT MD3 JMP SHORT MD4MD0:LEA DX,TB0 JMP EXIT MD1:LEA DX,TB1 JMP EXITMD2:LEA DX,TB2 JMP EXIT MD3:LEA DX,TB3 JMP EXITMD4:LEA DX,TB4EXIT:MOV AH,09H INT 21HCODE ENDS END START2022-10-25宁波大学科技学院计算机系353、地址表法(跳跃表法)、地址表法(跳跃表法)DATA SEGMENTNUM DB?ADT

27、AB DW MD0,MD1,MD2,MD3,MD4TB0 DB MODE0$TB1 DB MODE1$TB2 DB MODE2$TB3 DB MODE3$TB4 DB MODE4$DATA ENDSCODE SEGMENT2022-10-25宁波大学科技学院计算机系36接收键盘输入接收键盘输入ALAL30H NUM换行换行MOV AL,NUMMOV AH,0ADD AX,AXMOV SI,AXMOV BX,ADTABSIJMP BXMD0:LEA DX,TB0 JMP EXIT MD1:LEA DX,TB1 JMP EXITMD2:LEA DX,TB2 JMP EXIT MD3:LEA DX,

28、TB3 JMP EXITMD4:LEA DX,TB4EXIT:MOV AH,09H INT 21H CODE ENDS END START2022-10-25宁波大学科技学院计算机系374、逻辑尺法、逻辑尺法 对于被控对象进行两种不同的处理时可以使用逻辑尺方法,逻辑尺中对于被控对象进行两种不同的处理时可以使用逻辑尺方法,逻辑尺中每一位控制一个对象,根据其为每一位控制一个对象,根据其为0或为或为1的不同来决定对对象的不同操作,的不同来决定对对象的不同操作,所以逻辑尺的长度取决于被控对象的个数。所以逻辑尺的长度取决于被控对象的个数。方法方法:1、使用一个字节(字)来控制、使用一个字节(字)来控制8

29、(16)个对象)个对象设计逻辑尺:设计逻辑尺:其中其中0表示处理序列表示处理序列0,1表示处理序列表示处理序列1 2、逻辑尺左移、逻辑尺左移/右移一位右移一位 3、判、判CF=0/1?若为?若为0则转移到处理序列则转移到处理序列0,否则转移,否则转移 到处理序列到处理序列1 4、循环转移到、循环转移到2、进行下一个对象的控制,直到全部处、进行下一个对象的控制,直到全部处 理完毕。理完毕。所以逻辑尺方法往往用于循环结构中来实现,目前只能用条件语句来控制循所以逻辑尺方法往往用于循环结构中来实现,目前只能用条件语句来控制循环。环。1 1 0 1 0 1 0 0 2022-10-25宁波大学科技学院计

30、算机系38例如:在例如:在STR中存放了中存放了8个不同的字符,已知逻辑尺的值已个不同的字符,已知逻辑尺的值已经放在经放在AL中,中,1表示输出该位对应的字符,表示输出该位对应的字符,0表示不输出。表示不输出。DATA SEGMENTSTR DB ABCDEFGHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA NEXT:INC BXMOV DS,AX DEC CXLEA BX,STR JNZ LOPMOV CX,8 MOV AH,4CH LOP:ROR AL,1 INT 21H JNC NEXT ;不输出不输出 CODE

31、 ENDS MOV DL,BX ;输出输出 END STARTMOV AH,02HINT 21H2022-10-25宁波大学科技学院计算机系39课堂练习课堂练习2用逻辑尺法实现:用逻辑尺法实现:键盘输入一位数(键盘输入一位数(1、2、4、8),根据其值分别输出),根据其值分别输出MODE1MODE8data segment num db?adtab dw addr1,addr2,addr4,addr8 tb1 db mode1$tb2 db mode2$tb4 db mode4$tb8 db mode8$next db 0dh,0ah,$data ends2022-10-25宁波大学科技学院计

32、算机系40code segment assume cs:code,ds:datastart:mov ax,data mov ds,ax mov ah,01h ;输入一个数;输入一个数 int 21h sub al,30h ;得其值;得其值 mov num,al lea dx,next ;换行;换行 mov ah,09h int 21h mov al,num lea bx,adtablop:shr ax,1 ;判是;判是1、2、4、8吗?吗?jnc nxt ;不是;不是 jmp word ptr bx;是;是nxt:add bx,type adtab;修改指针;修改指针 jmp lop ;继续判断;继续判断addr1:lea dx,tb1 mov ah,09h int 21h jmp exitaddr2:lea dx,tb2 mov ah,09h int 21h jmp exitaddr4:lea dx,tb4 mov ah,09h int 21h jmp exitaddr8:lea dx,tb8 mov ah,09h int 21hexit:mov ah,4ch int 21hcode ends end start2022-10-25宁波大学科技学院计算机系41思考Page 142 4 5 6

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!