汇编语言之--------------call和ret的使用

call ret指令都是转移指令,他们都修改ip或者同时修改cs ip

1、ret指令用栈中的数据修改ip的内容,从而实现近转移

CPU执行ret指令时,进行下面两步操作

(1)(IP) = ((SS)*16 + (SP))

(2)(sp) = (sp) + 2

2、retf指令用栈中的数据修改CS和IP的内容,从而实现远转移

(1) (ip)= ((ss)*16 + (sp))

(2)  (sp)+2

(3) (cs) = ((ss)*16 + (sp))

(4) (sp) = (sp) + 2

把CS IP段寄存器和偏移放在栈里面

3、call指令经常跟ret指令配合使用,因此cpu执行call指令,进行两步操作

(1)将当前的ip或CS IP压入栈

(2)转移(jmp)

call指令不能实现短转移,除此之外,call指令实现转移的方法和jmp指令的原理相同

汇编语言之--------------call和ret的使用

4、CPU执行call far ptr 这种格式的指令时的操作

汇编语言之--------------call和ret的使用

call比较特殊的就是把当前的位置通过栈给保存了起来,call 和 jmp在跳转的时候是一模一样的

CPU在执行指令 call far ptr标号的时候相当于进行

push CS

push IP

jmp far ptr

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

汇编语言之--------------call和ret的使用

 

 

 

 

<49 --- 2  >