|
主题 : : 第四章 实验3 运行中出错 请指点 [待解决] |
回复[ 10次 ]
点击[ 1013次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-04-22 01:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-07-31 18:57 |
源代码:
assume cs:codesg
codesg segment
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
用redasm顺利编译成 1.exe
在逐步调试的时候
运行到 pop ax 的时候
提示:
NTVDM CPU 遇到无效的指令
请问是什么原因? | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-04-22 01:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-07-31 18:57 |
|
|
|
|
|
[第2楼]
[ 回复时间:2009-04-22 11:20 ]
[引用]
[回复]
[ top ] | |
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48 |
add sp,4
-----------
把这个改成add sp,10.
这个涉及到操作系统的保护模式和后面的知识中断。在实dos下调试没有问题。
大概的意思是t命令也叫单步中断,执行中断时系统会保存一下数据,即执行几个push,此时如果sp过小,如sp=0,执行push后sp值发生环绕,即sp=fffeh,此时保护模式出来说你这非法了,所以提示你出错而中断了你debug调试。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2011-04-20 22:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-19 20:33 |
|
|
|
|
|
[第4楼]
[ 回复时间:2011-06-14 21:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-06-23 09:27 |
|
|
|
|
|
[第5楼]
[ 回复时间:2011-06-14 21:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-06-23 09:27 |
哈哈 成功了 果然没有出现错了呵呵!!感谢 MESS | | |
|
|
|
|
[第6楼]
[ 回复时间:2013-04-07 15:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-05-02 17:43 |
回复:[第2楼]
------------------
非常感謝!
在第三章末尾的試驗任務中有涉及到相關知識,看到你的解釋明白了。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2013-05-02 22:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-08-29 16:45 |
|
|
|
|
|
[第8楼]
[ 回复时间:2013-06-12 08:57 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2013-06-12 08:49 |
|
|
|
|
|
[第9楼]
[ 回复时间:2013-09-01 01:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2013-08-01 17:00 |
|
|
|
|
|
[第10楼]
[ 回复时间:2013-12-09 15:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2009-07-15 11:17 |
回复:[第2楼]
------------------
简洁易懂的解释,明白了,多谢。 | | |