控制转移类指令.ppt
《控制转移类指令.ppt》由会员分享,可在线阅读,更多相关《控制转移类指令.ppt(43页珍藏版)》请在三一文库上搜索。
1、3.2.4 控制转移类指令,控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令 重点掌握:JMP/Jcc/LOOP,控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变,1. 无条件转移指令,只要执行JMP,就使程序转到指定的目标地址处,从目标地址处开始执行那里的指令 操作数label是要转移到的目标地址(目的地址、转移地址) JMP指令分成4种类型: 段内转移、直接寻址; 段内转移、间接寻址 段间转移、直接寻址; 段间转移、间接寻址,JMP label ;程序转向label标号指定的地址,jmp again ;转向again处继续执行 again: de
2、c cx ;标号again的指令 jmp output ;转向output output: mov result,al ;标号output的指令 JMP 0120H ;直接转向CS:0120H单元,无条件转移指令,2. 条件转移指令,格式: Jcc label label: ;条件满足,跳转标号label指定的目标地址去执行指令 ;条件不满足,顺序执行下一条指令 ;操作数label是采用短转移,称为相对寻址方式,相对寻址方式,Jcc指令的操作数label是一个标号 一个8位位移量,表示Jcc指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移 8位位移量是相对于当前IP的,且距当前IP地
3、址128127个单元的范围之内,属于段内短距离转移 Jcc指令为2个字节,条件不满足时的顺序执行就是当前指令偏移指针IP加2,Jcc指令的分类,Jcc指令不影响标志,但要利用标志位。根据利用的标志位不同,16条指令分成3种情况: (1)判断单个标志位状态 (2)比较无符号数高低 (3)比较有符号数大小,(1)判断单个标志位状态,这组指令单独判断5个状态标志之一 JZ和JNZ:判断结果是否为零(或相等) JS和JNS:判断结果是正是负 JO和JNO:判断结果是否产生溢出 JP和JNP:判断结果中“1”的个数是偶是奇 JC和JNC:判断结果是否进位或借位,例:JZ/JNZ指令,test al,80
4、h ;测试AL的最高位 jz next1 ;D70(ZF1),转移 mov ah,0ffh ;D71,顺序执行 jmp done ;无条件转向 next1: mov ah,0 done: .,test al,80h ;测试最高位 jnz next2 ;D71(ZF0),转移 mov ah,0 ;D70,顺序执行 jmp done ;无条件转向 next2: mov ah,0ffh done: .,例:JC/JNC,CMP AX, BX JC NEXT MOV AX , BX NEXT:MOV MIN ,AX,例:JS/JNS指令,;计算|XY|(绝对值) ;X和Y为存放于X单元和Y单元的16位
5、操作数 ;结果存入result单元 mov ax , X sub ax , Y jns next neg ax ;neg是求补指令:0ax next: mov result , ax,例:JO/JNO指令,;计算XY; ;X和Y为存放于X单元和Y单元的字操作数 ;若溢出,则转移到overflow处理 mov ax , X sub ax , Y jo overflow . ;无溢出,结果正确 overflow: . ;有溢出,出错处理,例:JP/JNP指令,;设字符的ASCII码在AL寄存器中 ;将字符加上奇校验位 and al,7fh ;最高位先置“0”,并判断“1”的个数 jnp next
6、;个数已为奇数,则转向next or al,80h ;否则,最高位置“1” next: .,(2)比较无符号数高低,无符号数的大小用 高(Above)、低(Below)表示,利用CF确定高低 利用ZF标志确定相等(Equal ) 两数的高低分成: 低于(不高于等于):JB(JNAE/JC) 不低于(高于等于):JNB(JAE/JNC) 低于等于(不高于):JBE(JNA) 不低于等于(高于):JNBE(JA ) 相等(等于零):JE/JZ 不相等(不等于零):JNE/JNZ,(3)比较有符号数大小,有符号数的大小用 大(Greater)小(Less)表示 利用ZF标志确定相等(Equal) 两
7、数的大小分成4种关系: 小于(不大于等于):JL(JNGE) 不小于(大于等于):JNL(JGE) 小于等于(不大于):JLE(JNG) 不小于等于(大于):JNLE(JG ),Jcc M,N,M N 无符号数(A,B) 有符号数(G,L) =) JB(JNAE) JL(JNGE) ) JBE(JNA) JLE(JNG) (= () JNB(JAE) JNG(JLE) = JE/JZ JNE/JNZ,例:比较无符号数,cmp ax , bx ;比较ax和bx jnb next ;若axbx,转移 xchg ax , bx ;若axbx,交换 next: .,结果:AX保存较大的无符号数,CMP
8、 AL,BL ;AL和BL比较 JNG BBB ;若ALBL,则转 XCHG AL,BL ;若ALBL,则交换 BBB: CMP AL,CL ;AL和CL比较 JNG CCC ;若ALCL,则转 XCHG AL,CL ;若ALCL,则交换 CCC: HLT,例:比较有符号数,举例:比较AL、BL、CL中带符号数的大小,将最小数放在AL中。,例:若X50,转到TOO_HIGH,否则 计算X-Y: 溢出转到OVERFLOW, 否则 |X-Y|RESULT,MOV AX, X CMP AX, 50 JG TOO_HIGH SUB AX, Y JO OVERFLOW JNS NONNEG NEG AX
9、 NONNEG: MOV RESULT, AX TOO_HIGH: OVERFLOW: ,【例】复制数据块,AREA1,AREA2,目的数据块,数据段,.,.,AREA1+1,AREA2+1,.,.,AREA1+99,AREA2+99,.,SI=2000H INC SI SI=2001H,(AREA1)=34H INC AREA1 INC 2000H (AREA1)=35H,AREA1,AREA2,.,.,AREA1+1,AREA2+1,.,.,AREA1+99,AREA2+99,.,SI,DI,SI=2000H SI AREA10 INC SI SI=2001H SI AREA11,【例】等
10、价程序,LEA SI , AREA1 LEA DI , AREA2 MOV CX , 100 AGAIN: MOV AL , SI MOV DI , AL INC SI INC DI DEC CX JNE AGAIN,赋初值,循环体,【例】另一种做法,MOV SI , 0 MOV DI , 0 MOV CX , 100 AGAIN: MOV AL , AREA1SI MOV AREA2DI , AL INC SI INC DI DEC CX JNZ AGAIN,赋初值,循环,3. 循环指令(loop),循环指令默认利用CX计数器,方便实现计数循环的程序结构 label操作数采用相对寻址方式,L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 控制 转移 指令
链接地址:https://www.31doc.com/p-2591551.html