循环与分支程序

上传人:仙*** 文档编号:247324669 上传时间:2024-10-17 格式:PPT 页数:69 大小:578.50KB
返回 下载 相关 举报
循环与分支程序_第1页
第1页 / 共69页
循环与分支程序_第2页
第2页 / 共69页
循环与分支程序_第3页
第3页 / 共69页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,10/7/2024,1,第六章 循环与分支程序设计,6.1,分支程序设计,6.2,循环程序设计,6.3,多重循环程序设计,6.4,子程序,10/7/2024,2,6.1,分支程序设计,6.1.1,标号,标号,:,用来说明可执行指令在汇编语言程序中的位置。,和变量类似,实质上是一个地址值。可以作为,转移指令(或,CALL,)的操作数。,属性:,段属性、位移量属性和距离属性。,注意,:,如果一个标号只在标号定义的段中用,JMP,或条件 转移指令,(,或,CALL),来访问,需要将标号的距离属 性定义为,NEAR,;,如果一个标号能被其他段中的,JMP,指令,(,或,CALL),来访问,那么需要将这个标号的距离定义为,FAR,。,10/7/2024,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,。,10/7/2024,4,2,、定义距离属性为,FAR,的标号,例如,:,L4,LABEL FAR,MOV AX,CX,L5 EQU THIS FAR,OR DL,30H,3,、同时定义距离属性为,FAR,和,NEAR,的标号,例如:,L6,LABEL FAR,L7:AND AL,0FH,或者,:,L6 EQU THIS FAR,L7:AND AL,0FH,10/7/2024,5,6.1.2,无条件转移指令,JMP,指令(无条件转移),格式:,JMP,目的操作数,功能:,JMP,指令无条件地控制转移至目标单元,(目的操作数),.,JMP,指令具体格式有以下五种:,1,、段内直接转移,格式:,JMP,标号名 ;标号为,NEAR,属性,这个,标号,是在本段内某一指令的前面,后面,缀以冒号来定义其位置的(位移量)。,10/7/2024,6,例如,:,JMP L2,L1:ADD AX,100,L2:MOV CX,30,JMP L1,2,、段内直接短转移,格式:,JMP SHORT,标号名,例如,:,JMP SHORT L1,L2:MOV DX,CX,L1:OR DL,30H,10/7/2024,7,3,、段内间接转移,格式:,JMP,地址表达式,例如,:,JMP BX,;,把控制转向,CS:BX,JMP VAR_WORD,;,把控制转向,VAR_WORD,存储单元中存放的地址处,4,、,段间间接转移,格式:,JMP,双字存储变量,功能:将控制转移到双字存储变量指定的地址,,即 将双字存储变量第二个字作为段地址,,第一个字为偏移地址处继续执行。,10/7/2024,8,5,、段间直接转移,格式:,JMP,标号 ;标号为,FAR,属性,例如:,CODE1 SEGMENT,JMP CODE2_NEXT,CODE1 ENDS,CODE2 SEGMENT,CODE2_NEXT LABEL FAR,CODE2 ENDS,10/7/2024,9,比较指令,CMP,指令(比较指令),格式:,CMP,目的操作数,源操作数,功能:,CMP,指令与,SUB,指令一样执行减法操作,,即目的操作数减去源操作数,但其结果不送,回目的操作数。执行指令后,两个操作数保,持原值不变。只是影响标志位:,OF,CF,PF,SF,ZF,AF.,注意:,CMP,指令后面往往会跟着一条条件转移,指令,根据比较结果产生不同的程序分支。,10/7/2024,10,条件转移指令,8086/8088,提供了很多条件转移指令,而且往往一条指令,有好几种助记符表示形式,归纳主要分成两大类:,判断两数大小的条件转移指令。,测试单个标志位的条件转移相令。,1,、比较两个无符号数,判断无符号数大小的条件转移指令,1,),JA,JNBE,(,jump if not blow or equal,or above,),JA,指令(高于转移),JNBE,指令(不低于等于转移),这是一条条件转移指令的两种助记符。,当两个无符号数进行比较时,如果,A,B,成立则转移。,10/7/2024,11,2,),JBE,JNA,(,jump if blow or equal,or not above,),JBE,指令(低于或等于转移),JNA,指令(不高于转移),当两个无符号数进行比较时,如果,AB,成立,则转移,3,),JAE,JNB,(,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,成立则转移。,10/7/2024,12,2,、判断带符号数的大小的条件转移指令,1,),JG,JNLE,(,jump if greater,or not less or equal,),JG,指令(大于转移),JNLE,措令(不小于等于转移),当两个带符号数相比较时,如果,A,B,,则转移,到目标地址。,2,),JGE,JNL,(,jump if greater or equal,or not less,),JGE,指令(大于等于转移),JNL,指令(不小于转移),两个带符号数相比较时,若,AB,转移到目标地址,10/7/2024,13,3,),JL,JNGE,(,jump if less,or not greater or equal,),JL,指令(小于转移),JNGE,指令(不大于等于转移),当两个带符号数相比较时,当,AB,时,转移到目标地址。,4,),JLE,JNG,(,jump if less or equal,or not greater,),JLE,指令(小于等于转移),JNG,指令(不大于转移),当两个带符号数相比较时,当,AB,时,转移到目标地址。,2,、判断带符号数的大小的条件转移指令,10/7/2024,14,3,、测试单个标志的条件转移指令,1,)测试,ZF,JE,JZ,(,jump if zero,or equal,),JE,指令(相等则转移),JZ,指令(等于,0,转移),当,ZF=l,时转移到目标地址的条件转移指令的两种,助记符。它既适用于判断无符号数的相等,又适,用于判断带符号数的相等,。,JNE,JNZ,(,jump if not zero,or not equal,),JNE,指令(不相等则转移),JNZ,指令(不等于,0,转移),当,ZF=0,时转移到目标地址的条件转移指令的两种,助记符。既适用于判断有,/,无符号数的相等,.,10/7/2024,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,JP,JPE,指令(为偶转移),PF=1,时,转移到目标地址的条件转移指令的两种助记符,.,10/7/2024,16,JNP/JPO,(,为奇转移),当,PF=0,时,转移到目标地址的条件转移指令,5,)测试,OF,JO,(,jump if overflow,)指令(溢出转移),当满足,OF=1,时,转移到目标地址的条件转移指令。,JNO,(,jump if not overflow,)指令(未溢出转移),当,OF=0,时,转移到目标地址的条件转移指令。,10/7/2024,17,单路分支:,在,C,语言中,单分支语句,if(AL)(BL)AL=BL,;,汇编语言实现方法:,比较指令后面紧跟上条件转移指令。,CMP AL,BL,JAE L1,MOV AL,BL,L1:,反方向判断,10/7/2024,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,10/7/2024,19,MOV AX,0 ;AX,用于存放最大值,MOV BX,0FFFFH ;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,10/7/2024,20,两路分支程序举例:,在,C,语言中,两路分支表示如下:,if,(,ALCX,,若,CX,不为,0,,则将控制转移到目标操作数(指定标号处);否则顺序执行,LOOP,指令之后的指令。,程序举例,例,6,l,一组数求和,假设有,20,个,16,位二进制数,,要对这,20,个数求和(假设和值,SI,MOV CX,NUM,SHR CX,1;NUM/2=CX,NZERO:INC SI,INC SI,MOV AX,,,ARR1SI,ADD AX,,,ARR2SI,MOV SUMSI,AX,LOOPNZ NZERO,DATA SEGMENT,ARR1 DW 23H,34H,0,5H,66H,0,345H,567H,ARR2 DW 34H,24H,0,2H,44H,0,345H,56H,NUM EQU,$,-OFFSET ARRAY2,SUM DW 15 DUP,(?),DATA ENDS,10/7/2024,35,JNZ L,MOV DL,Y,JMP Q,L:MOV DL,N,Q:MOV AH,02H,INT 21H,MOV AH,4CH,INT 21H,CODE ENDS,END START,3,、,JCXZ,(,CX,为,0,转移),格式:,JCXZ,短矩离标号,功能:,JCXZ,指令在,CX,等于,0,时将控制转移到,目标操作数(目标标号处)。,10/7/2024,36,6.3,多重循环程序设计,二重循环的参考格式:,MOV CX,COUNT1,;,外层循环计数值,LOOPER1:,.,MOV BUF,CX,;,存外循环计数到,BUF,MOV CX,COUNT2,;,内层循环计数值,LOOPER2:,.,LOOP LOOPER2,;内层循环结束,MOV CX,BUF,;,恢复外层循环计数值,.,LOOP LOOPER1,;,外层循环结束,10/7/2024,37,例题,6.4,:将,N,个不同的无符号数,A,0,,,A,1,,,A,2,,,,,A,N-1,由小到大排序。,DATA SEGMENT,A DB 9,8,7,6,5,4,3,2,1,0,COUNT EQU$-offset A,DATA ENDS,CODE SEGMENT,ASSUME CS:CODE,DS:DATA,START:MOV AX,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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