鱼C论坛

 找回密码
 立即注册
查看: 1977|回复: 5

retf问题

[复制链接]
发表于 2013-9-11 08:46:37 | 显示全部楼层 |阅读模式
5鱼币
有个程序理解不了(主要是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.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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.

评分

参与人数 1荣誉 +2 鱼币 +8 贡献 +2 收起 理由
福禄娃娃 + 2 + 8 + 2 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-11 09:46:25 | 显示全部楼层
楼上VERY正解!~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-11 13:27:25 | 显示全部楼层
学习力:ton:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-11 22:31:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-3 00:16:47 | 显示全部楼层
学习了...........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 09:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表