匯編入門學(xué)習(xí)筆記 (二)—— 寄存器(內(nèi)存訪問(wèn))、棧
參考:《匯編語(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寫進(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)容寫入棧
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)論