栈
来源:互联网 发布:java ant 编辑:程序博客网 时间:2024/04/28 07:42
栈是一种具有特殊的访问方式的存储空间,它的特殊在于后进先出
SS:SP指向的存储单元为栈空间(栈的操作都为字操作)SS:SP始终指向栈顶
当栈为空是SP指针指向栈顶元素为栈中最后一个字单元地址+2
也可以说当栈为空时SP指向栈中最后一个存储单元的下一个单元
stack segment
dw 8 dup(0);我们定义一个段使SS:SP指向这个段此时为栈段
stack ends
定义了16个字节的栈空间,内存单元为0~15,最后一个字单元为14栈顶指向14+2=10H
最后一个字节单元为15下一个单元为16=10H
所以假设一个16字节的栈为空那么SP=10H
;***********************************************************************************
stack segment
db 16 dup(?);申请一个栈空间,大小为16字节单元
stack ends
code segment
mov ax,stack
mov ss,ax;设栈段为1000H 表1
mov ax,1234H
mov sp,10H;SP指向栈顶
push ax;执行入栈指令,执行完之后SP指向新的栈顶 表2
code ends
SS:SP=1000:0 初始栈中数据(假设栈为空,栈大小10000H~1000FH)表1 内存地址备注NULL10000H NULL10001H NULL10002H NULL10003H NULL10004H NULL10005H NULL10006H NULL10007H NULL10008H NULL10009H NULL1000AH NULL1000BH NULL1000CH NULL1000DH NULL1000EH NULL1000FH 10010H<--当栈为空时SS:SP指向这里
push ax (SP=SP-2,AX入栈) -表2 内存地址备注NULL10000H NULL10001H NULL10002H NULL10003H NULL10004H NULL10005H NULL10006H NULL10007H NULL10008H NULL10009H NULL1000AH NULL1000BH NULL1000CH NULL1000DH 34H1000EH<--SS:SP=1000:E指向新的栈顶12H1000FH 10010H