call、ret指令,本质上还是汇编『跳转指令』,它们都用于修改IP,或同时修改CS和IP;这两个指令经常被用来实现子程序的设计
ret指令和retf指令
ret
指令用栈中的数据,修改IP的内容,从而实现近转移 retf
指令用栈的数据,修改CS和IP的内容,从而实现远转移
CPU执行ret
指令时,相当于进行:
pop IP
CPU执行retf
指令时,相当于进行:
pop IP
pop CS
call指令
当执行call
指令时,进行两步操作:
1)将当前的IP或CS和IP压入栈中
2)转移
call
指令不能实现短转移,它的书写格式同jmp
指令
依据标号进行转移的call指令
语法格式:call 标号
汇编解释:(1) push IP (2) jmp near ptr 标号
依据目的地址在指令中的call指令
语法格式:call far ptr 标号
汇编解释:(1) push CS (2) push IP (3) jmp far ptr 标号
转移地址在寄存器中的call指令
语法格式:call 16位reg
汇编解释:(1) push IP (2) jmp 16位reg
转移地址在内存中的call指令
语法格式一:call word ptr 内存单元地址
汇编解释一:(1) push IP (2) jmp word ptr 内存单元地址
语法格式二:call dword ptr 内存单元地址
汇编解释二:(1) push CS (2) push IP (3) jmp dword ptr 内存单元地址