. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->程序员灌水区
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  为何 T 不下去了???  [已解决] 回复[ 3次 ]   点击[ 685次 ]  
lbhn
[帖 主]   [ 发表时间:2007-10-16 15:47 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:5
注册日期:2007-10-08 17:57
第三章 实验3  
(1)我只T 了4次就出错了????? 
   其弹出一个对话框: 
    NTVDM CPU 遇到无效的指令。 
CS:0000 IP:0077 OP:f0 37 05 0e 02选择“关闭”终止应用程序。
cat442
[第1楼]   [ 回复时间:2007-10-16 16:16 ]   [引用]   [回复]   [ top ] 
荣誉值:16
信誉值:6
注册日期:2007-06-26 16:56
这是一个普遍问题,不知你遇到过 ,
你把add sp,4 改为add sp,16 就不会有上面情况出现了。

如有兴趣你可以分析研究一下,为什么会出这种问题.

还有关于王爽老师 <汇编语言>的问题你可以到
 王爽《汇编语言》论坛http://www.asmedu.net/bbs/forum.jsp  去提问。
fishboy
[第2楼]   [ 回复时间:2007-10-16 19:47 ]   [引用]   [回复]   [ top ] 
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42
当你T命令中断的时候,会使用当前栈,将部分寄存器的压栈,其中就包含cs,ip,当从中断恢复继续的时候,cs,ip将被pop出来付给cs,ip,以继续程序。但是,t命令压入的数据超过了4个字节,以至于在恢复的时候,cs,ip不能够恢复到之前的数据,变成了栈里面压入的其他数据,所以,以错误的cs,ip再继续运行程序的时候,就出错了。也就是程序和t都在使用当前栈,而你对当前栈的sp进行了设置,导致恢复程序运行的现场时混乱,造成程序的运行出现异常,无法继续运行。不知道分析的对错,楼主可以自己分析一下。楼下的有更有说服力的分析,请赐教。
lbhn
[第3楼]   [ 回复时间:2007-10-21 13:35 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:5
注册日期:2007-10-08 17:57
此贴由 贴主 于 [ 2007-10-21 13:35 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(cat442):2分   2楼(fishboy):2分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved