手动修改 sp 后程序出错。
当 CS=SS 的时候,如果修改 SP的值的话下面程序运行会错误,即执行的不是原来的代码。如
code segment
mov sp,10
mov ax,02h
。。。
code ends
mov sp,10后面的都不是原来的语句。
但如果把SP设大一点的话就没事,程序执行原来的语句。
我用U 命令在执行 mov sp,10 的前后看了一下 CS的代码,发现前后不一样,执行前是原代码,执行后就是一些很奇怪码了。
这是为什么?
什么为什么ss和cs一致?你代码放哪里?cs指向的是代码段,你用代码段放堆栈,肯定出错。从新定义
stack segemtn
dw 0,0,0,0,0,0,0,0
stack ends
放前面
后面加
start: mov ax,stack
mov ss,ax
mov sp,16
就ok了 本帖最后由 wAterLoo 于 2012-3-26 20:22 编辑
push操作会将sp前面的一些字节向前推16个字节,好像是这么多,具体你可以实验实验,
由于cs和ss在同一个段,push后,sp设置的太少,cs正要执行的代码被覆盖,所以会出错
http://bbs.fishc.com/thread-15777-1-1.html 的原因是
因为debug的中断机制,需要现场保护,所以栈内至少要有六个字节来保存cs、ip和标志寄存器的数据
页:
[1]