call和ret指令
call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。
它们经常被共同用来实现子程序的设计。
ret和retf
ret指令用栈中的数据,修改IP的内容,从而实现近转移;
retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。
CPU执行ret指令时,进行下面的两步操作:
(1)(IP) = ((ss)*16 +(sp))
(2)(sp) = (sp)+2
CPU执行retf指令时,进行下面四步操作:
(1)(IP) = ((ss)*16) + (sp)
(2)(sp) = (sp) + 2
(3)(CS) = ((ss)*16) + (sp)
(4)(sp) = (sp) + 2
用汇编语法来解释ret和retf指令,则:
CPU执行ret指令时,相当于进行:
pop IP
CPU执行retf指令时,相当于进行:
pop IP
pop CS
call指令:
a、将当前的IP或CS:IP压入栈中
b、转移
包括:
call 标号
call far ptr 标号
call 寄存器
call word ptr 内存单元地址 == push IP / jmp near ptr 内存单元地址
call dword ptr 内存单元地址 == push CS /push IP / jmp far ptr 内存单元地址