在cpu中,用16位來儲存乙個字,高8位存放高位元組,低8位存放低位位元組。在記憶體中時,由於記憶體單元是位元組單元,剛乙個字要用2個位址連續的記憶體單元來存放,字的低位位元組存在低位址單元.
字單元--存放乙個字型資料(16位)的記憶體單元,由兩個位址連續的記憶體單元組成,高位址記憶體單元中存放字型資料的高位元組,低位址記憶體單元存放單元中存放字型資料的低位位元組
0位址單元中存放的位元組型資料為20h,0位址單元中存放的字型資料為4e20h,2位址單元中存放的位元組型資料為12h,2位址單元中存放的字型資料為0012h,
8086cpu中有乙個ds暫存器,通常用來存放要訪問資料的段位址。比如我們要讀取10000h單元的內容,可以用如下的程式段進行:
mov bx,1000h[……]表示乙個記憶體單元,0表示記憶體單元的偏移位址mov ds,bx
mov al,[0]
8086cpu是16位結構,可以一次性的傳送16位的資料,即一次性傳送乙個字。例如:
mov bx,1000h問題1記憶體中的情況如下圖,mov ds,bx
mov ax,[0] ;
1000:0處的字型資料送入ax
mov [0],cx ;
cx中的16位資料送到1000:0
寫出下面指令執行後暫存器ax,bx,cx中的值
mov ax,1000hmov ax,1000h 執行後,ax=1000hmov ds,ax
mov ax,[0]
mov bx,[2]
mov cx,[1]
add bx,[1]
add cx,[2]
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,1000hmov ax,1000h 執行後,ax=1000hmov ds,ax
mov ax,11316
mov [0],ax
mov bx,[0]
sub bx,[2]
mov [2],bx
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, 1000hmov 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個位址連續的記憶體單元來存放,字的低位位元組存在低位址單...