組合語言 暫存器(記憶體訪問)

2021-09-23 21:29:25 字數 3691 閱讀 8042

在cpu中,用16位來儲存乙個字,高8位存放高位元組,低8位存放低位位元組。在記憶體中時,由於記憶體單元是位元組單元,剛乙個字要用2個位址連續的記憶體單元來存放,字的低位位元組存在低位址單元. 

字單元--存放乙個字型資料(16位)的記憶體單元,由兩個位址連續的記憶體單元組成,高位址記憶體單元中存放字型資料的高位元組,低位址記憶體單元存放單元中存放字型資料的低位位元組

0位址單元中存放的位元組型資料為20h,0位址單元中存放的字型資料為4e20h,2位址單元中存放的位元組型資料為12h,2位址單元中存放的字型資料為0012h,

8086cpu中有乙個ds暫存器,通常用來存放要訪問資料的段位址。比如我們要讀取10000h單元的內容,可以用如下的程式段進行:

mov bx,1000h

mov ds,bx

mov al,[0]

[……]表示乙個記憶體單元,0表示記憶體單元的偏移位址

8086cpu是16位結構,可以一次性的傳送16位的資料,即一次性傳送乙個字。例如:

mov bx,1000h

mov ds,bx

mov ax,[0] ;

1000:0處的字型資料送入ax

mov [0],cx ;

cx中的16位資料送到1000:0

問題1記憶體中的情況如下圖,

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

mov ax,1000h

mov ds,ax

mov ax,[0]

mov bx,[2]

mov cx,[1]

add bx,[1]

add cx,[2]

mov ax,1000h 執行後,ax=1000h

mov ds,ax 執行後,ds=1000h

mov ax,[0] 執行後,ax=1123h

mov bx,[2] 執行後,bx=6622h

mov cx,[1] 執行後,cx=2211h

add bx,[1] 執行後,bx=bx+[1]=6622h+2211h=8833h

add cx,[2] 執行後,cx=6622h+2211h=8833h

問題2

記憶體中的情況如下圖,

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

mov ax,1000h

mov ds,ax

mov ax,11316

mov [0],ax

mov bx,[0]

sub bx,[2]

mov [2],bx

mov ax,1000h 執行後,ax=1000h

mov ds,ax 執行後,ds=1000h

mov ax,11316 執行後,ax=2c34h

mov [0],ax 執行後,1000:1儲存2c,1000:0儲存34

mov bx,[0] 執行後,bx=2c34

sub bx,[2] 執行後,bx=2c34-1122=1b12

mov [2],bx 執行後,1000:2儲存1b12

指令執行結果如下:

mov指令有以下幾種形式:

mov 暫存器,資料

mov 暫存器,暫存器

mov 暫存器,記憶體單元

mov 記憶體單元,暫存器

mov 記憶體單元,段暫存器

mov 段暫存器,暫存器

mov 暫存器,段暫存器

下面通過debug來驗證一下"mov 暫存器,段暫存器"指令:

驗證"mov 記憶體單元,段暫存器"指令:

add和sub指令同mov一樣,都有兩個操作物件,也可以有下面幾種形式:

add 暫存器,資料

add 暫存器,暫存器

add 暫存器,記憶體單元

add 記憶體單元,暫存器

sub 暫存器,資料

sub 暫存器,暫存器

sub 暫存器,記憶體單元

sub 記憶體單元,暫存器

1、字在記憶體中儲存時,要用兩個連續的記憶體單元來存放,字的低位元組放在低位址單元,高位元組放在高位址單元

2、用mov指令訪問記憶體單元,可以在mov指令中只給出單元的偏移位址,此時,段位址預設在ds暫存器中

3、[address]表示乙個偏移位址為address的記憶體單元

4、在記憶體和暫存器之間傳送字型資料時,高位址單元和高8位暫存器,低位址單元和低8位暫存器相對應

5、mov、sub、add是具有兩個操作物件的指令,jmp是具有乙個操作物件的指令

在8086cpu程式設計的時候,可以將一段記憶體當做棧來使用,8086cpu提供2種棧的操作:push和pop,都是以字為單位進行操作

首先看一段**:

mov ax, 0123h

push ax

mov bx, 2266h

push bx

mov cx, 1122h

push cx

pop ax

pop bx

pop cx

執行過程如下圖:

8086cpu不保證我們對棧的操作不會超界,我們在程式設計的時候要自己操心棧頂超界的問題

push和pop指令是可以在暫存器和記憶體之間傳送資料的,push和pop指令可以是如下的形式:

push 暫存器 ;

將乙個暫存器中的資料入棧

pop 暫存器 ;

出棧,用乙個暫存器接收出棧的資料

push 段暫存器 ;

將乙個段暫存器中的資料入棧

pop 段暫存器 ;

出棧,用乙個段暫存器接收出棧的資料

;push和pop指令也可以在記憶體單元和記憶體單元之間傳送資料,還可以:

push 記憶體單元 ;

將乙個記憶體單元處的字入棧(棧的操作都是以字為單位)

pop 記憶體單元 ;

出棧,用乙個記憶體字單元接收出棧的資料

比如下面的**:

mov ax, 1000h

mov ds, ax ;

記憶體單元的段位址要放在ds中

push [0] ;

將1000:0處的字入棧中

pop [2] ;

出棧,出棧的資料送入1000:2處

組合語言 暫存器 記憶體訪問

記憶體中字的儲存 cpu中,用16位暫存器來儲存乙個字,乙個字要用兩個連續的記憶體單元來存放,這個字的低位位元組存放到低位址單元中,高位位元組存放在高位址單元中。假如用0 1兩個記憶體單元存放乙個字,這兩個單元看作乙個起始位址為0的字單元。ds和 address 8086cpu中有乙個ds暫存器,通...

組合語言 暫存器(記憶體訪問)

暫存器 記憶體訪問 字的儲存,乙個字占用兩個位元組,在記憶體單元中儲存要用兩個位址連續的記憶體單元來存放 低位位元組放在低位址單元中,字單元,即兩個位址連續的記憶體單元 ds和 address ds暫存器通常用來存放要訪問資料的段位址 mov al,0 mov al,ds 0 資料訪問的段位址預設d...

組合語言 暫存器(記憶體訪問)

本文主要從cpu如何執行指令的角度講解了8086cpu的邏輯結構 形成實體地址的方法 相關的暫存器以及一些指令 在cpu中,用16位來儲存乙個字,高8位存放高位元組,低8位存放低位位元組。在記憶體中時,由於記憶體單元是位元組單元,剛乙個字要用2個位址連續的記憶體單元來存放,字的低位位元組存在低位址單...