. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  检测点3.2的第三个疑惑  [待解决] 回复[ 2次 ]   点击[ 494次 ]  
327451977
[帖 主]   [ 发表时间:2008-12-13 18:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-14 12:24
2) 
1825:0100 mov ax,2000 
1825:0103 mov ds,ax 
1825:0105 mov ax,1000 
1825:0108 mov sp,0010 
1825:010B mov ss,ax 
1825:010D pop [e] 
1825:0111 pop [c] 
1825:0115 pop [a] 
1825:0119 pop [8] 
1825:011D pop [6] 
1825:0121 pop [4] 
1825:0125 pop [2] 
1825:0129 pop [0] 
1825:012D 
-r 
AX=0000   SP=FFEE  DS=1825   SS=1825  CS=1825  IP=0100   
1825:0100 B80020        MOV     AX,2000 
-t 
AX=2000    SP=FFEE  DS=1825   SS=1825  CS=1825  IP=0103    
1825:0103 8ED8          MOV     DS,AX 
-t 
AX=2000   SP=FFEE  DS=2000   SS=1825  CS=1825  IP=0105    
1825:0105 B80010        MOV     AX,1000 
-t 
AX=1000    SP=FFEE   DS=2000  SS=1825  CS=1825  IP=0108    
1825:0108 BC1000        MOV     SP,0010 
-t 
AX=1000    SP=0010  DS=2000   SS=1825  CS=1825  IP=010B   
1825:010B 8ED0          MOV     SS,AX 
-t 
AX=1000   SP=0012  DS=2000   SS=1000  CS=1825  IP=0111    
1825:0111 8F060C00      POP     [000C]                             DS:000C=0000 
     想到了(1)中的情况,于是故意把指令顺序改了改顺序,把mov ss,ax放到mov sp的后面,结果执行之后居然又直接跳过了!直接到了pop [c]!!难道对ss的操作都会导致其后的那条指令被吞掉吗?那么被吞掉的那条指令是真跳过了?还是在暗中被执行了呢? 
带着疑问,自己实验了一下: 
首先查看数据段中的原始内容,如下: 
-d 2000:0 10 
2000:0000  11 22 33 44 55 66 77 88-99 11 22 33 44 55 66 88 
2000:0010  00 
然后把cs:ip指向mov ss,ax: 
-r 
AX=1000    SP=0012  DS=2000   SS=1000  CS=1825  IP=010B    
1825:010B 8ED0          MOV     SS,AX 
再查看目标堆栈段1000:0的内容:都是零,看做是空的 
-d 1000:0 10 
1000:0000  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 
1000:0010  00 
执行上述指令: 
-t 
SP=0014  BP=0000  SI=0000  DI=0000 
DS=2000   SS=1000  CS=1825  IP=0111    
1825:0111 8F060C00      POP     [000C]                             DS:000C=5544 
如果那条pop [e]被暗中执行了的话,那么2000:000e和000f中的内容都应该会变成00 00,再次查看验证上述猜想: 
-d 2000:0 10 
2000:0000  11 22 33 44 55 66 77 88-99 11 22 33 44 55 00 00    
2000:0010  00     
果然!看来那条指令确实是被暗中执行了 

不知道自己这样的实验是否科学,所得结论对其他情况有没有一般性,请达人指点!!                                            .
deepblue
[第1楼]   [ 回复时间:2008-12-13 21:50 ]   [引用]   [回复]   [ top ] 
荣誉值:56
信誉值:0
注册日期:2008-01-19 14:51
是有这种情况的  不仅是pop 其他指令也有
changkong
[第2楼]   [ 回复时间:2008-12-29 23:07 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:2
注册日期:2007-12-28 19:04
你分析的没有错 因为用T指令进行调试时,会产生中断,而为了保护现场,cpu则先将标志寄存器进栈,再把当前的cs的值进栈,最后将ip的值进栈.
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved