call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计。
10.1ret和retf
CPU执行ret时,相当于进行:pop IP
CPU执行retf指令时,相当于进行 :
pop IP
pop CS
10.2 call指令
CPU执行call指令时,进行两步操作:
1.将当前的IP或CS和IP压入栈中
2.转移
call指令不能实现短转移,除此之外,call指令实现转移的方法和jmp指令的原理相同。
10.3 依据位移进行转移的call指令
call 标号(将当前的IP压栈后,转到标号处执行指令)
CPU执行"call标号“时,相当于进行:
push IP
jmp near ptr 标号
10.4 转移的目的地址在指令中的call指令
call far ptr 标号实现的时段间转移
CPU执行"call far ptr 标号”时,相当于进行:
push CS
push IP
jmp far ptr 标号
10.5 转移地址在寄存器中的call指令
指令格式:call 16位 reg
CPU相当于进行:
push IP
jmp (16位 reg)
10.6 转移地址在内存中的call指令
转移地址在内存中的call指令有两种格式。
1.call word ptr 内存单元地址
CPU相当于进行:
push IP
jmp word ptr 内存单元地址
2. call dword ptr 内存单元地址
CPU相当于进行:
push CS
push IP
jmp dword ptr 内存单元地址
10.7 call和ret的配和使用
10.8 mul指令
乘法指令。(见书)