绝世公子 发表于 2013-9-11 08:46:37

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


tsembrace 发表于 2013-9-11 08:46:38

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.

liangfei44 发表于 2013-9-11 09:46:25

楼上VERY正解!~~~~

006 发表于 2013-9-11 13:27:25

学习力:ton:

绝世公子 发表于 2013-9-11 22:31:20

tsembrace 发表于 2013-9-11 09:24 static/image/common/back.gif
retf就是pop IP/pop CS
代码里的:
mov ax,5


明白了,谢谢:-P

trek600 发表于 2013-10-3 00:16:47

学习了...........
页: [1]
查看完整版本: retf问题