当前位置:编程学习 > 汇编语言 >>

汇编语言栈顶出界

汇编里只有确定栈顶位置的寄存器,没有确定栈起始,终了位置的寄存器,cpu不知道栈的具体位置,那怎么会出现确界情况呢
答案:CPU确实不知道栈的具体位置,在它眼里,所有的内存单元都一样。就如同在有30个同学,编号1~30,我们人为地把他们分成3个班,1~10号为1班,11~20为2班,21~30号为3班,如果有个人(CPU)要给他们发书,我们规定他只能发给1班的,但他不知道哪些同学是一班的,他只从1号开始发。因此我们得控制好他,不能让他发给10号之后的其他同学,否则就出界了!
其他:你当ss和sp是什么 ,入栈和出栈的操作,每一步你了解了么 写程序的时候就要注意!
不能人为的越界. 一般我们在使用栈之前都要对它初始化,否则就和代码段重叠了.刚初始化时的栈叫空栈,它的起始位置由SP决定,也就是此时栈顶和栈底是相同的,对于8086CPU系统,栈是由高地址往低地址变化的,也就是空栈时SP指到栈的最高地址,而栈的起始地址一直由SS指定.当我们进行栈操作时,如进栈,则SP减2,如果一直进栈,则最终会低于SS:0,此时就会出界,反之如果我们一直用POP出栈,则SP每次加2,最终也会超出刚开始定义的栈底位置,也会出界.
对于编译器而言,它不会判断是否出界,但如果按上面操作真的出界了,则程序结果可能无法预料.所以我们编程时,要自己估计栈的大小. 

上一个:用汇编语言masm5.0编写下列程序
下一个:怎么用按键精灵来做后台补血补蓝?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,