. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  匪夷所思的现象 原书第三章p67 检测点3.2 第二小题  [待解决] 回复[ 3次 ]   点击[ 419次 ]  
hino
[帖 主]   [ 发表时间:2008-08-09 15:18 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:3
注册日期:2008-06-22 20:23
要求:把10000H-1000FH里的8个字,逆序copy到20000H-2000FH。

我是这么做的。

先进debug

然后 d 1000:0 0 1 2 3 4 5 6 7 8 9 a b c e d f 

然后 d 2000:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

然后就 a 2500:0

mov ax,2000
mov ds,ax
mov ax,1000
mov ss,ax
mov sp,0
pop [e]
pop [c]
pop [a]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]

最后我r了一下,看看cs和ip是不是指着2500:0,然后就t了几下。

到最后:我d 2000:0 f ,确实是 e f c d a b 8 9 6 7 4 5 2 3 0 1,好象没有问题。

================================================

问题是,我 d 1000:0 f,发觉原来的值变掉了。变成了一些乱七八糟的东西了。

我觉得pop的话,只是拿堆栈里的值去覆盖DS:IP而已。原来SS:SP指向的堆栈里的值不应该变掉啊。真是奇怪。有高人能解释这个现象吗?我实在不能理解。
tomato
[第1楼]   [ 回复时间:2008-08-09 15:24 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
这个问题是,在debug下边执行单步中断的时候,因为要保护现场,所以要用到栈,对栈进行了入栈出栈操作,导致栈中的数据被改变。如果现在楼主还是不太明白,随着学习的继续,楼主就会明白了!
hino
[第2楼]   [ 回复时间:2008-08-09 15:30 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:3
注册日期:2008-06-22 20:23
OK,谢谢回答。那我先不管了,就算我这一章先pass了,呵呵。 :)
hou0912
[第3楼]   [ 回复时间:2009-04-02 12:48 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-03-08 00:10
应该是e不是d

然后 e 1000:0 0 1 2 3 4 5 6 7 8 9 a b c e d f 

然后 e 2000:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved