第六章循环与分支程序PPT讲稿.ppt
《第六章循环与分支程序PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第六章循环与分支程序PPT讲稿.ppt(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章循环与分支程序第1页,共69页,编辑于2022年,星期三9/21/202226.1 分支程序设计分支程序设计6.1.1 标号标号标号标号:用来说明可执行指令在汇编语言程序中的位置。用来说明可执行指令在汇编语言程序中的位置。和变量类似,实质上是一个地址值。可以作为和变量类似,实质上是一个地址值。可以作为 转移指令(或转移指令(或CALL)的操作数。)的操作数。属性:属性:段属性、位移量属性和距离属性。段属性、位移量属性和距离属性。注注 意意:如如 果果 一一 个个 标标 号号 只只 在在 标标 号号 定定 义义 的的 段段 中中 用用JMP或或 条条 件件 转转 移移 指指 令令(或或CA
2、LL)来来 访访 问问,需需 要要 将将 标标 号号 的的 距距 离离 属属 性定义为性定义为NEAR;如如果果一一个个标标号号能能被被其其他他段段中中的的JMP指指 令令(或或 CALL)来访问,那么需要将这个标号的距离定义为来访问,那么需要将这个标号的距离定义为FAR。第2页,共69页,编辑于2022年,星期三9/21/202231、定义距离属性为、定义距离属性为NEAR的标号的标号1)隐式说明隐式说明:即在标号后面加上冒号,放在指令的前面。即在标号后面加上冒号,放在指令的前面。例如:例如:L1:MOV AX,SI NEXT:MOC AX,BX L1和和NEXT都是标号名,它们的距离属性均
3、为都是标号名,它们的距离属性均为NEAR。2)显式说明显式说明:即用即用LABEL伪指令或在伪指令或在EQU指令中指令中 用用THIS操作符明显的说明。操作符明显的说明。例如:例如:L2 LABEL NEAR MOV DX,CX L3 EQU THIS NEAR OR DL,30H 标号标号L2和和L3的距离属性均为的距离属性均为NEAR。第3页,共69页,编辑于2022年,星期三9/21/202242、定义距离属性为、定义距离属性为FAR的标号的标号例如例如:L4 LABEL FAR MOV AX,CX L5 EQU THIS FAR OR DL,30H3、同时定义距离属性为、同时定义距离属
4、性为FAR和和NEAR的标号的标号 例如:例如:L6 LABEL FARL7:AND AL,0FH或者:或者:L6 EQU THIS FAR L7:AND AL,0FH第4页,共69页,编辑于2022年,星期三9/21/202256.1.2 无条件转移指令无条件转移指令JMP指令(无条件转移)指令(无条件转移)格式:格式:JMP目的操作数目的操作数 功能:功能:JMP指令无条件地控制转移至目标单元指令无条件地控制转移至目标单元 (目的操作数)(目的操作数).JMP指令具体格式有以下五种:指令具体格式有以下五种:1、段内直接转移、段内直接转移 格式:格式:JMP 标号名标号名 ;标号为标号为NE
5、AR属性属性 这个这个标号标号是在本段内某一指令的前面,后面是在本段内某一指令的前面,后面 缀以冒号来定义其位置的(位移量)。缀以冒号来定义其位置的(位移量)。第5页,共69页,编辑于2022年,星期三9/21/20226例如例如:JMP L2 L1:ADD AX,100L2:MOV CX,30 JMP L12、段内直接短转移、段内直接短转移 格式:格式:JMP SHORT 标号名标号名 例如例如:JMP SHORT L1 L2:MOV DX,CX L1:OR DL,30H 第6页,共69页,编辑于2022年,星期三9/21/202273、段内间接转移、段内间接转移格式:格式:JMP 地址表达
6、式地址表达式例如例如:JMP BX ;把控制转向把控制转向CS:BX JMP VAR_WORD;把把控控制制转转向向VAR_WORD 存储单元中存放的地址处存储单元中存放的地址处4、段间间接转移段间间接转移格式:格式:JMP 双字存储变量双字存储变量功能:将控制转移到双字存储变量指定的地址,功能:将控制转移到双字存储变量指定的地址,即即 将双字存储变量第二个字作为段地址,将双字存储变量第二个字作为段地址,第一个字为偏移地址处继续执行。第一个字为偏移地址处继续执行。第7页,共69页,编辑于2022年,星期三9/21/202285、段间直接转移段间直接转移格式:格式:JMP 标号标号 ;标号为;标
7、号为FAR属性属性例如:例如:CODE1 SEGMENT JMP CODE2_NEXT CODE1 ENDS CODE2 SEGMENT CODE2_NEXT LABEL FAR CODE2 ENDS第8页,共69页,编辑于2022年,星期三9/21/202296.3.3比较指令比较指令CMP 指令(比较指令)指令(比较指令)格式:格式:CMP 目的操作数,源操作数目的操作数,源操作数功能:功能:CMP指令与指令与SUB指令一样执行减法操作,指令一样执行减法操作,即目的操作数减去源操作数,但其结果不送即目的操作数减去源操作数,但其结果不送 回目的操作数。执行指令后,两个操作数保回目的操作数。执
8、行指令后,两个操作数保 持原值不变。只是影响标志位:持原值不变。只是影响标志位:OF,CF,PF,SF,ZF,AF.注意:注意:CMP指令后面往往会跟着一条条件转移指令后面往往会跟着一条条件转移指令,根据比较结果产生不同的程序分支。指令,根据比较结果产生不同的程序分支。第9页,共69页,编辑于2022年,星期三9/21/2022106.1.4条件转移指令条件转移指令 8086/8088提供了很多条件转移指令提供了很多条件转移指令,而且往往一条指令而且往往一条指令有好几种助记符表示形式有好几种助记符表示形式,归纳主要分成两大类:归纳主要分成两大类:判断两数大小的条件转移指令。判断两数大小的条件转
9、移指令。测试单个标志位的条件转移相令。测试单个标志位的条件转移相令。1、比较两个无符号数、比较两个无符号数,判断无符号数大小的条件转移指令判断无符号数大小的条件转移指令1)JAJNBE(jump if not blow or equal,or above)JA 指令(高于转移)指令(高于转移)JNBE 指令(不低于等于转移)指令(不低于等于转移)这是一条条件转移指令的两种助记符。这是一条条件转移指令的两种助记符。当两个无符号数进行比较时,如果当两个无符号数进行比较时,如果AB成立则转移。成立则转移。第10页,共69页,编辑于2022年,星期三9/21/2022112)JBEJNA(jump i
10、f blow or equal,or not 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指令
11、(低于转移)指令(低于转移)JNAE指令(不高于等于转移)指令(不高于等于转移)当两个无符号数相比较时,如果当两个无符号数相比较时,如果AB成立则转移。成立则转移。第11页,共69页,编辑于2022年,星期三9/21/2022122、判断带符号数的大小的条件转移指令、判断带符号数的大小的条件转移指令1)JGJNLE(jump if greater,or not less or equal)JG指令(大于转移)指令(大于转移)JNLE措令(不小于等于转移)措令(不小于等于转移)当两个带符号数相比较时,如果当两个带符号数相比较时,如果AB,则转移,则转移 到目标地址。到目标地址。2)JGEJNL(
12、jump if greater or equal,or not less)JGE指令(大于等于转移)指令(大于等于转移)JNL指令(不小于转移)指令(不小于转移)两个带符号数相比较时两个带符号数相比较时,若若AB,转移到目标地址转移到目标地址第12页,共69页,编辑于2022年,星期三9/21/2022133)JLJNGE(jump if less,or not greater or equal)JL指令(小于转移)指令(小于转移)JNGE指令(不大于等于转移)指令(不大于等于转移)当两个带符号数相比较时当两个带符号数相比较时,当当AB时时,转移到目标地址。转移到目标地址。4)JLEJNG(j
13、ump if less or equal,or not greater)JLE指令(小于等于转移)指令(小于等于转移)JNG指令(不大于转移)指令(不大于转移)当两个带符号数相比较时当两个带符号数相比较时,当当AB时时,转移到目标地址。转移到目标地址。2、判断带符号数的大小的条件转移指令、判断带符号数的大小的条件转移指令第13页,共69页,编辑于2022年,星期三9/21/2022143、测试单个标志的条件转移指令、测试单个标志的条件转移指令1)测试)测试ZF JEJZ(jump if zero,or equal)JE指令(相等则转移)指令(相等则转移)JZ指令(等于指令(等于0转移)转移)当
14、当ZF=l时转移到目标地址的条件转移指令的两种时转移到目标地址的条件转移指令的两种助记符。它既适用于判断无符号数的相等,又适助记符。它既适用于判断无符号数的相等,又适用于判断带符号数的相等用于判断带符号数的相等。JNEJNZ(jump if not zero,or not equal)JNE指令(不相等则转移)指令(不相等则转移)JNZ指令(不等于指令(不等于0转移)转移)当当ZF=0时转移到目标地址的条件转移指令的两种时转移到目标地址的条件转移指令的两种助记符。既适用于判断有助记符。既适用于判断有/无符号数的相等无符号数的相等.第14页,共69页,编辑于2022年,星期三9/21/20221
15、52)测试)测试CFJC(jump if carry)当当CF=1时,转移到目标地址。时,转移到目标地址。JNC(jump if not carry)当当CF=0时时,转移到目标地址。转移到目标地址。3)测试)测试SFJS(jump if sign)指令(为负转移)指令(为负转移)当当SF=1时,能转移到目标地址的条件转移指令。时,能转移到目标地址的条件转移指令。JNS(jump if not sign)指令(为正转移)指令(为正转移)当当SF=0时能转移到目标地址的条件转移指令时能转移到目标地址的条件转移指令4)测试)测试PFJPJPE 指令(为偶转移)指令(为偶转移)PF=1时时,转移到目
16、标地址的条件转移指令的两种助记符转移到目标地址的条件转移指令的两种助记符.第15页,共69页,编辑于2022年,星期三9/21/202216JNP/JPO (为奇转移)为奇转移)当当PF=0时时,转移到目标地址的条件转移指令转移到目标地址的条件转移指令5)测试)测试OFJO(jump if overflow)指令(溢出转移)指令(溢出转移)当满足当满足OF=1时,转移到目标地址的条件转移指令。时,转移到目标地址的条件转移指令。JNO(jump if not overflow)指令(未溢出转移)指令(未溢出转移)当当OF=0时,转移到目标地址的条件转移指令。时,转移到目标地址的条件转移指令。第1
17、6页,共69页,编辑于2022年,星期三9/21/202217单路分支:单路分支:在在C语言中,单分支语句语言中,单分支语句 if(AL)(BL)AL=BL;汇编语言实现方法:汇编语言实现方法:比较指令后面紧跟上条件转移指令。比较指令后面紧跟上条件转移指令。CMP AL,BLJAE L1MOV AL,BLL1:反方向判断反方向判断第17页,共69页,编辑于2022年,星期三9/21/202218例例6.6 求一组无符号数的最大值和最小值,分别放求一组无符号数的最大值和最小值,分别放 在存储单元在存储单元MAX和和MIN中。中。DATA SEGMENT A DW 349AH,567H,7802H
18、,9031H,0002H,8671H MAX DW?MIN DW?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX :;插入程序 MOV AH,4CH INT 21HCODE ENDS END START 第18页,共69页,编辑于2022年,星期三9/21/202219 MOV AX,0 ;AX用于存放最大值 MOV BX,0FFFFH ;BX用于存放最小值 MOV SI,0 MOV CX,6L1:CMP AX,ASI JA L2 MOV AX,ASIL2:CMP BX,ASI JB L3 MOV
19、BX,ASIL3:INC SI INC SI LOOP L1 MOV MAX,AX MOV MIN,BX 第19页,共69页,编辑于2022年,星期三9/21/202220两路分支程序举例:两路分支程序举例:在在C语言中,两路分支表示如下:语言中,两路分支表示如下:if(ALCX,若,若CX不为不为0,则将控制转移,则将控制转移到目标操作数(指定标号处);否则顺序执行到目标操作数(指定标号处);否则顺序执行LOOP指令之后指令之后的指令。的指令。程序举例程序举例例例6l 一组数求和,假设有一组数求和,假设有20个个16位二进制数,位二进制数,要对这要对这20个数求和(假设和值个数求和(假设和值
20、SI MOV CX,NUM SHR CX,1;NUM/2=CXNZERO:INC SI INC SI MOV AX,ARR1SI ADD AX,ARR2SI MOV SUMSI,AX LOOPNZ NZERODATA SEGMENTARR1 DW 23H,34H,0,5H,66H,0,345H,567HARR2 DW 34H,24H,0,2H,44H,0,345H,56HNUM EQU$-OFFSET ARRAY2SUM DW 15 DUP(?)(?)DATA ENDS第34页,共69页,编辑于2022年,星期三9/21/202235 JNZ L MOV DL,Y JMP Q L:MOV DL
21、,N Q:MOV AH,02H INT 21H MOV AH,4CH INT 21HCODE ENDS END START3、JCXZ(CX为为 0转移)转移)格式:格式:JCXZ 短矩离标号短矩离标号 功能:功能:JCXZ指令在指令在CX等于等于0时将控制转移到时将控制转移到 目标操作数(目标标号处)。目标操作数(目标标号处)。第35页,共69页,编辑于2022年,星期三9/21/2022366.3 多重循环程序设计多重循环程序设计二重循环的参考格式:二重循环的参考格式:MOV CX,COUNT1;外外层层循循环环计计数数值值LOOPER1:.MOV BUF,CX ;存外循环计数到存外循环计
22、数到BUF MOV CX,COUNT2;内层循环计数值内层循环计数值LOOPER2:.LOOP LOOPER2;内层循环结束;内层循环结束 MOV CX,BUF;恢复外层循环计数值恢复外层循环计数值 .LOOP LOOPER1;外层循环结束外层循环结束第36页,共69页,编辑于2022年,星期三9/21/202237例题例题6.4:将:将N个不同的无符号数个不同的无符号数 A0,A1,A2,AN-1 由小到大排序。由小到大排序。DATA SEGMENT A DB 9,8,7,6,5,4,3,2,1,0 COUNT EQU$-offset ADATA ENDSCODE SEGMENT ASSUM
23、E CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AH,4CH INT 21HCODE ENDS END START第37页,共69页,编辑于2022年,星期三9/21/202238 MOV CX,COUNT-1 ;外循环循环COUNT-1次 MOV BX,0 LOOP1:MOV DX,CX ;把CX的值暂时保存在DX中 MOV SI,1 LOOP2:MOV AL,ABX CMP AL,ABX+SI JNA L1 XCHG AL,ABX+SI;交换ABX和ABX+SI值 MOV ABX,AL L1:INC SI LOOP LOOP2 INC BX
24、 MOV CX,DX;恢复CX的值 LOOP LOOP1 第38页,共69页,编辑于2022年,星期三9/21/2022396.4 子程序子程序6.4.1子程序定义子程序定义 用用一一对对伪伪指指令令PROCENDP定定义义一一个个子子程程序序(过过程程),其格式如下:其格式如下:名称名称 PROC NEARFAR RET 名称名称 ENDP6.4.2子程序调用与返回子程序调用与返回 调用子程序用调用子程序用CALL指令,指令,CALL指令将其下条指令指令将其下条指令的地址(返回地址)保存在堆栈里,将控制转移到的地址(返回地址)保存在堆栈里,将控制转移到过程,执行。当执行到过程,执行。当执行到
25、RET指令时,指令时,RET指令就会指令就会到堆栈里找到由到堆栈里找到由CALL指令保存的返回地址,将控指令保存的返回地址,将控制返回调用(制返回调用(CALL)指令的下条指令继续运行。)指令的下条指令继续运行。第39页,共69页,编辑于2022年,星期三9/21/202240调用子程序用CALL指令示意如下:示意如下:过程调用(主程序)过程调用(主程序)过程定义(子程序)过程定义(子程序)过程名过程名 PROC NEAR CALL过程名过程名 RET 过程名过程名 ENDP6.4.3调用和返回指令调用和返回指令1、CALL(调用)指令(调用)指令格式:格式:CALL 目的操作数目的操作数具体
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六 循环 分支 程序 PPT 讲稿
限制150内