标题:“NTVDM CPU遇到无效的”指令错误
只看楼主
chenaiyuxue
Rank: 5Rank: 5
来 自:山东滨州
等 级:职业侠客
帖 子:334
专家分:370
注 册:2008-5-20
结帖率:100%
已结贴  问题点数:20 回复次数:15 
“NTVDM CPU遇到无效的”指令错误
如下一段程序:
assume cs: codesg

codesg segment

start:    mov ax, 2000h
    mov ss, ax
    mov sp, 0
    add sp, 4
    pop ax
    pop bx
    push ax
    push bx
    pop ax
    pop bx

    mov ax, 4c00h
    int 21h

codesg ends

end
在CMD下用DEBUG调试,为什么一单步运行到第一个pop ax就出现如题的错误?
搜索更多相关主题的帖子: 指令 CPU NTVDM 
2009-09-22 20:48
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:4 
---------------------------
16 位 MS-DOS 子系统
---------------------------
Command Prompt - debug dostest.exe
NTVDM CPU 遇到无效的指令。
CS:0000 IP:0077 OP:f0 37 05 10 02 选择“关闭”终止应用程序。
---------------------------
关闭(C)   忽略(I)   
---------------------------

果然是这样~~~
2009-09-22 21:20
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
为什么啊~~~
2009-09-22 21:20
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
2009-09-22 21:21
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
end start

这样对吗?
2009-09-22 21:25
chenaiyuxue
Rank: 5Rank: 5
来 自:山东滨州
等 级:职业侠客
帖 子:334
专家分:370
注 册:2008-5-20
得分:0 
回复 5楼 zklhp
还是不行

你是雪,我是尘埃,相遇是意外;你坠落,在我胸怀,流进我血脉。
2009-09-22 21:35
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:4 
assume cs: codesg
 
codesg segment
 
start:    mov ax, 2000h
    mov ss, ax
    mov sp, 0
    add sp, 4                     //糊涂啊,堆栈增长是向下的。怎莫能用‘+
    pop ax                        //直接'溢出'
    pop bx
    push ax
    push bx
    pop ax
    pop bx
 
    mov ax, 4c00h
    int 21h
 
codesg ends
 
end

所以        add sp, 4  -----> 改为: sub sp,4 或 add sp,-4 就好

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-09-23 08:07
makebest
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:658
专家分:962
注 册:2005-3-17
得分:4 
1  SS怎么可以任意设置值2000H ?
2  SP的确是应该往小减才可以POP
2009-09-23 08:35
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:0 
回复 8楼 makebest
在DOS VM下它当然可以任意设置SS,只是风格不佳罢了。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-09-23 08:47
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
以下是引用东海一鱼在2009-9-23 08:07的发言:

assume cs: codesg
 
codesg segment
 
start:    mov ax, 2000h
    mov ss, ax
    mov sp, 0
    add sp, 4                     //糊涂啊,堆栈增长是向下的。怎莫能用‘+
    pop ax        ...

没想到~~~

偶把数改大了 貌似可以~
2009-09-23 12:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-286483-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.741067 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved