. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于程序6.4的一些疑问  [已解决] 回复[ 3次 ]   点击[ 360次 ]  
hzk123
[帖 主]   [ 发表时间:2010-03-27 12:14 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-03-26 18:29
在我的机子进行debug时:
1.当栈空间至少定义11个字单元时,都可以跟踪运行,且能得到正确的结果;
2.当栈空间定义10个字单元时,出现了两种情况:
   1)跳出“NTVDM CPU遇到无效的指令”
   2)在指令“loop s;mov bx,0”运行之后出现“int 3”
 但如果用"G CS:IP"命令直接运行到“int 21”指令所在的地址时,却能得到正常的结果。
3.当栈空间定义9个字单元时,运行到“loop s;mov bx,0”出现了“program terminated normally”;但是能得到正常的结果

在我同学的机子进行debug时:
当栈空间定义10个字单元时,运行到“pop [bx];add bx,2”时出现了“program terminated normally”;但是能得到正常的结果

而在我的机子上,定义8个字单元时,运行到“pop [bx];add bx,2”时也出现了“program terminated normally”;但是能得到正常的结果


恳请高手解析下出现这些问题的原因,谢谢!!!
abob
[第1楼]   [ 回复时间:2010-03-31 14:45 ]   [引用]   [回复]   [ top ] 
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
这个涉及到后面讲的中断了,这里先设置sp比较大的值就行了(也就是定义多些字单元,如定义11个字单元时)

t命令也叫单步中断,中断会向当前的栈压入些数据,如果保护模式下认为有问题的话将会报出错误,如“NTVDM CPU遇到无效的指令”
hzk123
[第2楼]   [ 回复时间:2010-04-01 17:59 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-03-26 18:29
谢谢abob !!!
hzk123
[第3楼]   [ 回复时间:2010-04-01 18:04 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-03-26 18:29
此贴由 贴主 于 [ 2010-04-01 18:04 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved