中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 16位dos汇编的棘手问题 上一主题 | 下一主题
taowentao
高级用户





积分 739
发帖 111
注册 2004-11-30
来自 辽宁沈阳
状态 离线
『第 16 楼』:   使用 LLM 解释/回答一下

main:
mov sp, 0000h
mov sp, 2000h
mov sp, 5000h
mov sp, 0a000h
mov sp, 0f000h
mov sp, 0fffeh
之后没有返回指令,下一条指令可能非法;
就算有返回指令,由于修改了栈顶指针,也可能返回到一个非法指令处。
这就是原因所在...




来自山东,现居沈阳
2007-6-15 21:59
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
henrya2
中级用户





积分 486
发帖 171
注册 2006-2-12
状态 离线
『第 17 楼』:   使用 LLM 解释/回答一下


之后没有返回指令,下一条指令可能非法; 就算有返回指令,由于修改了栈顶指针,也可能返回到一个非法指令处。 这就是原因所在...


我也同意楼上的观点,可是楼主说执行到第二条指令出错,怎么在我的机子上一点事也没有
稍加修改了一下用Tiny模式编译
mcode segment
assume cs:mcode,ds:mcode,ss:mcode

org 100h
start:

main:
mov sp, 0000h
mov sp, 2000h
mov sp, 5000h
mov sp, 0a000h
mov sp, 0f000h
mov sp, 0fffeh

mov ah, 4ch
int 21h

mcode ends
end start

Last edited by henrya2 on 2007-6-15 at 10:24 PM ]




Those who do not study the past are condemned to repeat it
2007-6-15 22:21
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
taowentao
高级用户





积分 739
发帖 111
注册 2004-11-30
来自 辽宁沈阳
状态 离线
『第 18 楼』:   使用 LLM 解释/回答一下

调试器会在程序栈上或两条指令之间插入一些数据或指令,而程序擅自修改了栈指针,可能因此导致调试器的数据遭到破坏,故而DOWN机...

如果不用调试器,仅执行这几条指令不会出现任何问题。




来自山东,现居沈阳
2007-6-15 22:50
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
henrya2
中级用户





积分 486
发帖 171
注册 2006-2-12
状态 离线
『第 19 楼』:   使用 LLM 解释/回答一下

可我用td并没有出错




Those who do not study the past are condemned to repeat it
2007-6-15 23:01
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
henrya2
中级用户





积分 486
发帖 171
注册 2006-2-12
状态 离线
『第 20 楼』:   使用 LLM 解释/回答一下

也许是刚学汇编,很多东西都不懂.
调试器会在程序栈上或两条指令之间插入一些数据或指令,而程序擅自修改了栈指针,可能因此导致调试器的数据遭到破坏,故而DOWN机...

如果不用调试器,仅执行这几条指令不会出现任何问题。


不是很明白




Those who do not study the past are condemned to repeat it
2007-6-15 23:09
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 21 楼』:   使用 LLM 解释/回答一下

  你修改了堆栈偏移量指针到关键部分,当DEBUG时,如果堆栈段地址SS在高位,这很可能导致堆栈指向ROM段,结果当然是死机,当SS在低端,发生堆栈操作时可能会破坏DOS关键数据表的数据,结果当然也是死机。


2007-7-25 20:01
查看资料  发短消息  网志   编辑帖子  回复  引用回复
sunx
初级用户





积分 38
发帖 17
注册 2006-1-16
状态 离线
『第 22 楼』:   使用 LLM 解释/回答一下

用官话来说就是: 无效的sp值可能导致不可以预料的后果


并且,程序有头无尾


2007-7-26 13:29
查看资料  发短消息  网志   编辑帖子  回复  引用回复
zyl910
中级用户





积分 282
发帖 126
注册 2006-5-17
状态 离线
『第 23 楼』:   使用 LLM 解释/回答一下

启动EXE时,DOS将返回地址放在sp[0]
现在你修改了sp...




人类存在的目的就是试图理解人类为何存在
2007-8-6 16:07
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: