新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 匯編入門(mén)學(xué)習(xí)筆記 (二)—— 寄存器(內(nèi)存訪問(wèn))、棧

匯編入門(mén)學(xué)習(xí)筆記 (二)—— 寄存器(內(nèi)存訪問(wèn))、棧

作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
瘋狂的暑假學(xué)習(xí)之 匯編入門(mén)學(xué)習(xí)筆記 (二)

本文引用地址:http://butianyuan.cn/article/201611/317776.htm

參考:《匯編語(yǔ)言》 王爽 第三章

一、寄存器內(nèi)存訪問(wèn)

1.DS和[address]

DS 數(shù)據(jù)段寄存器,用來(lái)存放數(shù)據(jù)段地址

[address] 用來(lái)表示數(shù)據(jù)段的偏移地址

同樣跟CS一樣,不可以通過(guò) mov ds, 1000 給ds賦值

要通過(guò)通用寄存器ax等。

例如:

mov ax, 1000

mov ds, ax

mov al, [0]

把1000:0的內(nèi)容存進(jìn)al

mov bx, 1000

mov ds, bx

mov [0], al

把a(bǔ)l寫(xiě)進(jìn)1000:0中

因?yàn)閍x、bx、cx是16為的,內(nèi)存單元是8為的,所以 mov ax, [0]會(huì)一次付給ax [1]跟[0]中的內(nèi)容

例如:

如果內(nèi)存情況為

10000H 11

10001H 22

10002H 33

10003H 44

........

--------------------------------

mov ax, 1000

mov ds, ax

mov ax [0]

mov bx [2]

mov cx [1]

這上面運(yùn)行后 ax=2211H 、bx=4433H、cx=3322H

mov ax,1000

mov ds, ax

mov ax, 1234

mov [0], ax

這上面運(yùn)行后內(nèi)存內(nèi)容變?yōu)?/p>

10000H 34

10001H 12

.........

2. CPU

相關(guān)寄存器:

ss: 記錄棧的段地址

sp:記錄棧的段地址的偏移地址

相關(guān)指令:

push 入棧 如 push ax 表示將寄存器ax的內(nèi)容寫(xiě)入棧

pop 出棧 如 pop ax 表示從棧頂取出數(shù)據(jù)送入ax

初始時(shí),sp指向棧低的下一個(gè)單元的地址,每次push,sp減2,pop,sp加2

例如:

將10000H~1000FH這段內(nèi)存當(dāng)做棧來(lái)用

為了10000H~1000FH這段內(nèi)存當(dāng)做棧來(lái)用,要設(shè)置 ss=1000 sp=0010(棧底的下一個(gè)單元的地址)

如果內(nèi)存內(nèi)容如下:

---------------------------

10000H

..........

1000CH

1000DH

1000EH

1000FH

10010H <------- sp

---------------------------

mov ax,0123

push ax

后內(nèi)存內(nèi)容如下:

---------------------------

10000H

..........

1000CH

1000DH

1000EH

1000FH 23 <------- sp

10010H 01

---------------------------

pop bx

后bx=0123H內(nèi)存內(nèi)容如下:

---------------------------

10000H

..........

1000CH

1000DH

1000EH

1000FH

10010H <------- sp

---------------------------

3.CPU 棧頂越界

8086CPU 保證我們對(duì)棧的操作不會(huì)越界。也就說(shuō),8086 CPU 只知道棧頂在何處,不知道棧底和??臻g的大小。



評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉