中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-16 11:07
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 16位dos汇编的棘手问题 查看 3,150 回复 22
16 发表于 2007-06-15 21:59 ·  中国 辽宁 沈阳 联通
高级用户
★★
积分 739
发帖 111
注册 2004-11-30 00:00
UID 34209
性别 男
来自 辽宁沈阳
状态 离线
main:
mov sp, 0000h
mov sp, 2000h
mov sp, 5000h
mov sp, 0a000h
mov sp, 0f000h
mov sp, 0fffeh
之后没有返回指令,下一条指令可能非法;
就算有返回指令,由于修改了栈顶指针,也可能返回到一个非法指令处。
这就是原因所在...
来自山东,现居沈阳
17 发表于 2007-06-15 22:21 ·  中国 江西 南昌 电信
中级用户
★★
积分 486
发帖 171
注册 2006-02-12 13:53
UID 50233
状态 离线

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


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

如果不用调试器,仅执行这几条指令不会出现任何问题。
来自山东,现居沈阳
19 发表于 2007-06-15 23:01 ·  中国 江西 南昌 电信
中级用户
★★
积分 486
发帖 171
注册 2006-02-12 13:53
UID 50233
状态 离线
可我用td并没有出错
Those who do not study the past are condemned to repeat it
20 发表于 2007-06-15 23:09 ·  中国 江西 南昌 电信
中级用户
★★
积分 486
发帖 171
注册 2006-02-12 13:53
UID 50233
状态 离线
也许是刚学汇编,很多东西都不懂.
调试器会在程序栈上或两条指令之间插入一些数据或指令,而程序擅自修改了栈指针,可能因此导致调试器的数据遭到破坏,故而DOWN机...

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


不是很明白
Those who do not study the past are condemned to repeat it
21 发表于 2007-07-25 20:01 ·  中国 福建 厦门 电信
高级用户
★★★
积分 741
发帖 366
注册 2007-07-25 19:11
UID 94024
性别 男
状态 离线
  你修改了堆栈偏移量指针到关键部分,当DEBUG时,如果堆栈段地址SS在高位,这很可能导致堆栈指向ROM段,结果当然是死机,当SS在低端,发生堆栈操作时可能会破坏DOS关键数据表的数据,结果当然也是死机。
22 发表于 2007-07-26 13:29 ·  中国 广东 深圳 电信
初级用户
积分 38
发帖 17
注册 2006-01-16 16:53
UID 49072
状态 离线
用官话来说就是: 无效的sp值可能导致不可以预料的后果


并且,程序有头无尾
23 发表于 2007-08-06 16:07 ·  中国 广东 广州 荔湾区 电信
中级用户
★★
积分 282
发帖 126
注册 2006-05-17 22:29
UID 55724
状态 离线
启动EXE时,DOS将返回地址放在sp[0]
现在你修改了sp...
人类存在的目的就是试图理解人类为何存在
论坛跳转: