只执行了一句, 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)說的沒錯。
樓主,既然你在看王爽的書,如果這個地方現在實在弄不清楚。到後面的中斷的那一章你就會明白的!!
之前为:
-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)說的沒錯。
樓主,既然你在看王爽的書,如果這個地方現在實在弄不清楚。到後面的中斷的那一章你就會明白的!!