中国DOS联盟论坛

中国DOS联盟

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

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

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





积分 739
发帖 111
注册 2004-11-30
来自 辽宁沈阳
状态 离线
『第 16 楼』:  

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 楼』:  



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

我也同意楼上的观点,可是楼主说执行到第二条指令出错,怎么在我的机子上一点事也没有
稍加修改了一下用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 楼』:  

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

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



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





积分 486
发帖 171
注册 2006-2-12
状态 离线
『第 19 楼』:  

可我用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 楼』:  

也许是刚学汇编,很多东西都不懂.

  Quote:
调试器会在程序栈上或两条指令之间插入一些数据或指令,而程序擅自修改了栈指针,可能因此导致调试器的数据遭到破坏,故而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 楼』:  

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

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





积分 38
发帖 17
注册 2006-1-16
状态 离线
『第 22 楼』:  

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


并且,程序有头无尾

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





积分 282
发帖 126
注册 2006-5-17
状态 离线
『第 23 楼』:  

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



人类存在的目的就是试图理解人类为何存在
2007-8-6 16:07
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: