call指令用法

来源:互联网 发布:淘宝代购网店 注册 编辑:程序博客网 时间:2024/04/30 13:21

CPU执行call指令时,进行两步操作:

1、将当前的IP或CS和IP压入栈中;

2、转移;

call指令不能实现短转移。与jmp指令实现转移的原理相同。

 

 

1、依据位移进行转移的call指令

     指令形式:call   标号

     进行如下操作:

         (1)、sp=sp-2

         (2)、ss*16+sp=ip

         (3)、IP=IP+16位位移

16位位移由编译程序在编译时算出

相当于进行:

    push IP

    jmp near ptr 标号

2、转移的目的地址在指令中的call指令

    call far ptr 标号  ;实现的是段间转移

执行过程如下:

    (1)、sp=sp-2;

               ss*16+sp=cs;

               sp=sp-2

               ss*16+sp=ip

    (2)、CS=标号所在段的段地址

               IP=标号所在段中的偏移地址

              相当于进行:

              push CS

              push IP

              jmp far ptr 标号

3、转移地址在寄存器中的call指令

      指令格式:call 16位 reg

      功能:sp=sp-2

               ss*16+sp=ip

               ip=16位reg

 

      相当于push IP

               jmp 16位reg

4、转移地址在内存中的call指令

   有两种形式

    (1)、call word ptr 内存单元地址

              相当于进行

                           push IP

                           jmp word ptr 内存地址

               例如:

                      mov sp,10h

                      mov ax,0123h

                      mov ds:[0],ax

                      call word ptr ds:[0]

              执行后 IP=0123h,sp=0;

    (2)、call dword ptr  内存单元地址

               相当于进行:

                     PUSH CS

                     PUSH IP

                     jmp dword ptr 内存单元地址

                比如,下面的指令

                     mov sp,10h

                     mov ax,0123h

                     mov ds:[0],ax

                     mov word ptr ds:[2],0

                     call dword ptr ds:[0]

                执行后:cs=0,ip=0123h,sp=0ch;

0 0