笨蛋侦探 发表于 2012-2-27 21:40:17

手动修改 sp 后程序出错。

当 CS=SS 的时候,如果修改 SP的值的话下面程序运行会错误,即执行的不是原来的代码。

code segment
   mov sp,10
   mov ax,02h
   。。。
code ends

mov sp,10后面的都不是原来的语句。
但如果把SP设大一点的话就没事,程序执行原来的语句。

我用U 命令在执行 mov sp,10   的前后看了一下 CS的代码,发现前后不一样,执行前是原代码,执行后就是一些很奇怪码了。
这是为什么?


n2zee 发表于 2012-2-27 21:40:18

什么为什么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:17:39

本帖最后由 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]
查看完整版本: 手动修改 sp 后程序出错。