五章循环与分支程序设计.ppt
《五章循环与分支程序设计.ppt》由会员分享,可在线阅读,更多相关《五章循环与分支程序设计.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1五章循环与分支程序设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望25.1 循环与转移指令一、循环控制指令二、转移指令控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变3一、循环控制指令w8086指令系统的循环控制指令均为二字节指令n一字节为转移的相对位移量(8位带符号的二进制数)IP IP+相对位移量 EIP EIP+相对位移量n隐含使用CX作为循环计数器 程序中的某段需反复执行若干次时,用循环来实现短转移4 LOOP label ;CXCX1
2、,CX0,循环到标号label一、循环控制指令LOOPE/LOOPZ label;CXCX1,CX0 且ZF1,循环到标号labelLOOPNE/NZ label;CXCX1,CX0且ZF0,循环到标号label等于时循环不等于时循环5一、循环控制指令(例)MOV CX,COUNT;设置循环次数MOV SI,OFFSET DATA_BYTEXOR AX,AX;BX清0,用于存放累加和 AGAIN:ADD AL,SIADC AH,0INC SILOOP AGAIN;计数器减1,不为0继续循环6一、循环控制指令(例)MOV CX,COUNT;设置循环次数MOV SI,OFFSET STRINGXO
3、R BX,BX;BX清0,用于记录空格数MOV AL,20H AGAIN:CMP AL,SIJNZ NEXT;ZF=0,非空格,转移INC BX;ZF=1,是空格,个数加1NEXT:INC SILOOP AGAIN;计数器减1,不为0继续循环7二、转移指令w无条件转移指令w条件转移指令8无条件转移指令JMP label ;程序转向label标号指定的地址NEARFARw只要执行无条件转移指令JMP,就使程序转到指定的目标地址处,从目标地址处开始执行那里的指令wJMP指令分成4种类型:段内转移、直接寻址 段内转移、间接寻址 段间转移、直接寻址 段间转移、间接寻址目的地址与JMP属同一逻辑段,只修
4、改IP值从一个代码段转移到另一个代码段,CS和IP都会被修改91.无条件转移指令目标地址的寻址方式w直接寻址方式n转移地址象立即数一样,直接在指令的机器代码中,就是直接寻址方式w间接寻址方式n转移地址在寄存器或主存单元中,就是通过寄存器或存储器的间接寻址方式用标号表达用寄存器或存储器操作数表达101.无条件转移指令目标地址的范围:段内w段内转移近转移(near)n在当前代码段64KB范围内转移(32KB范围)n不需要更改CS段基值,只要改变IP偏移地址w段内转移短转移(short)n转移范围可以用一个字节表达,在段内128127范围的转移代码段代码段111.无条件转移指令目标地址的范围:段间w
5、段间转移远转移(far)n从当前代码段跳转到另一个代码段,可以在1MB范围n需要更改CS段基值和IP偏移地址n目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址代码段代码段实际编程时,汇编程序会根据目标地址的距离,自动处理成短转移、近转移或远转移程序员可用操作符short、near ptr 或far ptr 强制12段内直接寻址转移 JMP label;IPIP+位移量w位移量是紧接着JMP指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移w当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负实际为相对寻址JMP AGAIN;转移到AGAIN处继续执行AG
6、AIN:DEC CX;标号AGAIN的指令JMP OUTPUT;转向OUTPUTOUTPUT:MOV RESULT,AL;标号OUTPUT的指令13段内间接寻址转移 JMP r16/m16;IPr16/m16w将一个16位寄存器或主存字单元内容送入IP寄存器,作为新的指令指针,但不修改CS寄存器的内容JMP AX;IPAXJMP WORD PTR BX;IPBX14段间直接寻址转移JMP far ptr label;IPlabel的偏移地址;CSlabel的段基值w将标号所在段的段基值作为新的CS值,标号在该段内的偏移地址作为新的IP值;程序跳转到新的代码段执行JMP FAR PTR OTHE
7、RSEG;远转移到代码段2的otherseg15段间间接寻址转移JMP far ptr mem ;IPmem,CSmem+2w用一个双字存储单元表示要跳转的目标地址。这个目标地址存放在主存中连续的两个字单元中的,低位字送IP寄存器,高位字送CS寄存器MOV WORD PTR BX,0MOV WORD PTR BX+2,1500HJMP FAR PTR BX ;转移到1500H:0162.条件转移指令Jcc label ;条件满足,发生转移:IPIP8位位移量 ;条件不满足,顺序执行指定的条件cc如果成立,程序转移到由标号label指定的目标地址去执行指令;条件不成立,则程序将顺序执行下一条指令
8、操作数label是采用短转移,称为相对寻址方式172.条件转移指令wJcc指令的操作数label是一个标号n一个8位位移量是相对于当前IP的,且距当前IP地址128127个单元的范围之内,属于段内短距离转移wJcc指令为2个字节,条件不满足时的顺序执行就是当前指令偏移指针IP加2182.条件转移指令指令的分类wJcc指令不影响标志,但要利用标志。w根据利用的标志位不同,19条指令分成4种情况:判断单个标志位状态 比较无符号数高低 比较有符号数大小 判断计数器CX为019助记符标志位助记符标志位JCCF=1JA/JNBECF=0且ZF=0JNCCF=0JAE/JNBCF=0或ZF=1JZ/JEZ
9、F=1JB/JNAECF=1且ZF=0JNZ/JNEZF=0JBE/JNACF=1或ZF=1JSSF=1JG/JNLESF=OF且ZF=0JNSSF=0JGE/JNLSF=OF或ZF=1JP/JPEPF=1JL/JNGESFOF且ZF=0JNP/JPOPF=0JLE/JNGSFOF或ZF=1JOOF=1JCXZCX=0JNOOF=0 实际虽然指令只有19条,但却有31个助记符 采用多个助记符,只是为了方便记忆和使用20判断单个标志位状态这组指令单独判断5个状态标志之一JZ/JE和JNZ/JNE:利用零标志ZF,判断结果是否为零(或相等)JS和JNS:利用符号标志SF,判断结果是正是负JO和JN
10、O:利用溢出标志OF,判断结果是否产生溢出JP/JPE和JNP/JPO:利用奇偶标志PF,判断结果中“1”的个数是偶是奇JC和JNC:利用进位标志CF,判断结果是否进位或借位例 题例 题例 题例 题例 题 212.条件转移指令 JZ/JNZ指令REPZ CMPSB;重复比较两个字符JNZ UNMAT;ZF0(不等),转移MOV AL,0;顺序执行(相等)JMP OUTPUT UNMAT:MOV AL,0FFH OUTPUT:MOV RESULT,ALREPZ CMPSB;重复比较两个字符JZ MAT;ZF1(相等),转移MOV AL,0FFH;顺序执行(不等)JMP OUTPUTMAT:MOV
11、 AL,0 OUTPUT:MOV RESULT,AL222.条件转移指令 JS/JNS指令w计算|XY|(绝对值)。X和Y为存放于X单元和Y单元的16位操作数,结果存入RESULT。MOV AX,XSUB AX,YJNS NONNEGNEG AXNONNEG:MOV RESULT,AX232.条件转移指令 JO/JNO指令w计算XY。X和Y为存放于X单元和Y单元的16位操作数,若溢出,则转移到OVERFLOW处理MOV AX,XSUB AX,YJO OVERFLOW.;无溢出,结果正确OVERFLOW:.;有溢出处理242.条件转移指令 JP/JNP指令w设字符的ASCII码在AL寄存器中。将
12、字符加上奇校验位:在字符ASCII码中为“1”的个数为奇数时令其最高位为“0”,否则令最高位为“1”AND AL,7FH;最高位置“0”,同时判断“1”的个数JNP NEXT;个数已为奇数,则转向NEXTOR AL,80H;否则,最高位置“1”NEXT:.252.条件转移指令 JC/JNC指令w记录BX中1的个数XOR AL,AL;AL0,CF0AGAIN:TEST BX,0FFFFH;等价于 CMP BX,0JZ NEXTSHL BX,1JNC AGAININC ALJMP AGAINNEXT:.;AL保存1的个数262.条件转移指令无符号数的比较无符号数的大小用高(Above)低(Belo
13、w)表示利用CF确定高低、利用ZF标志确定相等(Equal)两数的高低分成4种关系:高于(不低于等于):JA(JNBE)高于等于(不低于):JAE(JNB)低于(不高于等于):JB(JNAE)低于等于(不高于):JBE(JNA)272.条件转移指令无符号数的比较(例)CMP AX,BX;比较AX和BXJAE NEXT;若AXBX,转移XCHG AX,BX;若AXBX,交换NEXT:.结果:AX保存较大的无符号数282.条件转移指令有符号数的比较w有符号数的大(Greater)小(Less)需要组合OF、SF标志,并利用ZF标志确定相等(Equal)w两数的大小分成4种关系:n 小于(不大于等于
14、):JL(JNGE)n小于等于(不大于):JLE(JNG)n大于(不小于等于):JG(JNLE)n大于等于(不小于):JGE(JNL)292.条件转移指令有符号数的比较(例)CMP AX,BX;比较AX和BXJGE NEXT;若AXBX,转移XCHG AX,BX;若AXBX,交换NEXT:.结果:AX保存较大的有符号数302.条件转移指令计数器CX为0转移JCXZ label ;CX0,发生转移:IPIP8位位移量 ;CX0,顺序执行CX寄存器通常在程序中用做计数器JCXZ指令用来判断计数是否为0315.2 循环程序设计一、循环程序的结构形式二、循环程序设计三、多重循环程序设计32一、循环程序
15、的结构形式 结束 初始化 循环的初始状态 循环体 循环的工作部分及修改部分 计数控制循环条件控制循环修改部分控制条件YN先循环,后判断33一、循环程序的结构形式 结束 初始化 循环的初始状态 循环体 循环的工作部分及修改部分 计数控制循环条件控制循环修改部分控制条件YN先判断,后循环34xor ax,ax;被加数ax清0mov cx,100again:add ax,cx;从100,99,.,2,1倒序累加loop again.model small.stack 256.datasumdw?.code.startupmov sum,ax;将累加和送入指定单元.exit 0end二、循环程序设计(
16、例)35例5.2 在ADDR单元存放着数Y的地址,试编制一程序把Y中1的个数存入COUNT单元中开始1的个数计数器0循环次数计数器CX16Y左移一次CF=11的个数计数器+1CX CX-1=0COUNT 1的个数计数器结束NYNY循环次数固定,完全由循环计数器控制36 DATA SEGMENT YDW 1234H ADDRDW Y COUNTDB?DATAENDS CODESEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV DL,0MOV BX,ADDRMOV AX,BXMOV CX,16REPEAT:SHL AX,1 JNC
17、 NEXT INC DLNEXT:LOOP REPEATEXIT0:MOV COUNT,DL MOV AH,4CH INT 21HCODE ENDS END START例5.237开始1的个数计数器0循环次数计数器CX16Y左移一次CF=11的个数计数器+1CX CX-1=0COUNT 1的个数计数器结束NYNYY=0NY例5.238DATA SEGMENTY DW 1234HADDR DW YCOUNT DB?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV DL,0 MOV BX,ADDR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 分支 程序设计
限制150内