棧
-
棧:是一種具有特殊的訪問方式的存儲(chǔ)空間(后進(jìn)先出, Last In Out Firt,LIFO)
- 8086會(huì)將CS作為代碼段的段地址,將CS:IP指向的指令作為下一條需要取出執(zhí)行的指令
- 8086會(huì)將DS作為數(shù)據(jù)段的段地址,mov ax,[address]就是取出DS:address的內(nèi)存數(shù)據(jù)放到ax寄存器中
- 8086會(huì)將SS作為棧段的段地址,任意時(shí)刻,SS:SP指向棧頂元素
- 8086提供了PUSH(入棧)和POP (出棧)指令來操作棧段的數(shù)據(jù)
比如push ax是將ax的數(shù)據(jù)入棧,pop ax是將棧頂?shù)臄?shù)據(jù)送入ax
push ax
思考
棧頂越界-push
棧頂越界-pop
棧頂越界
push - pop
- 在8086中,push、pop操作的數(shù)據(jù)都是2個(gè)字節(jié)的
練習(xí)
棧段
對(duì)于8086來說,在編程時(shí),可以根據(jù)需要,將一組內(nèi)存單元定義為一個(gè)段
我們可以將一組長度為N(N<=64KB)、地址連續(xù)、起始地址為16倍數(shù)的內(nèi)存單元,當(dāng)做棧空間來使用,稱為棧段。比如用10010H ~ 1001FH這段內(nèi)存空間當(dāng)做棧來使用,我們就可以認(rèn)為10010H ~ 1001FH是一個(gè)棧段,它的段地址為1001H,長度為16字節(jié)
如何使用push、pop等棧操作指令訪問我們定義的棧- 段?
用SS存放棧段的段地址,用SP存放棧頂?shù)钠频刂?/p>