匯編語言(王爽)-棧及棧操作的實(shí)現(xiàn)

棧結(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)行操作)

例子:


push和pop

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)致越界

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容