回复 2楼 zklhp
程序是很基础的
mov ax,1000h
mov ss,ax
mov sp,10h
push ax
push cs
push cs
push cs
push ax
push cs
push cs
pop bx
pop bx
pop bx
这里的push第1.5.9次执行是push ax.
其他都是cs.
图片插不上- -
总之1000:0所在的上下3行。此时初始值均为0
执行的mov ss,ax后:
1000:0 00 00 00 00 00 00 00 10-00 00 08 00 9c 0b 8c 05
执行第一次push ax证明程序可以用把- -
fff: 0
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
fff:10
00 00 00 00 00 00 00 10-00 00 08 00 9c 0b 8c 05
fff:20
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
执行4次push后。1次push ax ,其中有3次push cs 。伤感
不能插图。还好可以复制粘贴啊
fff: 0
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
fff:10
00 00 0c 00 9c 0b 8c 05-9c 0b 9c 0b 9c 0b 00 10
----
fff:20
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
这里的 9c 0b 就是cs的值
再次执行push 到第6次
fff: 0
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
fff:10
9c 0b 8c 05 9c 0b 00 10-9c 0b 9c 0b 9c 0b 00 10
-----
fff:20
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
我很惊讶的就是这里面的数据变化真奇怪。明明栈顶1000:0004 。但是0-1位置上的数据变化让我疑惑了.上一行始终未受影响
在运行一次push
fff: 0
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
fff:10
00 00 8c 05 9c 0b 00 10-9c 0b 9c 0b 9c 0b 00 10
-----
fff:20
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
很奇怪。在运行一次之后0-1就变成00 00 了
而且此时不能再运行我编写的程序了。
下一步变成了 int 3
好吧。我又发现一个奇怪的地方。就是此时 CS自动变成了 0000!!!
这个我想直到为啥只能执行7次push呢?
栈前面的几位数据倒地啥意思呢?
不是说栈会覆盖么,为啥确是向前浮动而不是覆盖,实在是装不下了才会覆盖,而且只会覆盖本行(这个如果说是操作系统的保护机制我理解- -)。而且覆盖了以后也不会被还原,执行POP指令时是前面的数据向后覆盖。