retf问题
有个程序理解不了(主要是retf指令是怎么处理,麻烦说详细点,谢谢),程序如下:assume cs:qq,ds:ee
ee segment
db 16 dup (0)
ee ends
qq segment
mov ax,4c00h
int 21h
start:
mov ax,ee
mov ss,ax
mov sp,16
mov ax,5
push cs
push ax
retf
qq ends
end start
retf就是pop IP/pop CS
代码里的:
mov ax,5
push cs
push ax
retf
就等同于
mov ax,5
push cs
push ax
pop ip
pop cs
即通过retf这句重置了CS-IP的值,即(IP)=(AX)=5;(CS)还是(CS),不变
而(IP)=5使得CPU指向start处的mov ax,ee这句(因为之前的mov ax,4c00h和int 21h分别占2字节,共4字节)
所以,结论是:
你这段代码有问题,无限循环,要使得程序可以返回,应该把ax设为0. 楼上VERY正解!~~~~ 学习力:ton: tsembrace 发表于 2013-9-11 09:24 static/image/common/back.gif
retf就是pop IP/pop CS
代码里的:
mov ax,5
明白了,谢谢:-P 学习了...........
页:
[1]