栈段 ——满是疑问==

October 3, 2013
masm

遇到一个问题

比如:

用栈操作将10000H~1000FH中的8个字,逆序拷贝到2000H~2000FH中。

写出以下代码:

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

开始我还以为可能是栈空间太小,跟以前一样的问题,特意把栈的短地址缩小到f00h,可是还是结果不对,跟踪之后我发现,

拷贝过去的内容是对的,但是10000H处的内容却被改写了。现在我还是不知道为什么,为什么这个内存地址的内容会被改变呢?

满是疑惑……=_=

……………………………………………………………………==………………………………………………………………………………

刚才又遇到了类似的问题。

貌似明白一点了。只是猜的=_=。虽然不知道为什么,但是表面上懂一点了。

当内存中的某个段当做栈顶的时候,也就是说寄存器ss改变的时候,可能会在附近记录CS,IP,SS的值。还是没有完全明白……越来越混乱了……==

comments powered by Disqus