文章目录
前言
参考书籍:
王爽。汇编语言。北京:清华大学出版社, 2013:190-205
本人菜狗一枚,不敢咬文嚼字,只能站在巨人的肩膀上窥探一下未曾了解的世界。
call 和 ret 指令都是转移指令,它们都修改 IP,或同时修改 CS 和 IP。它们经常被共同用来实现子程序的设计。
ret 和 retf
ret 指令用栈中的数据,修改 IP 的内容,从而实现近转移;
retf 指令用栈中的数据,修改 CS 和 IP 的内容,从而实现远转移。
CPU 执行 ret 指令时,进行下面两步操作:
IP = ((ss)*16+(sp))
(sp) = (sp) + 2
CPU 执行 retf 指令时,进行下面 4 步操作
(IP) = ((ss)*16 + (sp))
(CS) = ((ss) * 16 + (sp))
(sp) = (sp) + 2
可以看出,如果我们用汇编语法来解释 ret 和 retf 指令
CPU 执行 ret 指令时,相当于进行
pop IP
CPU 执行 retf 指令时,相当于进行
pop IP
pop CS
assume cs:code
stack segment
db 16 dup(0)
stack ends
code segment
mov ax, 4c00h
int 21h
start:
mov ax, stack
mov ss, ax
mov sp, 16
mov ax, 0
push ax
mov bx, 0
ret
code ends
end start