只执行了一句, mov ss,ax mov sp,32 为什么小弟我数据段(栈段)的内存会变呢

只执行了一句, mov ss,ax mov sp,32 为什么我数据段(栈段)的内存会变呢
之前为:
-d   0c08:0   1f
0c08:0000   23   01   56   04   89   07   bc   0a   ef   0d   ed   0f   ba   0c   87   09
0c08:0010   00   00   00   00   00   00   00   00   00   00   00   00   00   00   00   00

执行   mov   ss,ax     mov   sp,32之后就变成这样:
-d   0c08:0   1f
0c08:0000   23   01   56   04   89   07   bc   0a   ef   0d   ed   0f   ba   0c   87   09
0c08:0010   00   00   00   00   00   00   08   0c   00   00   27   00   08   0c   d4   05


全部代码如下:
codesg   segment
      assume   cs:codesg

      dw   0123H,0456H,0789H,0abcH,
            0defH,0fedH,0cbaH,0987H
      dw   0,0,0,0,0,0,0,0

start:mov   ax,cs         ;执行前在这儿
            mov   ss,ax
            mov   sp,32
            mov   bx,0         ;执行后在这儿

        mov   cx,8
s:     push   cs:[bx]
        add   bx,2
        loop   s

        mov   bx,0
        mov   cx,8
s0:   pop   cs:[bx]
        add   bx,2
        loop   s0

        mov   ax,4c00H
        int   21H
codesg   ends
end   start

更可恶的是:当执行完S循环,它连我0c08:0到0c08:000f之间的数据都改写了.如果我的程序还要去读那段数据,不是很糟糕.


------解决方案--------------------
下面那行是把CS:IP 分别入栈 可能还把别的现场数据也入栈了 高手讲一讲 我也想知道到底是怎么回事
------解决方案--------------------
你把堆栈设到 CS:0020 了,不就是在 start: 前面那里吗?发生中断时,哪怕是断点中断,也是要用到用户堆栈来保存些基本的内容, 如标记寄存器和返回地址。看那改变了的内容,最后三个 Word 不就是这些吗。
------解决方案--------------------
zara(Kyrie eleison)說的沒錯。
樓主,既然你在看王爽的書,如果這個地方現在實在弄不清楚。到後面的中斷的那一章你就會明白的!!