首页 > 汇编语言 > 汇编指令 阅读:57,774

控制转移指令

跳转指令分为3大类指令:

一、无条件跳转: JMP;

二、根据 CXECX 寄存器的值跳转: JCXZ(CX  0 则跳转)JECXZ(ECX  0 则跳转);

三、根据 EFLAGS 寄存器的标志位跳转

 

1.无条件转移指令

JMP跳转指令

1) 短转移

格式:JMP SHORT value ;

跳转范围:-128--127

2) 近转移

格式:JMP NEAR PTR value

跳转范围:同一个段内-3276832767

3)段间()转移

格式:JMP FAR PTR value

   2.条件转移

JE   ;等于则跳转

JNE  ;不等于则跳转

JZ   ; 0 则跳转

JNZ  ;不为 0 则跳转

JS   ;为负则跳转

JNS  ;不为负则跳转

JC   ;进位则跳转

JNC  ;不进位则跳转

JO   ;溢出则跳转

JNO  ;不溢出则跳转

JA   ;无符号大于则跳转,A:above, 无符号

JNA  ;无符号不大于则跳转

JAE  ;无符号大于等于则跳转

JNAE ;无符号不大于等于则跳转

JG   ;有符号大于则跳转,Ggreat,有符号

JNG  ;有符号不大于则跳转

JGE  ;有符号大于等于则跳转

JNGE ;有符号不大于等于则跳转

JB   ;无符号小于则跳转,Bbelow,无符号小于

JNB  ;无符号不小于则跳转

JBE  ;无符号小于等于则跳转

JNBE ;无符号不小于等于则跳转

JL   ;有符号小于则跳转,Lless,有符号小于

JNL  ;有符号不小于则跳转

JLE  ;有符号小于等于则跳转

JNLE ;有符号不小于等于则跳转

JP   ;奇偶位置位则跳转

JNP  ;奇偶位清除则跳转

JPE  ;奇偶位相等则跳转

JPO  ;奇偶位不等则跳转

 

LOOP 循环指令

格式: LOOP OPR

测试条件:(CX)!=0

LOOPZ/LOOPE 当为零或相等时循环指令

格式: LOOPZ(LOOPE) OPR

测试条件:(CX)==0ZF==1

LOOPNZ/LOOPNE 当不为零或不相等时循环指令

格式: LOOPNZ(LOOPNE)   OPR

测试条件:(CX)!=0ZF==0

//计算2^n需要n-1条重复的指令add ax, ax

//2^index

unsigned int power_2(unsigned int index)

{

       __asm{

              mov eax,2

              mov edx,index

              sub edx,1

              mov ecx,edx;

              s: 

              add eax,eax

              loop s

       }

}

 

子程序调用指令:

CALL调用指令(段内,段间,涉及到CSIP入栈)

Call eax

 

RET返回指令

RETN/RETF在汇编代码中的形式如下:
  RETN
  RETN   N
  RETF
  RETF   N

其中retn中的n意即nearretf中的f意即far


  RETN等价于一条指令:

    POP   eip
  RETF等价于两条指令:
  POP   eip
  POP   CS
  而带有操作数N的RETN/RETF指令则是在POP之后,执行ESP=ESP+N。比如:

       RETF 8等价于:

        pop eip

        pop cs

        add esp, 8 

       RET 既有可能是retn,也有可能是retf。

 

中断指令:

INT指令

格式: INT   TYPE

比如:

int 3//断点指令

int 21h

   INT

iret

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注