《控制转移指令》ppt课件-2

上传人:tia****nde 文档编号:69554400 上传时间:2019-01-14 格式:PPT 页数:72 大小:895.31KB
返回 下载 相关 举报
《控制转移指令》ppt课件-2_第1页
第1页 / 共72页
《控制转移指令》ppt课件-2_第2页
第2页 / 共72页
《控制转移指令》ppt课件-2_第3页
第3页 / 共72页
《控制转移指令》ppt课件-2_第4页
第4页 / 共72页
《控制转移指令》ppt课件-2_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《《控制转移指令》ppt课件-2》由会员分享,可在线阅读,更多相关《《控制转移指令》ppt课件-2(72页珍藏版)》请在金锄头文库上搜索。

1、教学提示,在学习和应用汇编语言进行程序设计时,有一些经常遇到的问题,例如算术运算、代码转换等,需要掌握,总结常见编程问题,五、控制转移类指令,控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令,有 条,包括: 无条件转移指令 条件转移指令 循环指令 子程序调用、返回指令 中断调用指令,控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变,1、无条件转移指令,只要执行无条件转移指令JMP,就使程序转到指定的目标地址处,从目标地址处开始执行那里的指令 操作数label是要转移到的目标地址(目的地址、转移地址) JMP指令分成4种类型: 段内转移、直接寻址 段内

2、转移、间接寻址 段间转移、直接寻址 段间转移、间接寻址,JMP label ;程序转向label标号指定的地址,JMP,目标地址的寻址方式,直接寻址方式 转移地址象立即数一样,直接在指令的机器代码中,就是直接寻址方式 间接寻址方式 转移地址在寄存器或主存单元中,就是通过寄存器或存储器的间接寻址方式,用标号表达,用寄存器或存储器操作数表达,JMP,目标地址的范围:段内,段内转移近转移(near) 在当前代码段64KB范围内转移( 32KB范围) 不需要更改CS段地址,只要改变IP偏移地址 段内转移短转移(short) 转移范围可以用一个字节表达,在段内128127范围的转移,JMP,目标地址的范

3、围:段间,段间转移远转移(far) 从当前代码段跳转到另一个代码段,可以在1MB范围 需要更改CS段地址和IP偏移地址 目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址,代码段,代码段,实际编程时,汇编程序会根据目标地址的距离, 自动处理成短转移、近转移或远转移 程序员可用操作符short、near ptr 或far ptr 强制,JMP,JMP,段内转移、直接寻址,JMP label ;IPIP+位移量 位移量是紧接着JMP指令后的那条指令的偏移地址到目标指令偏移地址的地址位移 当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负 jmp again ;转移到

4、again处继续执行 again: dec cx ;标号again的指令 jmp output ;转向output output: mov result,al ;标号output的指令,实际为相对寻址,标号,段内转移、间接寻址,JMP r16/m16 ;IPr16/m16 将一个16位寄存器或主存字单元内容送入IP寄存器,作为新的指令指针,但不修改CS寄存器的内容 jmp ax ;IPAX jmp word ptr 2000h ;IP2000h,JMP,存储器或寄存器,段间转移、直接寻址,JMP far ptr label ;IPlabel的偏移地址 ;CSlabel的段地址 将标号所在段的段

5、地址作为新的CS值,标号在该段内的偏移地址作为新的IP值;这样,程序跳转到新的代码段执行 jmp far ptr otherseg ;远转移到代码段2的otherseg,JMP,标号,段间转移、间接寻址,JMP far ptr mem ;IPmem,CSmem+2 用一个双字存储单元表示要跳转的目标地址。这个目标地址存放在主存中连续的两个字单元中的,低位字送IP寄存器,高位字送CS寄存器 mov word ptr bx,0 mov word ptr bx+2,1500h JMP far ptr bx ;转移到1500h:0,JMP,存储器,2、条件转移指令,指定的条件cc如果成立,程序转移到由

6、标号label指定的目标地址去执行指令;条件不成立,则程序将顺序执行下一条指令 操作数label是采用短转移,称为相对寻址方式,Jcc,Jcc label ;条件满足,发生转移:IPIP8位位移量 ;条件不满足,顺序执行,条件转移的寻址方式,Jcc指令的操作数label是一个标号 一个8位位移量,表示Jcc指令后的那条指令的偏移地址到目标指令偏移地址的地址位移 8位位移量是相对于当前IP的,且距当前IP地址128127个单元的范围之内,属于段内短距离转移 Jcc目标地址就采用这种相对寻址方式 Jcc指令为2个字节,条件不满足时的顺序执行就是当前指令偏移指针IP加2,Jcc,Jcc指令的分类,J

7、cc指令不影响标志,但要利用标志。根据利用的标志位不同,17条指令分成4种情况: 判断单个标志位状态 比较无符号数高低 比较有符号数大小 判断计数器CX为0,Jcc,特点:都是对flag寄存器的位进行判断,条件转移指令中的条件cc,Jcc,实际虽然指令只有16条,但却有30个助记符 采用多个助记符,只是为了方便记忆和使用, 判断单个标志位状态,这组指令单独判断5个状态标志之一 JZ/JE和JNZ/JNE:利用零标志ZF,判断结果是否为零(或相等) JS和JNS:利用符号标志SF,判断结果是正是负 JO和JNO:利用溢出标志OF,判断结果是否产生溢出 JP/JPE和JNP/JPO:利用奇偶标志P

8、F,判断结果中“1”的个数是偶是奇 JC/JB/JNAE和JNC/JNB/JAE:利用进位标志CF,判断结果是否进位或借位,Jcc,例题1,例题2,例题3,例题4,例题5,例5.1:JZ/JNZ指令,mov bl,x cmp bl,y ;重复比较两个字符 jnz unmat ;ZF0(不等),转移 mov al,1 ;顺序执行(相等) jmp output unmat: mov al,0ffh output: mov bl,x cmp bl,y ;重复比较两个字符 jz mat ;ZF1(相等),转移 mov al,0ffh ;顺序执行(不等) jmp output mat: mov al,1

9、 output:,比较X、Y是否相等,相等则AL=1,否则为-1,例5.2:JS/JNS指令,;计算|XY|(绝对值) ;X和Y为存放于X单元和Y单元的16位操作数 ;结果存入result mov ax,X sub ax,Y jns nonneg neg ax ;neg是求补指令 nonneg: mov result,ax,例5.3:JO/JNO指令,;计算XY; ;X和Y为存放于X单元和Y单元的16位操作数 ;若溢出,则转移到overflow处理 mov ax,X sub ax,Y jo overflow . ;无溢出,结果正确 overflow: . ;有溢出处理,例5.4:JP/JNP指

10、令,;设字符的ASCII码在AL寄存器中 ;将字符加上奇校验位 ;在字符ASCII码中为“1”的个数已为奇数时 ;则令其最高位为“0”;否则令最高位为“1” and al,7fh ;最高位置“0”,同时判断“1”的个数 jnp next ;个数已为奇数,则转向next or al,80h ;否则,最高位置“1” next: .,例5.5a:JC/JNC指令,;记录BX中1的个数 xor al,al ;AL0,CF0 again: cmp bx,0 je next shl bx,1 jnc again inc al jmp again next: . ;AL保存1的个数,例5.5b:记录BX中“

11、1”的个数,xor al,al ;AL0,CF0 again: cmp bx,0 jz next shl bx,1 ;也可使用 shr bx,1 adc al,0 jmp again next: . ;AL保存1的个数,判断单个标志位状态小结,OF SF PF ZF CF,指令: JO/JNO JS/JNS JP/JNP JZ/JNZ JC/JNC,条件: OF=1/0 SF= 1/0 PF =1/0 ZF= 1/0 CF= 1/0,比较无符号数高低,无符号数的大小用高(Above)低(Below)表示 利用CF确定高低、利用ZF标志确定相等(Equal) 两数的高低分成4种关系: 低于(不高

12、于等于):JB(JNAE) 不低于(高于等于):JNB(JAE) 低于等于(不高于):JBE(JNA) 不低于等于(高于):JNBE(JA ),Jcc,一般与哪些指令配合使用?,例5.6a:比较无符号数,cmp ax,bx ;比较ax和bx jnb next ;若axbx,转移 xchg ax,bx ;若axbx,交换 next: .,结果:AX保存较大的无符号数,比较有符号数大小,有符号数的大(Greater)小(Less)需要组合OF、SF标志,并利用ZF标志确定相等(Equal) 两数的大小分成4种关系: 小于(不大于等于):JL(JNGE) 不小于(大于等于):JNL(JGE) 小于等

13、于(不大于):JLE(JNG) 不小于等于(大于):JNLE(JG ),Jcc,例5.6b:比较有符号数,cmp ax,bx ;比较ax和bx jnl next ;若axbx,转移 xchg ax,bx ;若axbx,交换 next: .,结果:AX保存较大的有符号数,3、循环指令(loop),执行步骤: (1) (CX) (CX)-1 (2)如满足测试条件,则跳转到指定地址,例5.7:记录空格个数,mov cx,count ;设置循环次数 mov si,offset string xor bx,bx ;bx清0,用于记录空格数 mov al,20h again: cmp al, si jnz

14、 next ;ZF=0,非空格,转移 inc bx ;ZF=1,是空格,个数加1 next: inc si loop again ;字符个数减1,不为0继续循环,计数器CX为0转移(循环指令),这是一条较特殊的指令 CX寄存器通常在程序中用做计数器 JCXZ指令用来判断计数是否为0,JCXZ label ;CX0,发生转移:IPIP8位位移量 ;CX0,顺序执行,判断计数器为0,mov cx,100 again: movsb ;传送一个字节 dec cx ;传送次数减1 jnz again ;判断传送次数cx是否为0 ;不为0(ZF=0),则转移;否则,结束,mov cx,100 again:

15、 jcxz next ;判断传送次数cx是否为0 movsb dec cx jmp again next: .,4、子程序指令,子程序是完成特定功能的一段程序 当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行 当运行完子程序功能后,采用RET返回指令回到主程序继续执行,演示,主程序与子程序,CALL label,主程序,RET,子程序,回到CALL指令后的指令处返回地址,子程序调用指令,CALL指令分成4种类型(类似JMP) CALL label ;段内调用、直接寻址 CALL r16/m16 ;段内调用、间接寻址 CALL far ptr label ;段间调用、直接寻址 CALL far ptr mem ;段间调用、间接寻址 CALL指令需要保存返回地址: 段内调用入栈偏移地址IP SPSP2,SS:SPIP 段间调用入栈偏移地址IP和段地址CS SPSP2,SS:SPIP SPSP2,SS:SPCS,CALL,子程序返回指令,根据段内和段间、有无参数,分成4种类型 RET ;无参数段内返回 RET i16 ;有参数段内返回 RET ;无参数段间返回 RET i16 ;有参数段间返回 需要弹出CALL指令压入堆栈的返回地址 段内返回出栈偏移地址IP IPSS:SP, SPSP2 段间返回出栈偏移地址IP和段地址CS IPSS:S

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号