汇编笔记4

控制转移指令

无条件转移指令 JMP

条件转移指令    JZ/JNZ,JE/JNE,jS/JNS,JO/JNO,JP/JNP,JB/JNB,JL/JNL,JBE/JNBE,JLE/JNLE,JCXZ

循环指令   LOOP,LOOPZ/LOOPE,LOOPNZ/LOOPNE

子程序调用和返回指令 CALL,RET

中断与中断返回指令 INT,INTO,IRET

下面详细解释

1.无条件转移指令:

段内直接短转移:JMP SHORT OPR

           执行操作:(IP)←(IP)+8位位移量

段内直接近转移:JMP NEAR PTR OPR

           执行操作:(IP)←(IP)+16位位移量

段内间接转移:   JMP WORD PTR OPR

           执行操作:(IP)←(EA)

段间直接远转移:JMP FAR PTR

          执行操作:(IP)OPR的段内偏移地址

段间间接转移:   JMP DWORD PTR OPR

         执行操作:(IP)(EA)

                           (CS)←(EA+2)

分类
指 令
转 移 条 件
说 明
(Ⅰ)
JZ/JE
ZF=1
为零/相等, 则转移
JNZ/JNE
ZF=0
不为零/不相等, 则转移
JS
SF=1
为负, 则转移
JNS
SF=0
为正, 则转移
JO
OF=1
溢出, 则转移
JNO
OF=0
不溢出, 则转移
JP
PF=1
奇偶位为1, 则转移
JNP
PF=0
奇偶位为0, 则转移
JC
CF=1
进位位为1, 则转移
JNC
CF=0
进位位为0, 则转移
(Ⅱ)
JB/JNAE/JC
CF=1
低于/不高于等于, 则转移
JNB/JAE/JNC
CF=0
不低于/高于等于, 则转移
JBE/JNA
(CF ZF)=1
低于等于/不高于, 则转移
JNBE/JA
(CF ZF)=0
不低于等于/高于, 则转移
(Ⅲ)
JL/JNGE
(SF OF)=1
小于/不大于等于, 则转移
JNL/JGE
(SF OF)=0
不小于/大于等于, 则转移
JLE/JNG
((SF OF) ZF)=1
小于等于/不大于, 则转移
JNLE/JG
((SF OF) ZF)=0
不小于等于/大于, 则转移
(Ⅳ)
JCXZ
(CX)=0
CX的内容为0, 则转移

表 3.3  条件设置字节指令

表 3.4 单标志位条件转移指令

表 3.5 无符号数比较条件转移指令

两个例子

       LOOP  label    循环(loop)
  执行操作:① (CX)←(CX)-1

       ② 若(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束


  
LOOPZ/LOOPE label 为零/相等时循环(loop while zero,or equal)
  执行操作:① (CX)←(CX)-1

       ② 若ZF=1且(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束


  
LOOPNZ/LOOPNE label 不为零/不等时循环(loop while nonzero,or not equal)
  执行操作:① (CX)←(CX)-1

       ② 若ZF=0且(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束