栈
SS(Stack Segment)
SS是存放这个堆栈段所在的地址的一个段寄存器,表示的是栈顶
注意,不可直接把数据写入SS这个寄存器!只能用其他寄存器(如ax)中转!
;示例:
;正确写法
MOV ax,1000H
MOV ss,ax
;错误写法
MOV ss,1000H
SP(Stack Pointer)
SP是这个栈内游标所在的位置,从栈底下面一个单元开始,随着元素push进来向栈顶方向走
注:栈为空的时候,SP指针指向的是栈底下面的单元,在PUSH指令作用后,SP指针将上移一个单元
通过对SS和SP赋值,可确定栈顶和栈底所在的地址,由此确定一个栈
由此可推理出,给SP赋予的初始值实际上是整个栈的大小,比如要用16个字节,10000H1000FH里面定义一个栈,也就是1000里的 0F,那么SS就要赋值1000H,SP就赋值16字节,也就是0010H
PUSH
PUSH 16 ;将16入栈
PUSH ax ;将ax里的数据入栈
POP
POP ax ;出一个栈顶元素,放进ax里
综合示例
mov ax,0056H ;栈顶在0056H处
mov ss,ax
mov sp, 0080H ;16*8=128字节