| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2782 人关注过本帖
标题:“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
快速回复:“NTVDM CPU遇到无效的”指令错误
数据加载中...
 
   



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

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