8086中的堆栈段和堆栈指针

时间:2015-05-23 23:26:48

标签: assembly stack x86-16 segment

我对堆栈段(ss)和堆栈指针(sp)寄存器有点困惑。 当堆栈为空时,sp值是否等于ss值? 我读到当我们将一个字(2字节)推入堆栈时,sp递减2,如果第一个语句为真(sp = ss),那么我可以说堆栈是否为空,堆栈指针的值总是小于或等于堆栈段的值是这样吗?  如果我们影响sp的值,使它大于ss ??会发生什么?即: mov ss,200h mov sp,400h mov ax,1010h 推斧

请提前纠正任何错误

2 个答案:

答案 0 :(得分:4)

不,ss是与csds等其他人一样的细分受众群。它们按照通常的实模式规则address = 16 * segment + offset参与形成物理地址,其中堆栈的偏移来自sp。因此,在堆栈上推送的最后一项具有地址16 * ss + sp。您不知道堆栈何时为空,除非您对堆栈末尾有先验知识,并且sssp相比的数值没有意义一点都不。

答案 1 :(得分:2)

堆栈段(ss)寄存器和堆栈指针(sp)寄存器用于为堆栈创建地址的不同部分:

u

使用的地址是ss aaaaaaaaaaaaaaaa---- sp ----aaaaaaaaaaaaaaaa 。段寄存器选择整个1024 kB存储空间的64 kB段,堆栈指针是该段内的偏移量。

当堆栈为空时,堆栈指针指向为堆栈分配的空间的顶部。

如果ss寄存器包含例如0200h,则堆栈段从02000h变为11fffh。但是,实际堆栈可能小于堆栈段。如果堆栈是例如16kB,那么sp从4000h开始并在堆栈增长时朝向0000h。

相关问题