第六章循环与分支程序1.ppt
《第六章循环与分支程序1.ppt》由会员分享,可在线阅读,更多相关《第六章循环与分支程序1.ppt(69页珍藏版)》请在三一文库上搜索。
1、6/5/2019,1,第六章 循环与分支程序设计,6.1 分支程序设计 6.2 循环程序设计 6.3 多重循环程序设计 6.4 子程序,6/5/2019,2,6.1 分支程序设计,6.1.1 标号,标号: 用来说明可执行指令在汇编语言程序中的位置。 和变量类似,实质上是一个地址值。可以作为 转移指令(或CALL)的操作数。 属性: 段属性、位移量属性和距离属性。,注意: 如果一个标号只在标号定义的段中用JMP或条件 转移指令(或CALL)来访问,需要将标号的距离属 性定义为NEAR; 如果一个标号能被其他段中的JMP指令(或CALL) 来访问,那么需要将这个标号的距离定义为FAR。,6/5/2
2、019,3,1、定义距离属性为NEAR的标号,1)隐式说明:即在标号后面加上冒号,放在指令的前面。 例如:L1: MOV AX,SI NEXT: MOC AX,BX L1和NEXT都是标号名,它们的距离属性均为NEAR。,2)显式说明:即用LABEL伪指令或在EQU指令中 用THIS操作符明显的说明。 例如:L2 LABEL NEAR MOV DX,CX L3 EQU THIS NEAR OR DL,30H 标号L2和L3的距离属性均为NEAR。,6/5/2019,4,2、定义距离属性为FAR的标号,例如: L4 LABEL FAR MOV AX,CX L5 EQU THIS FAR OR D
3、L,30H,3、同时定义距离属性为FAR和NEAR的标号,例如: L6 LABEL FAR L7: AND AL,0FH 或者: L6 EQU THIS FAR L7: AND AL,0FH,6/5/2019,5,6.1.2 无条件转移指令,JMP指令(无条件转移) 格式:JMP目的操作数 功能:JMP指令无条件地控制转移至目标单元 (目的操作数).,JMP指令具体格式有以下五种:,1、段内直接转移 格式:JMP 标号名 ; 标号为NEAR属性 这个标号是在本段内某一指令的前面,后面 缀以冒号来定义其位置的(位移量)。,6/5/2019,6,例如: JMP L2 L1: ADD AX,100
4、L2: MOV CX,30 JMP L1,2、段内直接短转移 格式:JMP SHORT 标号名 例如: JMP SHORT L1 L2: MOV DX,CX L1: OR DL,30H ,6/5/2019,7,3、段内间接转移 格式: JMP 地址表达式 例如: JMP BX ;把控制转向CS:BX JMP VAR_WORD ;把控制转向VAR_WORD 存储单元中存放的地址处,4、 段间间接转移 格式: JMP 双字存储变量 功能:将控制转移到双字存储变量指定的地址, 即 将双字存储变量第二个字作为段地址, 第一个字为偏移地址处继续执行。,6/5/2019,8,5、 段间直接转移 格式: J
5、MP 标号 ;标号为FAR属性 例如: CODE1 SEGMENT JMP CODE2_NEXT CODE1 ENDS CODE2 SEGMENT CODE2_NEXT LABEL FAR CODE2 ENDS,6/5/2019,9,6.3.3比较指令,CMP 指令(比较指令) 格式:CMP 目的操作数,源操作数 功能:CMP指令与SUB指令一样执行减法操作, 即目的操作数减去源操作数,但其结果不送 回目的操作数。执行指令后,两个操作数保 持原值不变。只是影响标志位: OF,CF,PF,SF,ZF,AF. 注意:CMP指令后面往往会跟着一条条件转移 指令,根据比较结果产生不同的程序分支。,6/
6、5/2019,10,6.1.4条件转移指令,8086/8088提供了很多条件转移指令,而且往往一条指令 有好几种助记符表示形式,归纳主要分成两大类: 判断两数大小的条件转移指令。 测试单个标志位的条件转移相令。,1、比较两个无符号数,判断无符号数大小的条件转移指令,1)JAJNBE(jump if not blow or equal , or above) JA 指令(高于转移) JNBE 指令(不低于等于转移) 这是一条条件转移指令的两种助记符。 当两个无符号数进行比较时,如果AB成立则转移。,6/5/2019,11,2)JBEJNA(jump if blow or equal , or n
7、ot above) JBE指令(低于或等于转移) JNA指令(不高于转移) 当两个无符号数进行比较时,如果AB成立,则转移,3)JAEJNB(jump if not blow, or above or equal) JAE指令(高于等于转移) JNB指令(不低于转移) 当两个无符号数相比较时,如果AB成立,则转移。,4)JB/JNAE(jump if blow, or not above or equal) JB指令(低于转移) JNAE指令(不高于等于转移) 当两个无符号数相比较时,如果AB成立则转移。,6/5/2019,12,2、判断带符号数的大小的条件转移指令,1)JGJNLE(jump
8、 if greater, or not less or equal) JG指令(大于转移) JNLE措令(不小于等于转移) 当两个带符号数相比较时,如果AB,则转移 到目标地址。,2)JGEJNL(jump if greater or equal, or not less) JGE指令(大于等于转移) JNL指令(不小于转移) 两个带符号数相比较时,若AB,转移到目标地址,6/5/2019,13,3)JLJNGE(jump if less, or not greater or equal ) JL指令(小于转移) JNGE指令(不大于等于转移) 当两个带符号数相比较时,当AB时,转移到目标地址
9、。,4)JLEJNG(jump if less or equal, or not greater) JLE指令(小于等于转移) JNG指令(不大于转移) 当两个带符号数相比较时,当AB时,转移到目标地址。,2、判断带符号数的大小的条件转移指令,6/5/2019,14,3、测试单个标志的条件转移指令,1)测试ZF JEJZ(jump if zero, or equal) JE指令(相等则转移) JZ指令(等于0转移) 当ZF=l时转移到目标地址的条件转移指令的两种 助记符。它既适用于判断无符号数的相等,又适 用于判断带符号数的相等。,JNEJNZ(jump if not zero, or not
10、 equal) JNE指令(不相等则转移) JNZ指令(不等于0转移) 当ZF=0时转移到目标地址的条件转移指令的两种 助记符。既适用于判断有/无符号数的相等.,6/5/2019,15,2)测试CF JC(jump if carry) 当CF=1时,转移到目标地址。,JNC(jump if not carry) 当CF=0时,转移到目标地址。,3)测试SF JS(jump if sign)指令(为负转移) 当SF=1时,能转移到目标地址的条件转移指令。,JNS(jump if not sign)指令(为正转移) 当SF=0时能转移到目标地址的条件转移指令,4)测试PF JPJPE 指令(为偶转
11、移) PF=1时,转移到目标地址的条件转移指令的两种助记符.,6/5/2019,16,JNP/JPO (为奇转移) 当PF=0时,转移到目标地址的条件转移指令,5)测试OF JO(jump if overflow)指令(溢出转移) 当满足OF=1时,转移到目标地址的条件转移指令。,JNO(jump if not overflow)指令(未溢出转移) 当OF=0时,转移到目标地址的条件转移指令。,6/5/2019,17,单路分支:,在C语言中,单分支语句 if (AL)(BL) AL=BL; 汇编语言实现方法: 比较指令后面紧跟上条件转移指令。 CMP AL,BL JAE L1 MOV AL,B
12、L L1: ,反方向判断,6/5/2019,18,例6.6 求一组无符号数的最大值和最小值,分别放 在存储单元MAX和MIN中。,DATA SEGMENT A DW 349AH,567H,7802H,9031H,0002H,8671H MAX DW ? MIN DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX :;插入程序 MOV AH,4CH INT 21H CODE ENDS END START,6/5/2019,19,MOV AX,0 ;AX用于存放最大值 MOV BX,0FFFF
13、H ;BX用于存放最小值 MOV SI,0 MOV CX,6 L1: CMP AX,ASI JA L2 MOV AX,ASI L2: CMP BX,ASI JB L3 MOV BX,ASI L3: INC SI INC SI LOOP L1 MOV MAX,AX MOV MIN,BX,6/5/2019,20,两路分支程序举例:,在C语言中,两路分支表示如下: if (ALBL)AL=BL; else BL=AL; 汇编语言实现两路分支程序如下: CMP AL,BL JAE L1 MOV AL,BL JMP L2 L1: MOV BL,AL L2: ,6/5/2019,21,两路分支程序举例:
14、例: 将存放在AL中的十六进制数字输出,方法: 利用0-30H- OR 30H 9-39H A-41H-ADD 37H B-42H F-47H,CMP AL,9 JA L1 OR AL,30H JMP L2 L1: ADD AL,37H L2: MOV DL,AL MOV AH,02H INT 21H,6/5/2019,22,程序举例: 例6.5 将0B4H-25H 的结果用十六进制输出,方法二、利用0-30H- OR 30H 9-39H A-41H-ADD 37H B-42H F-47H,6/5/2019,23,MOV AL,D SUB AL,E MOV F,AL AND AL,0F0H M
15、OV CL,4 SHR AL,CL CMP AL,9 JA L1 OR AL,30H JMP L2 L1: ADD AL,37H,L2: MOV DL,AL MOV AH,02H INT 21H MOV AL,F AND AL,0FH CMP AL,9 JA L3 OR AL,30H JMP L4 L3: ADD AL,37H L4: MOV DL,AL MOV AH,02H INT 21H,6/5/2019,24,程序举例: 例6.5 将0B4H-25H 的结果用十六进制输出,方法三、利用0-30H- OR 30H 9-39H A-41H- OR 30H ADD 7H B-42H F-47H
16、,6/5/2019,25,MOV AL,D SUB AL,E MOV F,AL AND AL,0F0H MOV CL,4 SHR AL,CL OR AL,30H CMP AL,39H JBE L1 ADD AL,7H,L1: MOV DL,AL MOV AH,02H INT 21H MOV AL,F AND AL,0FH OR AL,30H CMP AL,39H JBE L2 ADD AL,7H L2: MOV DL,AL MOV AH,02H INT 21H,6/5/2019,26,6.2 循环程序设计,JCXZ:当CX为0时跳转的条件转移指令; LOOP:使CX的值递减并且产生一个无 条件
17、跳转的循环指令; LOOPE/LOOPZ,LOOPNE/LOOPNZ 条件循环迭代控制指令,根据零状态标志 位的状态, 决定是否继续进行循环操作。,循环控制指令可用来控制循环。它们用CX寄存器作为计数器,来控制循环次数。并且都是短距离转移指令。,6/5/2019,27,1、 LOOP 指令(执行循环直到计数为0) 格式:LOOP 短距离标号 例如:L1: LOOP L1 功能: CX-1=CX,若CX不为0,则将控制转移 到目标操作数(指定标号处);否则顺序执行LOOP指令之后的指令。,程序举例 例6l 一组数求和,假设有20个16位二进制数, 要对这20个数求和(假设和值65536) 程序如
18、下:,6/5/2019,28,DATA SEGMENT ARRY DW 123CH, 3DH,100H,90H,345H,12H, DW 0A5H, 4BH,89H DW 87H,234H,64H,35H,20H,21H,50H, DW 88H,92H,11H,0FFH DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX,DATA MOV DS,AX,6/5/2019,29,MOV CX,20 MOV SI,0 MOV AX, 0 NEXT: ADD AX,ARRYSI INC SI INC SI LOOP NEXT M
19、OV AH,4CH INT 21H CODE ENDS END START,6/5/2019,30,2、LOOPELOOPZ(如果相等如果为0则循环) 格式:LOOPELOOPZ 短距离标号 功能:该指令将 CX减 1,若 CX不为 0且ZF置1 (即CX0且运算结果为0),则将控制转移到 目标操作数,否则: 顺序执行LOOPE/LOOPZ指令之后的指令。,6/5/2019,31,例6.2 在字节数组中找出第一个非零元素,并显示 输出第一个非零元素的下标 程序如下:,DATA SEGMENT ARRAY DB 0,0,0,0,0,0,84,0,9,10 COUNT EQU -OFFSET AR
20、RAY DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA BEGIN: MOV AX,DATA MOV DS,AX MOV CX,COUNT MOV DI,-1,6/5/2019,32,NEXT: INC DI CMP ARRAYDI, 0 LOOPZ NEXT JNE OK MOV DL, N; 没找到非零元素,显示N JMP DISPLAY OK: MOV DX, DI OR DL,30H DISPLAY:MOV AH,02H INT 21H MOV AH,4CH INT 21H CODE ENDS END BEGIN,6/5/2019,33
21、,3、LOOPNELOOPNZ(不等不为零,则循环) 格式:LOOPNELOOPNZ 短距离标号 功能:该指令将 CX减1,若 CX不为 0且 ZF为 0(即CX0且运算结果不为0),则将控制转移到指定标号;否则,顺序执行下一条指令。,例6.3 求两个一维字数组的和,数组元素个数为N, 当计算到两个数组对应元素之和为零时就停 止求和,(假设数组元素为无符号二进制数)。 其实现程序如下:,DATA SEGMENT ARR1 DW 23H, 34H, 0, 5H, 66H, 0, 345H, 567H ARR2 DW 34H, 24H, 0, 2H, 44H, 0, 345H, 56H NUM E
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六 循环 分支 程序
链接地址:https://www.31doc.com/p-2917104.html