暫存器(記憶體訪問)

2021-09-26 02:02:22 字數 2988 閱讀 1829

1、記憶體中字的儲存

高位址儲存高位,低位址儲存地位。

任何兩個位址連續的記憶體單元,n號單元和n+1號單元,可以將它們看成兩個記憶體單元,也可以看成乙個位址為n的字單元中的高位位元組單元和地位位元組單元。

2、ds和[adress]

cpu要讀取乙個記憶體單元的時候,必須先給出這個記憶體單元的位址。

在8086pc中,記憶體位址的段位址和偏移位址組成。

在8086cpu中有乙個ds暫存器,通常用來存放要訪問的資料的段位址。[adress]表示乙個偏移位址的address的記憶體單元。

mov指令可完成的傳送功能:

將資料直接送入暫存器中

將乙個暫存器中的內容送入另乙個暫存器中

將乙個記憶體單元中的內容送入乙個暫存器中

例:mov bx,1000h

mov ds,bx

mov al,[0]

上面三條指令將10000h(1000:0)中的資料讀到al中。

8086cpu不支援將資料直接送入段暫存器中,但支援通用暫存器。

記憶體單元(資料)-->通用暫存器-->段暫存器

將資料從段暫存器送入記憶體單元

mov bx,ds

mov [0],bx

段暫存器-->通用暫存器-->記憶體單元(資料)

3、字的傳送(16位資料的傳送)

例:

mov bx,1000h

mov ds,bx

mov ax,[0] ;1000:0處字型資料送入ax中

mov [0],cx ;cx中16位資料送入1000:0處

例:

寫出指令執行後暫存器ax、bx、cx中的值

1 mov ax,1000h

2 mov ds,ax

3 mov ax,[2]

4 mov bx,[2]

5 mov cx,[1]

6 add bx,[1]

7 add cx,[2]

10000h 23

10001h 11

10002h 22

10003h 66

1:ax=1000h

2:ds=ax=1000h

3:ax=11:23=0b17h

4:bx=66:22=4216h

5:cx=22:11=160bh

6:bx=4216h+160bh=5821h

7:cx=160bh+4216h=5821h

4、mov,add,sub(減)指令

mov指令形式:

mov 暫存器,資料

mov ax,10

mov 暫存器,暫存器

mov bx,ax

mov 暫存器,記憶體單元

mov ax,[0]

mov 記憶體單元,暫存器

mov [0],ax

mov 段暫存器,暫存器

mov ds,ax

mov 暫存器,段暫存器

mov ax,ds

add和sub指令通mov一樣。

段暫存器不能運算。

5、資料段

將乙個長度為n(n<=64k)位址連續,起始位址為16的倍數的記憶體單元當做專門儲存資料的記憶體。

例:123b0h~123b9h這段空間來存放資料

長度:10位元組

訪問資料段

mov ax,123bh

mov ds,ax

mov al,0

add al,[0]

add al,[1]

add al,[2]

6、棧

棧是一種具有特殊的訪問方式的儲存空間。

特徵:先進後出

基本操作:入棧和出棧

入棧:將乙個新的元素放入棧頂

出棧:從棧頂取出乙個元素

8086cpu提供入棧出棧的指令:(最基本)

入棧:push 暫存器  (將暫存器資料放入棧中)

出棧:pop 暫存器 (將棧頂取出資料送入暫存器中)

以字為單位進行的(16位)

任何時刻,ss:sp指向棧頂元素。

push ax:1.sp=sp-2;2.將ax資料存入棧中

pop ax:1.將ss:sp指向的記憶體單元的資料送入ax中; 2.sp=sp+2

8、棧頂越界問題

ss和sp只保證入棧和出棧時能找到棧頂。

在程式設計時需要自己注意棧頂越界問題,要根據可能用到的最大棧空間來安排棧的大小,防止入棧的資料太多導致的越界。

9、push、pop指令

push、pop可操作暫存器,記憶體單元、段暫存器。

初始化操作:

mov ax,1000h

mov ss,ax            ;設定棧的段位址

例:將10000h~1000fh這段空間當做棧,初始狀態為空

設定ax=001ah,bx=001bh

將ax、bx中的資料入棧

將ax、bx清空

從棧中恢復ax、bx的內容

mov ax,1000h

mov ss,ax

mov sp,0010h

mov ax,001ah

mov bx,001bh

push ax

push bx

sub ax,ax mov ax,0

sub bx,bx mov bx,0

pop bx

pop ax

注意:出棧順序與入棧順序相反例:

利用棧,交換ax和bx中的資料

push ax

push bx

pop ax

pop bx

10、棧段

將長度為n(n<=64k)的一組位址連續、起始位址為16的倍數的記憶體單元當做棧使用。

若棧段為10000h~1ffffh,則ss=1000h,sp因為溢位sp=0。

mysql 訪問暫存器 暫存器 記憶體訪問

一 ds和 address cpu要讀寫乙個記憶體單元的時候,必須先給出這個記憶體單元的位址,在8086pc中記憶體位址有段位址和偏移位址組成。ds 資料暫存器 中通常存放要訪問資料的段位址。比如要讀取1000h單元的內容,可以用下面這段 mov bx,1000h mov ds,bx mov al,...

暫存器(記憶體訪問)

記憶體中字的儲存 ds和 address mov ax,1000h mov ds,axmov add的更多用法 指令描述 mov 暫存器,偏移位址 將位址為ds 偏移位址中的資料送入暫存器 mov 偏移位址 暫存器 將暫存器中的值送入ds 偏移位址 add 暫存器,偏移位址 將指定位址中的值加入暫存...

暫存器 記憶體訪問

一 ds和 address cpu要讀寫乙個記憶體單元的時候,必須先給出這個記憶體單元的位址,在8086pc中記憶體位址有段位址和偏移位址組成。ds 資料暫存器 中通常存放要訪問資料的段位址。比如要讀取1000h單元的內容,可以用下面這段 mov bx,1000h mov ds,bx mov al,...