堆栈段指针(
寄存器SS)是用于确定堆栈在内存中的起始位置的寄存器;堆栈段寄存器的作用和其他段寄存器(CS,DS,ES)相同,都是为了在一整段的内存中划分区域:由于内存为一整段储存单元,CS(代码段寄存器)中存放代码段的起始位置,DS(数据段寄存器)中存放数据段的起始位置,SS(堆栈段寄存器)中存放堆栈段的起始位置,ES(附加段寄存器)中存放附加段的起始位置。
在操作系统架构的内存中,堆栈位于程序所使用内存的顶端,向内存低地址处扩展,DS寄存器中存放的是堆栈最低的地址。堆栈本身为内存的一部分,但是相对普通内存段(DS)的区别在于:普通内存段(DS)一般用于存放长久数据,无特殊存储顺序;堆栈内存段(SS)一般用于存放暂时数据(例如调用函数是的参数),可以使用PUSH,POP指令向栈顶压入,弹出数据。
另外,若SP(栈顶寄存器)中的值小于DS寄存器(PUSH指令执行过多次)将会引发错误:系统显示某某程序Stack Overflow(因为SS段往下的内存地址属于数据段的区域)。若SP中的值大于一定程度(由程序的堆栈段大小决定)(POP指令执行过多),也将会引发错误:系统显示某某程序Access Violation Reading Address(因为程序内存的顶端上有着其他数据)。
需要注意的是,在较新的操作系统下汇编其平台下的程序时,程序员将无法修改段寄存器中的值(修改会报错),它们由操作系统自身管理(可以理解为由操作系统编写者的代码管理),其原因是出于安全起见。