中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-30 13:33
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,279 会员排行
DOS开发编程 & 发展交流 (开发室) » 16位dos汇编的棘手问题
可打印版本  3,703 / 22
第16楼 taowentao 发表于 2007-06-15 21:59
高级用户 发帖 111 积分 739 来自 辽宁沈阳
main:
mov sp, 0000h
mov sp, 2000h
mov sp, 5000h
mov sp, 0a000h
mov sp, 0f000h
mov sp, 0fffeh
之后没有返回指令,下一条指令可能非法;
就算有返回指令,由于修改了栈顶指针,也可能返回到一个非法指令处。
这就是原因所在...
第17楼 henrya2 发表于 2007-06-15 22:21
中级用户 发帖 171 积分 486

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


我也同意楼上的观点,可是楼主说执行到第二条指令出错,怎么在我的机子上一点事也没有
稍加修改了一下用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 ]
第18楼 taowentao 发表于 2007-06-15 22:50
高级用户 发帖 111 积分 739 来自 辽宁沈阳
调试器会在程序栈上或两条指令之间插入一些数据或指令,而程序擅自修改了栈指针,可能因此导致调试器的数据遭到破坏,故而DOWN机...

如果不用调试器,仅执行这几条指令不会出现任何问题。
第19楼 henrya2 发表于 2007-06-15 23:01
中级用户 发帖 171 积分 486
可我用td并没有出错
第20楼 henrya2 发表于 2007-06-15 23:09
中级用户 发帖 171 积分 486
也许是刚学汇编,很多东西都不懂.
调试器会在程序栈上或两条指令之间插入一些数据或指令,而程序擅自修改了栈指针,可能因此导致调试器的数据遭到破坏,故而DOWN机...

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


不是很明白
第21楼 netwinxp 发表于 2007-07-25 20:01
高级用户 发帖 366 积分 741
  你修改了堆栈偏移量指针到关键部分,当DEBUG时,如果堆栈段地址SS在高位,这很可能导致堆栈指向ROM段,结果当然是死机,当SS在低端,发生堆栈操作时可能会破坏DOS关键数据表的数据,结果当然也是死机。
第22楼 sunx 发表于 2007-07-26 13:29
初级用户 发帖 17 积分 38
用官话来说就是: 无效的sp值可能导致不可以预料的后果


并且,程序有头无尾
第23楼 zyl910 发表于 2007-08-06 16:07
中级用户 发帖 126 积分 282
启动EXE时,DOS将返回地址放在sp[0]
现在你修改了sp...
上一页  1 2
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023