栈结构:栈是一种只能在一端插入或删除操作的数据结构
栈有两个基本操作: 入栈和出栈
入栈: 将一个新的元素放到栈顶。
出栈: 从栈顶取出一个元素。
栈顶的元素总是最后入栈需要出栈时,又最先被栈取出。
栈的操作规则LIFE(Last in first out 后进先出)
CPU提供的栈机制
现今的cpu中都有栈的设计
8086cpu提供相关的指令,支持用栈的方式访问内存空间
基于8086cpu的编程,可以将一段内存当作栈来使用
PUSH(入栈)和pop(出栈)指令
push ax将ax中的数据送入栈中
pop ax从栈顶取出数据送入ax
(以字节为单位对栈进行操作)
例子:
8086与栈相关的寄存器
栈段寄存器ss 存放栈顶的段地址
栈顶寄存器sp 存放栈顶的偏移地址(任何时刻)ss:sp组合就是指向栈顶元素
在dedug中加深印象 练习
mov ax,1000H
mov ss,ax
mov sp,0010H
mov ax,001AH
mov bx,001bBH
push ax
push bx
pop ax
pop bx
push和pop指令的执行过程
push ax
(1)sp = sp - 2
(2)将ax中的内容送入到ss:sp指向的内存单元处,ss:sp此时指向新栈顶
pop ax
(1)将ss:sp指向的内存单元处的数据送出ax中
(2)sp = sp+2,ss:sp指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶
注意观察sp的数据
注意在使用栈的时候需要注意栈顶超出栈空间,8086cpu知道栈顶在何处(由ss:sp指示)不知道程序安排的栈空间有多大,我们在编程的的时候要自己超心栈顶越界的问题,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的越界,防止出栈时栈空任然继续出栈而导致越界