中国DOS联盟论坛

中国DOS联盟

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

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

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





积分 14
发帖 6
注册 2005-12-31
状态 离线
『楼 主』:  16位dos汇编的棘手问题

mcode segment
    assume cs:mcode
start:
      
main:
    mov    sp,    0000h
    mov    sp,    2000h
    mov    sp,    5000h
    mov    sp,    0a000h
    mov    sp,    0f000h
    mov    sp,    0fffeh
   
mcode    ends
    end start

这个程序很奇怪,在windows下的dos可以运行,可是在真正的纯dos下却会出错.可是理论上不该出错的

2007-6-13 03:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
20024804
新手上路





积分 14
发帖 6
注册 2005-12-31
状态 离线
『第 2 楼』:  

运行环境特殊,这只是部分测试代码
好像单独放出来不会出错
现在怀疑是调试器td的问题
如有哪位明白dos是如何截获非法指令的或者dos是如何修改内存布局的(dos7.1把高端内存移到低端等)请跟帖

2007-6-13 04:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 3 楼』:  

INT 6是处理非法指令的中断,KILLER.EXE能截获非法指令,但它是直接返回DOS。当然,也可能将处理改成忽略错误、继续执行。如果需要改,发站内短信。



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2007-6-13 08:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 4 楼』:  

INT 6是处理非法指令的中断,KILLER核心中断处理我可以只用2个字节,继续执行的处理只需1个字节。加上驻留预处理,总共只需3、40字节。当然是不带版本、作者信息的纯执行核心版!

[ Last edited by 本是 on 2007-6-13 at 08:30 AM ]



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2007-6-13 08:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
20024804
新手上路





积分 14
发帖 6
注册 2005-12-31
状态 离线
『第 5 楼』:  

mov sp或者之类的修改sp的指令可能触发什么中断吗?
好像不应该触发吧

2007-6-13 13:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
20024804
新手上路





积分 14
发帖 6
注册 2005-12-31
状态 离线
『第 6 楼』:  

不能上传附近
现在极度怀疑是td的bug
因为恰好引起down机的非法指令在两条指令之后
当前的mov sp指令是绝对不会有问题的

2007-6-13 14:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 7 楼』:  

应该说,SP的修改有时会对调试器产生致命“打击”,我以前也碰到过实机正常运行的程序引起调试器或虚拟机shutdown的情况。



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2007-6-13 15:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 8 楼』:  

1楼的代码编译执行在2003的CMD窗口,得到出错信息:
90 BA
FCB unailable
Abort, Fail?

但加一行INT 20H就能正常执行。



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2007-6-13 15:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
20024804
新手上路





积分 14
发帖 6
注册 2005-12-31
状态 离线
『第 9 楼』:  

原来是这样啊
实在是太感谢你了

2007-6-13 20:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
20024804
新手上路





积分 14
发帖 6
注册 2005-12-31
状态 离线
『第 10 楼』:  

抱歉,那只是部分代码片段
如果要这段代码不出错,加个
mov ah,4ch
int 21h
也可以的

2007-6-13 20:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
henrya2
中级用户





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

把完整的源代码贴出来

另外你是用什么模式编译的,最好把Stack段定义贴出



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





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

我在Virtual PC用DOS的DEBUG命令调试好像没有问题.



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





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

稍加修改了一下代码,用Tiny模式(COM文件)编译
我在Virtual PC用td调试没问题????



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





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

没有给出完整的源代码和编译模式和调试环境,我也是刚学汇编语言.实在不明白



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





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

怎么我不管怎么样单步,断点,直接运行,td都没有出错????????????????



Those who do not study the past are condemned to repeat it
2007-6-15 21:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: