棧結(jié)構(gòu):棧是一種只能在一端插入或刪除操作的數(shù)據(jù)結(jié)構(gòu)
棧有兩個(gè)基本操作: 入棧和出棧
??? 入棧: 將一個(gè)新的元素放到棧頂。
??? 出棧: 從棧頂取出一個(gè)元素。
棧頂?shù)脑乜偸亲詈笕霔P枰鰲r(shí),又最先被棧取出。
棧的操作規(guī)則LIFE(Last in first out 后進(jìn)先出)
CPU提供的棧機(jī)制
??? 現(xiàn)今的cpu中都有棧的設(shè)計(jì)
??? 8086cpu提供相關(guān)的指令,支持用棧的方式訪問內(nèi)存空間
??? 基于8086cpu的編程,可以將一段內(nèi)存當(dāng)作棧來使用
PUSH(入棧)和pop(出棧)指令
??? push ax將ax中的數(shù)據(jù)送入棧中
??? pop ax從棧頂取出數(shù)據(jù)送入ax
(以字節(jié)為單位對(duì)棧進(jìn)行操作)
例子:

8086與棧相關(guān)的寄存器
棧段寄存器ss 存放棧頂?shù)亩蔚刂?/p>
棧頂寄存器sp 存放棧頂?shù)钠频刂?任何時(shí)刻)ss:sp組合就是指向棧頂元素
在dedug中加深印象 練習(xí)
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指令的執(zhí)行過程
push ax
(1)sp = sp - 2
(2)將ax中的內(nèi)容送入到ss:sp指向的內(nèi)存單元處,ss:sp此時(shí)指向新棧頂
pop ax
(1)將ss:sp指向的內(nèi)存單元處的數(shù)據(jù)送出ax中
(2)sp = sp+2,ss:sp指向當(dāng)前棧頂下面的單元,以當(dāng)前棧頂下面的單元為新的棧頂
注意觀察sp的數(shù)據(jù)
注意在使用棧的時(shí)候需要注意棧頂超出??臻g,8086cpu知道棧頂在何處(由ss:sp指示)不知道程序安排的??臻g有多大,我們?cè)诰幊痰牡臅r(shí)候要自己超心棧頂越界的問題,要根據(jù)可能用到的最大??臻g,來安排棧的大小,防止入棧的數(shù)據(jù)太多而導(dǎo)致的越界,防止出棧時(shí)??杖稳焕^續(xù)出棧而導(dǎo)致越界