第十章 CALL和RET指令
call和ret也是转移指令,它们都修改IP或同时修改CS和IP。他们经常被共同用来实现子程序设计。
ret指令用栈中数据修改IP,实现近转移。使用方法:ret
retf指令用栈中数据修改CS和IP,实现远转移。使用方法:retf
CPU执行ret时,操作如下:
(IP) = ((ss * 16)+sp)
(sp) = (sp)+2
相当于进行 pop ip
CPU执行retf时,操作如下:
(IP) = ((ss * 16)+sp)
(sp) = (sp)+2
(CS) = ((ss * 16)+sp)
(sp) = (sp)+2
相当于进行 pop ip pop cs
检测点10.1
1000h
0
CPU执行call指令:
(1)将当前的IP或CS和IP压入栈中。
(2)转移。
call指令不能实现短转移,其他与jmp类似。具体分类如下:
call 标号(将当前IP压栈,转到标号处执行指令)(对应的机器指令中没有目的地址,只有相对转移位移)
(sp) = (sp)-2
((ss*16)+sp) = (IP)
(IP) = (IP)+16位位移
16位位移 = 标号处地址- ca