1、6.4 6.4 控制转移类控制转移类 无条件转移指令无条件转移指令条件转移指令条件转移指令循环指令循环指令 控制转移类指令通过控制转移类指令通过改变改变IP(和(和CS)值,实现程序执行顺序的改变值,实现程序执行顺序的改变6.4.1 无条件转移指令无条件转移指令 对标志位的影响:无。对标志位的影响:无。只要执行无条件转移指令只要执行无条件转移指令JMP,就使程序转,就使程序转到指定的目标地址处,从目标地址处开始执到指定的目标地址处,从目标地址处开始执行指令行指令操作数操作数label是要转移到的是要转移到的目标地址目标地址(目的地目的地址址、转移地址转移地址)JMP labelJMP labe
2、l;程序转向;程序转向labellabel标号指定的地址标号指定的地址JMP r16/m16;IPr16/m16例例6.1(1)jmp GO .GO:(2)lea bx,GOjmp bx(3)jmp word ptrbx6.4.2 条件转移指令条件转移指令指定的条件指定的条件cc如果成立,程序转移到由标号如果成立,程序转移到由标号label指定的目标地址去执行指令;条件不指定的目标地址去执行指令;条件不成立,则程序将顺序执行下一条指令成立,则程序将顺序执行下一条指令对标志位的影响:无。对标志位的影响:无。Jcc labelJcc label ;条件满足,发生转移:;条件满足,发生转移:IPIP
3、IPIP8 8位位移位位移量量 ;条件不满足,顺序执行;条件不满足,顺序执行Jcc指令的分类指令的分类Jcc指令不影响标志,但要利用标志。指令不影响标志,但要利用标志。根据利用的标志位不同,根据利用的标志位不同,Jcc指令分成指令分成3种情况:种情况:1.判断单个标志位状态判断单个标志位状态2.比较无符号数高低比较无符号数高低3.比较有符号数大小比较有符号数大小转移条件转移条件cc:单个标志状态:单个标志状态JZ/JEZF=1Jump if Zero/EqualJNZ/JNEZF=0Jump if Not Zero/Not EqualJSSF=1Jump if SignJNSSF=0Jump
4、if Not SignJP/JPEPF=1Jump if Parity/Parity EvenJNP/JPOPF=0Jump if Not Parity/Parity OddJOOF=1Jump if OverflowJNOOF=0Jump if Not OverflowJCCF=1Jump if CarryJNCCF=0Jump if Not Carry第第 6 6 章章 采用多个助记符,只是为了方便记忆和使用采用多个助记符,只是为了方便记忆和使用例:例:JS/JNS指令指令;计算计算|XY|(绝对值)(绝对值);X和和Y为存放于为存放于X单元和单元和Y单元的单元的16位操作数位操作数;结果
5、存入;结果存入resultmov ax,Xmov ax,Xsub ax,Y ;X-Ysub ax,Y ;X-Yjns nonnegjns nonnegneg axneg ax;negneg是求补指令是求补指令nonneg:nonneg:mov result,axmov result,ax转移条件转移条件cc:两数大小关系:两数大小关系JB/JNAECF=1Jump if Below/Not Above or EqualJNB/JAECF=0Jump if Not Below/Above or EqualJBE/JNACF=1或或ZF=1Jump if Below/Not AboveJNBE/J
6、ACF=0且且ZF=0Jump if Not Below or Equal/AboveJL/JNGESFOFJump if Less/Not Greater or EqualJNL/JGESF=OFJump if Not Less/Greater or EqualJLE/JNGZFOF或或ZF=1Jump if Less or Equal/Not GreaterJNLE/JGSF=OF且且ZF=0Jump if Not Less or Equal/Greater第第 6 6 章章比较无符号数高低比较无符号数高低无符号数的大小用高(无符号数的大小用高(Above)低()低(Below)表示表示利
7、用利用CF确定高低、利用确定高低、利用ZF标志确定相等标志确定相等(Equal)两数的高低分成两数的高低分成4种关系:种关系:低于(不高于等于):低于(不高于等于):JBJB(JNAEJNAE)不低于(高于等于):不低于(高于等于):JNBJNB(JAEJAE)低于等于(不高于):低于等于(不高于):JBEJBE(JNAJNA)不低于等于(高于):不低于等于(高于):JNBEJNBE(JAJA)例:比较无符号数例:比较无符号数cmp ax,bxcmp ax,bx;比较;比较axax和和bxbxjnb nextjnb next;若;若axaxbxbx,转移,转移xchg ax,bxxchg ax
8、,bx;若;若axaxbxbx,交换,交换next:next:.结果:结果:AX保存较大的保存较大的无符号数无符号数比较有符号数大小比较有符号数大小有符号数的大(有符号数的大(Greater)小()小(Less)需要)需要组合组合OF、SF标志,并利用标志,并利用ZF标志确定相等标志确定相等(Equal)两数的大小分成两数的大小分成4种关系:种关系:小于(不大于等于):小于(不大于等于):JLJL(JNGEJNGE)不小于(大于等于):不小于(大于等于):JNLJNL(JGEJGE)小于等于(不大于):小于等于(不大于):JLEJLE(JNGJNG)不小于等于(大于):不小于等于(大于):JN
9、LEJNLE(JGJG)例:比较有符号数例:比较有符号数cmp ax,bxcmp ax,bx;比较;比较axax和和bxbxjnl nextjnl next;若;若axaxbxbx,转移,转移xchg ax,bxxchg ax,bx;若;若axaxbxbx,交换,交换next:next:.结果:结果:AX保存较大的保存较大的有符号数有符号数6.4.3 循环指令循环指令循环指令默认利用循环指令默认利用CX计数器计数器对标志位的影响:无。对标志位的影响:无。LOOP labelLOOP label;CXCXCXCX1 1,;CX0CX0,循环到标号,循环到标号labellabelJ JCXCXZ labelZ label;CXCX0 0,转移到标号,转移到标号labellabelLOOP指令功能示意图指令功能示意图例例 jcxz OK NEXT:loop NEXT OK:例例mov cx,5;CX存放循环次数存放循环次数mov bx,4 next:mov arraybx,BLdec bxloop next