Ous*_*oum 5 assembly stack segment x86-16
我对 stack segment (ss) 和 stack pointer (sp) registers 有点困惑。当堆栈为空时,sp 值是否等于 ss 值?我读到当我们将一个字(2 字节)推入堆栈时,sp 减 2,如果第一条语句为真(sp=ss),那么我可以说如果堆栈不为空,堆栈指针的值总是较小或等于堆栈段的值是真的吗??。如果我们影响 sp 的值使其大于 ss 会发生什么?即:mov ss,200h mov sp,400h mov ax,1010h push ax
请纠正任何错误,提前thanx
不,ss是一个段寄存器,就像其他的一样,比如csor ds。它们按照通常的实模式规则 as 参与形成物理地址address = 16 * segment + offset,其中堆栈的偏移量来自sp。因此,压入堆栈的最后一项具有 address 16 * ss + sp。你不知道什么时候堆栈是空的,除非你有一个先验的堆栈年底的知识,和的数值ss相比,sp具有完全没有意义。