《《分支程序设计》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《分支程序设计》PPT课件.ppt(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第5讲 分支结构程序设计掌握:掌握:n顺序结构程序设计顺序结构程序设计n分支结构程序设计分支结构程序设计5.1 顺序结构程序设计n完全按程序中的书写顺序逐条执行,称为顺序程序。完全按程序中的书写顺序逐条执行,称为顺序程序。顺序程序往往是复杂程序结构的一部分。顺序程序往往是复杂程序结构的一部分。n如分支结构的一个分支,循环结构的循环体等。如分支结构的一个分支,循环结构的循环体等。实例分析n已知某班学生的英语成绩按学号已知某班学生的英语成绩按学号(从从1开始开始)从小到大从小到大的顺序排列在的顺序排列在TAB表中,要查的学生学号放在变量表中,要查的学生学号放在变量NO中,查出的英语成绩放在变量中,
2、查出的英语成绩放在变量EN中。中。实例分析DATA SEGMENTTABDB 68,78,42,84,80,85,56,77,87,56NODB6ENDB?DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV BL,NO ;学号送学号送AL寄存器寄存器MOV BH,0DEC BXMOV AL,TABBXMOV EN,AL ;结果保存在结果保存在ENGLISH单元单元MOV AX,4C00HINT 21HCODE ENDS END START52分支结构程序设计n521分支程序结构指令序列指令序列1条件条件
3、YN指令序列指令序列2指令序列指令序列条件条件YN图图5.4 双分支结构之一双分支结构之一 图图5.5 双分支结构之二双分支结构之二 case 1 case 2 case n多分支多分支结结构构522转移指令n1无条件转移指令 JMP无无条条件件转转移移指指令令的的功功能能是是无无条条件件转转移移到到指指定的地址去执行从该地址开始的指令。定的地址去执行从该地址开始的指令。段内转移段内转移 段内直接转移段内直接转移 段内间接段内间接转移转移 段间段间转移转移 段间直接段间直接转移转移 段间间接段间间接转移转移分类程序举例:(1)段内直接转移 段内直接短转移 格式:JMP SHORT 标号 功能:
4、IPIP+8位偏移量,转移范围为-128 +127 段内直接近转移 格式:JMP NEAR PTR 标号 功能:IPIP+16位偏移量,转移范围为-32768 +32767(2)段内间接转移 格式:JMP WORD PTR OPR 功能:IP(EA)OPR是16位的通用寄存器或字存储器。段内转移段内转移指令举例 JMP SHORT L_PRO1 JMP SHORT L_PRO1 JMP NEAR PTR L_PRO2 JMP NEAR PTR L_PRO2 JMP SI JMP SI JMP BX JMP BX JMP WORD PTRBX JMP WORD PTRBX JMP WORD PT
5、RBP+DI+20H JMP WORD PTRBP+DI+20H段间转移(4 4)段间直接转移)段间直接转移格式:格式:JMP JMP FAR PTRFAR PTR 标号标号功能:功能:IPOPRIPOPR的偏移地址的偏移地址,CSOPR,CSOPR的段地址的段地址 (5 5)段间间接转移)段间间接转移格式:格式:JMP DWORD PTR OPRJMP DWORD PTR OPR功能:功能:IPIP(EAEA),CS,CS(EA+2EA+2)OPR是存储器段间转移指令举例1 1 CODE2 SEGMENTCODE2 SEGMENT CODE1 SEGMENT CODE1 SEGMENT PR
6、O1 PRO1:MOV MOV JMP FAR PTR PRO1JMP FAR PTR PRO1 CODE1 ENDS CODE2 ENDS CODE1 ENDS CODE2 ENDS2 2 JMP DWORD PTRBX+DIJMP DWORD PTRBX+DI DS=4000H DS=4000H,BX=1230HBX=1230H,DI=02HDI=02H 计算物理地址:计算物理地址:40000H+1230H+2=41232H40000H+1230H+2=41232HCSIP说明:n无条件转移指令不影响标志位2.条件转移指令:条件转移指令:(1)判断单个状态标志格式格式测试条件测试条件JC/
7、JNC 地址标号地址标号;CF=1/CF=0,有进位,有进位/无进位则转移无进位则转移JE/JNE 地址标号地址标号;ZF=1/ZF=0,结果相等,结果相等/不相等则转移不相等则转移JZ/JNZ 地址标号地址标号;ZF=1/ZF=0,结果为零,结果为零/不为零则转移不为零则转移JS/JNS 地址标号地址标号;SF=1/SF=0,结果为负,结果为负/为正则转移为正则转移JO/JNO地址标号地址标号;OF=1/OF=0,结果溢出,结果溢出/不溢出则转移不溢出则转移JP/JNP 地址标号地址标号;PF=1/PF=0,奇偶位为,奇偶位为1/奇偶位为奇偶位为0则转移则转移计算计算 X-Y X-Y,X X
8、和和Y Y为为1616位操作数,结果存入位操作数,结果存入resultresult。MOV AXMOV AX,X X ;SUB AXSUB AX,Y Y ;JNS NO_NEGJNS NO_NEG ;(;(X-YX-Y)如为正数,不求绝对值)如为正数,不求绝对值 NEG AX NEG AX ;求绝对值;求绝对值 NO_NEG:MOV result,AX NO_NEG:MOV result,AX;保存结果;保存结果2.2.设字符的设字符的ASCIIASCII码在码在ALAL,给字符加上奇校验位。,给字符加上奇校验位。AND ALAND AL,7FH7FH;D7D7置置0 0,D6D6D0D0不变
9、,测不变,测“1”1”个数个数 JNP NEXT JNP NEXT ;D6D6D0D0已有奇数个已有奇数个“1”1”,不处理,不处理 OR ALOR AL,80H80H;偶数个;偶数个“1”1”,校验位置,校验位置“1”1”NEXTNEXT:指令举例 助记符助记符 标志标志 说说 明明 JB/JNAE/JC CF=1 JB/JNAE/JC CF=1 低于低于/不高于不等于不高于不等于()JNB/JAE/JNC CF=0 JNB/JAE/JNC CF=0 不低于不低于/高于或等于高于或等于()()JBE/JNA CF=1 JBE/JNA CF=1或或ZF=1 ZF=1 低于或等于低于或等于/不高
10、于不高于()()JNBE/JA CF=0 JNBE/JA CF=0且且ZF=0 ZF=0 不低于不等于不低于不等于/高于高于()指令举例指令举例:AX:AX和和BXBX为为无符号数无符号数,比较大小,将较大的数放入,比较大小,将较大的数放入AXAX CMP AX CMP AX,BX BX ;JNB NEXTJNB NEXT ;如;如AXBXAXBX,不处理,不处理 XCHG AXXCHG AX,BX BX;AXAXBXBX,AXAX与与BXBX交换交换 NEXTNEXT:(2 2)比较无符号数)比较无符号数高低高低(条件为一个标志或标志组合条件为一个标志或标志组合)A:高于,B:低于,E:等于
11、 助记符助记符 标志标志 说说 明明 JL/JNGE SFOF JL/JNGE SFOF 小于小于/不大于且不等于不大于且不等于()JNL/JGE SF JNL/JGE SFOF OF 不小于不小于/大于或等于大于或等于 ()()JLE/JNG SFOF JLE/JNG SFOF或或ZF=1 ZF=1 小于或等于小于或等于/不大于不大于 ()()JNLE/JG SF JNLE/JG SFOFOF且且ZF=0 ZF=0 不小于且不等于不小于且不等于/大于大于()指令举例指令举例:AX:AX和和BXBX为为有符号数有符号数,比较大小,将较大的数放入,比较大小,将较大的数放入AXAX CMP AX
12、CMP AX,BX BX ;JNL NEXTJNL NEXT ;如;如AXBXAXBX,不处理,不处理 XCHG AXXCHG AX,BX BX;AXAXBXBX,AXAX与与BXBX交换交换 NEXTNEXT:(3)比较有符号数大小(条件为标志组合)G:大于,L:小于,E:等于(4)JCXZ指令nCX值为0则转移说明n条件转移指令不影响标志位n条件转移指令只能实现段内转移,8086转移范围是128127条件转移指令和无条件转移指令条件转移指令和无条件转移指令JMPJMP用于实现程序的分支结构。用于实现程序的分支结构。条件转移指令条件转移指令是以当前标志位的状态为条件,是以当前标志位的状态为条
13、件,其前要安排设置标其前要安排设置标志位的指令志位的指令,如加减法、比较、测试等指令。,如加减法、比较、测试等指令。5.2.3 分支程序设计根根据据NUM中中的的值值(04),执执行行不不同同的的操操作作,用用逻逻辑辑分分解法编写程序。解法编写程序。DATA SEGMENT NUM DB 2 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,NUM CMP AL,0 JZ NEXT0 ;AL=0转转 CMP AL,1 JZ NEXT1 ;AL=1转转 CMP AL,2 1.逻辑分解法
14、分支程序设计JZ NEXT2 ;AL=2转转 CMP AL,3 JZ NEXT3 ;AL=3转转 CMP AL,4 JZ NEXT4 ;AL=4转转 NEXT0:MOV DL,30H JMP EXIT NEXT1:MOV DL,31H JMP EXIT NEXT2:MOV DL,32H JMP EXIT NEXT3:MOV DL,33H JMP EXIT NEXT4:MOV DL,34H EXIT:MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END START 逻辑分解法多分支程序设计2设数据设数据X、Y均为字节型变量均为字节型变量,编写计算下面
15、函数值的程序。编写计算下面函数值的程序。.MODEL SMALL.STACK .DATA X DB-5 Y DB?.CODESTART:MOVAX,DATA MOVDS,AX CMPX,0 JGE CASE1 ;当;当X0时,则到时,则到CASE1 MOVY,-1;当;当X0时,时,-1Y JMPDONECASE1:JGCASE2;当;当X0时,则转到时,则转到 CASE2 MOVY,0;当;当X=0时,时,0Y JMPDONECASE2:MOVY,1;X0时,时,1YDONE:MOVAX,4C00H INT21H END START2.地址表法多分支程序设计n把各分支程序段的入口地址(一般是
16、偏移地址)依次存把各分支程序段的入口地址(一般是偏移地址)依次存放在一起,形成地址表。放在一起,形成地址表。n各分支程序段的编号作为转移条件,根据条件首先在地各分支程序段的编号作为转移条件,根据条件首先在地址表中找到转移的目标地址,然后转到相应位置,从而址表中找到转移的目标地址,然后转到相应位置,从而实现多分支。实现多分支。n表地址计算公式:表地址表地址计算公式:表地址=编号编号*2+2+地址表首地址地址表首地址 使用地址表实现多分支。使用地址表实现多分支。5 5个分个分支的标号分别为支的标号分别为ADDR0,ADDR1ADDR0,ADDR1在代码段有:在代码段有:ADDR0:mov dx,A
17、DDR0:mov dx,ADDR1:mov ADDR1:mov 设设ADDR0ADDR0的偏移地址为的偏移地址为2300h2300h,ADDR1ADDR1的偏移地址为的偏移地址为2500h2500h。在数据段有:在数据段有:ADTAB dw ADDR0,ADDR1,ADTAB dw ADDR0,ADDR1,相对相对ADTAB的偏移量的偏移量ADTABADDR02500H2500HADDR2ADDR2ADDR3ADDR3ADDR4ADDR42300H2300H8 86 64 42 20例例 根据根据NUM单元中值(单元中值(04)的不同,执行不同的操作,用地址表法编写程序)的不同,执行不同的操作
18、,用地址表法编写程序转入分支:按输入的数字转入不同分支转入分支:按输入的数字转入不同分支按输入的数字求出分支相对按输入的数字求出分支相对ADTABADTAB的偏移量:的偏移量:ADDR0ADDR0为为0,ADDR10,ADDR1为为2,ADDR22,ADDR2为为4,4,如输入数字如输入数字1 1,则偏移量为,则偏移量为1 12=22=2,将求出,将求出的偏移量存入的偏移量存入SISI。执行指令执行指令jmp ADTABSIjmp ADTABSI,设,设SI=02SI=02 则则IP ADTAB+SIIP ADTAB+SI 即即IP 2500HIP 2500HCS:2500HCS:2500H为
19、分支为分支ADDR1ADDR1的入口,的入口,CPUCPU即执行分支即执行分支ADDR1ADDR1DATA SEGMENT NUM DB 2 ADTAB DW ADDR0,ADDR1,ADDR2,ADDR3,ADDR4 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,NUM MOV AH,0 ADD AX,AX MOV SI,AX 地址法例题分析/1求偏移地址表编号 MOV BX,ADTABSI JMP BX ADDR0:MOV DL,30H JMP EXIT ADDR1:MOV
20、DL,31H JMP EXIT ADDR2:MOV DL,32H JMP EXIT ADDR3:MOV DL,33H JMP EXIT ADDR4:MOV DL,34H EXIT:MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END START 地址法例题分析/2转移指令5.3 5.3 位操作指令位操作指令1 1、逻辑运算指令、逻辑运算指令AND OR XOR NOT TESTAND OR XOR NOT TEST2 2、移位指令、移位指令SHL SHR SARSHL SHR SAR,ROL ROR RCL RCRROL ROR RCL RCR一、
21、一、逻辑运算指令逻辑运算指令1.AND 1.AND 逻辑与指令逻辑与指令n指令格式:指令格式:AND DSTAND DST,SRCSRCn指令功能:将源操作数和目标操作数按位进行逻指令功能:将源操作数和目标操作数按位进行逻辑辑“与与”运算,然后将结果送入目标操作数。运算,然后将结果送入目标操作数。AND reg,imm/reg/mem AND reg,imm/reg/mem AND mem,imm/reg AND mem,imm/regnANDAND指令设置指令设置CF=OF=0CF=OF=0,根据结果设置,根据结果设置SFSF、ZFZF和和PFPF状态,而对状态,而对AFAF未定义未定义*A
22、ND*AND应用举例应用举例*nANDAND指令可用于指令可用于复位复位某些位(同某些位(同0 0相与),不影响相与),不影响其他位其他位 例:将某一位十进制数的例:将某一位十进制数的ASCIIASCII码转化成十进制数码转化成十进制数 MOV ALMOV AL,37H37H AND AL AND AL,0FH 0FH;屏蔽屏蔽ALAL的高的高4 4位位 运算结果(运算结果(ALAL)=07H=07H 2.OR 2.OR 逻辑或指令逻辑或指令n指令格式:指令格式:OR DSTOR DST,SRCSRCn指令功能:将源操作数与目标操作数按位进行逻指令功能:将源操作数与目标操作数按位进行逻辑辑“或
23、或”运算并将结果送入目标操作数。运算并将结果送入目标操作数。OR reg,imm/reg/memOR reg,imm/reg/mem OR mem,imm/reg OR mem,imm/regnOROR指令设置指令设置CF=OF=0CF=OF=0,根据结果设置,根据结果设置SFSF、ZFZF和和PFPF状态,而对状态,而对AFAF未定义未定义*OR*OR应用举例应用举例*n利用利用OROR指令可以方便地指令可以方便地设置某些位设置某些位。例:将一位十进制数转化成相应的例:将一位十进制数转化成相应的ASCIIASCII码码 MOV ALMOV AL,09H09H OR ALOR AL,30H 3
24、0H ;将;将ALAL的高的高4 4位设置为位设置为3 3 运算结果运算结果 (ALAL)=39H=39H 3.NOT 3.NOT 逻辑非指令逻辑非指令n指令格式:指令格式:NOT OPRNOT OPRn指令功能:本指令将给定的操作数按位求反。指令功能:本指令将给定的操作数按位求反。NOT reg/mem NOT reg/mem ;reg/memreg/memreg/memreg/memn对标志位的影响:不影响。对标志位的影响:不影响。4.XOR 4.XOR 逻辑异或指令逻辑异或指令n指令格式:指令格式:XOR DSTXOR DST,SRCSRCn指令功能:将源操作数与目标操作数按位进行指令功
25、能:将源操作数与目标操作数按位进行“异异或或”运算,其结果保留在目标操作数中。运算,其结果保留在目标操作数中。XOR mem,imm/reg XOR mem,imm/reg;memmemimm/regmemmemimm/reg XOR reg,imm/reg/mem XOR reg,imm/reg/mem;regregimm/reg/memregregimm/reg/memnXORXOR指令设置指令设置CF=OF=0CF=OF=0,根据结果设置,根据结果设置SFSF、ZFZF和和PFPF状态,而对状态,而对AFAF未定义未定义*XOR*XOR应用应用*n可以用来给寄存器可以用来给寄存器置置0
26、0。nXORXOR指令可用于指令可用于求反求反某些位(同某些位(同1 1相异或),不影响其他相异或),不影响其他位。位。*XOR*XOR应用举例应用举例*例例1 1:将将CXCX置为置为0 0 XOR CX XOR CX,CX CX 例例2 2:将将BLBL中中D3D3和和D0D0位求反,其他不变位求反,其他不变(对指定对指定位位)XOR BL,00001001B XOR BL,00001001B5.TEST 5.TEST 测试指令测试指令n指令格式:指令格式:TEST OPR1TEST OPR1,OPR2OPR2n指令功能:指令功能:TESTTEST指令将两个操作数按位进行逻辑指令将两个操作
27、数按位进行逻辑“与与”运算,但不保存结果,只根据特征设置状态位运算,但不保存结果,只根据特征设置状态位 TEST mem,imm/regTEST mem,imm/reg TEST reg,imm/reg/mem TEST reg,imm/reg/memnOROR指令设置指令设置CF=OF=0CF=OF=0,根据结果设置,根据结果设置SFSF、ZFZF和和PFPF状状态,而对态,而对AFAF未定义未定义*TEST*TEST应用举例应用举例:*:*例例:测试测试ALAL第二位是否为第二位是否为1 1,若为,若为1 1则转移到则转移到EXITEXIT执行。执行。指令序列如下:指令序列如下:TEST
28、ALTEST AL,00000100B00000100B JNZ EXIT JNZ EXIT ;结果为;结果为1 1转移到转移到EXIT EXIT 不改变操作数,测试操作数或操作数的指定位不改变操作数,测试操作数或操作数的指定位二、二、移位指令移位指令n移位指令移位指令n循环移位指令循环移位指令1.1.移位指令移位指令n逻辑左右移与算术左右移逻辑左右移与算术左右移SHL reg/mem,1/CLSHL reg/mem,1/CL;逻辑左移,最高位进入;逻辑左移,最高位进入CFCF,最低位补,最低位补0 0SHR reg/mem,1/CLSHR reg/mem,1/CL;逻辑右移,最低位进入;逻辑
29、右移,最低位进入CFCF,最高位补,最高位补0 0SAL reg/mem,1/CLSAL reg/mem,1/CL;算术左移,最高位进入;算术左移,最高位进入CFCF,最低位补,最低位补0 0 SAR reg/mem,1/CL SAR reg/mem,1/CL;算术右移,最低位进入;算术右移,最低位进入CFCF,最高位不变,最高位不变演示演示演示演示示意图示意图示意图示意图next示意图示意图逻辑左移逻辑左移 SHL ALSHL AL,1 1的执行的执行移位指令应用举例移位指令应用举例mov cl,4mov cl,4mov al,0f0hmov al,0f0h;al=f0h,al=f0h,无符
30、号数无符号数240d240d,有符号数,有符号数-16d-16dsal al,1sal al,1 ;al=e0h,al=e0h,无符号数无符号数224d224d,有符号数,有符号数-32d-32d;CF=1CF=1,SF=1SF=1、ZF=0ZF=0、PF=0PF=0,OF=0OF=0shr al,1shr al,1;al=70h,al=70h,无符号数无符号数112d,112d,有符号数有符号数112d,112d,sar al,1sar al,1;al=38h,al=38h,无符号数无符号数56d,56d,有符号数有符号数56d,56d,sar al,clsar al,cl;al=03h,a
31、l=03h,无符号数无符号数3d,3d,有符号数有符号数3d,3d,;CF=1CF=1,SF=0SF=0、ZF=0ZF=0、PF=1PF=1 移位指令的应用移位指令的应用n算术运算指令用于带符号数运算算术运算指令用于带符号数运算SALSAL用于乘用于乘2 2,SARSAR用于除用于除2 2n逻辑移位指令则用于无符号数运算逻辑移位指令则用于无符号数运算SHRSHR用于除用于除2 2示例示例示例示例*可以做字节操作,也可以做字操作,还可以做双字操作可以做字节操作,也可以做字操作,还可以做双字操作*CNT=1,SHL OPR,1 CNT1,MOV CL,CNT SHL OPR,CL ;以以SHL为例
32、为例*条件标志位:条件标志位:CF=移入的数值移入的数值 1 CNT=1时,最高有效位的值发生变化时,最高有效位的值发生变化 0 CNT=1时,最高有效位的值不变时,最高有效位的值不变 当当CNT1时,时,OF位不确定。位不确定。SF、ZF、PF 根据移位结果设置,根据移位结果设置,AF无定义无定义OF=*移位指令注意事项:移位指令注意事项:*示意图示意图示意图示意图移位指令分析移位指令分析 SHL AX SHL AX,1 1 SAR BP+SI SAR BP+SI,1 1 错误错误 SHR BHSHR BH,1 1 SAR AL SAR AL,3 3 错误错误2.2.循环移位指令循环移位指令
33、ROL reg/mem,1/CLROL reg/mem,1/CL;不带进位循环左移;不带进位循环左移ROR reg/mem,1/CLROR reg/mem,1/CL;不带进位循环右移;不带进位循环右移RCL reg/mem,1/CLRCL reg/mem,1/CL;带进位循环左移;带进位循环左移RCR reg/mem,1/CLRCR reg/mem,1/CL;带进位循环右移;带进位循环右移示意图示意图示意图示意图示意图示意图示意图示意图例例:例例1.1.将将DX,AXDX,AX中的中的3232位数左移一位。位数左移一位。SHL AXSHL AX,1 1 RCL DX RCL DX,1 1移位指令和循环移位指令结合,可实现移位指令和循环移位指令结合,可实现3232位数乘位数乘2 2除除2 2。DXAX*循环移位指令注意事项:循环移位指令注意事项:*可以进行字节操作,也可以进行字操作。可以进行字节操作,也可以进行字操作。*条件标志位:条件标志位:CF=CF=移入的数值移入的数值 1 1 CNT=1CNT=1时,最高有效位的值发生变化时,最高有效位的值发生变化 0 0 CNT=1CNT=1时,最高有效位的值不变时,最高有效位的值不变 当当CNT1CNT1时,时,OFOF位不确定。位不确定。不影响不影响 SFSF、ZFZF、PFPF、AFAFOF=Thank you!