![]() |
中国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 |