中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-30 11:54
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,279 会员排行
DOS开发编程 & 发展交流 (开发室) » 16位dos汇编的棘手问题
可打印版本  3,699 / 22
第1楼 20024804 发表于 2007-06-13 03:17
新手上路 发帖 6 积分 14
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下却会出错.可是理论上不该出错的
第2楼 20024804 发表于 2007-06-13 04:27
新手上路 发帖 6 积分 14
运行环境特殊,这只是部分测试代码
好像单独放出来不会出错
现在怀疑是调试器td的问题
如有哪位明白dos是如何截获非法指令的或者dos是如何修改内存布局的(dos7.1把高端内存移到低端等)请跟帖
第3楼 本是 发表于 2007-06-13 08:25
银牌会员 发帖 790 积分 2,227
INT 6是处理非法指令的中断,KILLER.EXE能截获非法指令,但它是直接返回DOS。当然,也可能将处理改成忽略错误、继续执行。如果需要改,发站内短信。
第4楼 本是 发表于 2007-06-13 08:26
银牌会员 发帖 790 积分 2,227
INT 6是处理非法指令的中断,KILLER核心中断处理我可以只用2个字节,继续执行的处理只需1个字节。加上驻留预处理,总共只需3、40字节。当然是不带版本、作者信息的纯执行核心版!

[ Last edited by 本是 on 2007-6-13 at 08:30 AM ]
第5楼 20024804 发表于 2007-06-13 13:41
新手上路 发帖 6 积分 14
mov sp或者之类的修改sp的指令可能触发什么中断吗?
好像不应该触发吧
第6楼 20024804 发表于 2007-06-13 14:36
新手上路 发帖 6 积分 14
不能上传附近
现在极度怀疑是td的bug
因为恰好引起down机的非法指令在两条指令之后
当前的mov sp指令是绝对不会有问题的
第7楼 本是 发表于 2007-06-13 15:06
银牌会员 发帖 790 积分 2,227
应该说,SP的修改有时会对调试器产生致命“打击”,我以前也碰到过实机正常运行的程序引起调试器或虚拟机shutdown的情况。
第8楼 本是 发表于 2007-06-13 15:15
银牌会员 发帖 790 积分 2,227
1楼的代码编译执行在2003的CMD窗口,得到出错信息:
90 BA
FCB unailable
Abort, Fail?

但加一行INT 20H就能正常执行。
第9楼 20024804 发表于 2007-06-13 20:00
新手上路 发帖 6 积分 14
原来是这样啊
实在是太感谢你了
第10楼 20024804 发表于 2007-06-13 20:01
新手上路 发帖 6 积分 14
抱歉,那只是部分代码片段
如果要这段代码不出错,加个
mov ah,4ch
int 21h
也可以的
第11楼 henrya2 发表于 2007-06-15 21:19
中级用户 发帖 171 积分 486
把完整的源代码贴出来

另外你是用什么模式编译的,最好把Stack段定义贴出
第12楼 henrya2 发表于 2007-06-15 21:26
中级用户 发帖 171 积分 486
我在Virtual PC用DOS的DEBUG命令调试好像没有问题.
第13楼 henrya2 发表于 2007-06-15 21:35
中级用户 发帖 171 积分 486
稍加修改了一下代码,用Tiny模式(COM文件)编译
我在Virtual PC用td调试没问题????
第14楼 henrya2 发表于 2007-06-15 21:36
中级用户 发帖 171 积分 486
没有给出完整的源代码和编译模式和调试环境,我也是刚学汇编语言.实在不明白
第15楼 henrya2 发表于 2007-06-15 21:41
中级用户 发帖 171 积分 486
怎么我不管怎么样单步,断点,直接运行,td都没有出错????????????????
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023