CPU的栈机制的一个小问题
October 3, 2013
masm
比如要实现下面这个功能。
我们如果要在10000H处写入自行数据2266H,不能用“mov 内存单元, 寄存器”这类指令。怎么做?
代码:
mov ax, 1000h
mov ss, ax
mov sp, 2
mov ax, 2266h
push ax
这段代码,如果是初学,看起来挺对的,一点也没错。
可是,用debug跟踪一下,发现,这段代码不能得到正确结果,会发现,在push ax这条指令执行之前,debug自动退出了。
反正这个问题,我大一的时候,纠结了好久,到处问,好几天也没搞定,记得当初我还以为是自己电脑系统的问题,还重装了系统……⊙﹏⊙b汗
终于,后来,才明白。这个可能是因为栈溢出的问题?具体因为什么,现在还不太懂。但是知道怎么解决。
只需要把栈的段址设置小一点就可以了。比如比最大的段址小10h。所以,上面的代码可以改成:
mov ax, ff0h
mov ss, ax
mov sp, 102
mov ax, 2266h
push ax
然后用debug跟踪一下,就没有问题了。