汇编语言之--------------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指令的原理相同
4、CPU执行call far ptr 这种格式的指令时的操作
call比较特殊的就是把当前的位置通过栈给保存了起来,call 和 jmp在跳转的时候是一模一样的
CPU在执行指令 call far ptr标号的时候相当于进行
push CS
push IP
jmp far ptr
5、转移地址在寄存器中的call指令
<49 --- 2 >