第三章暫存器(記憶體訪問)
記憶體中字的儲存
在cpu中,用16位來儲存一個字,高8位存放高位元組,低8位存放低位位元組。在記憶體中時,由於記憶體單元是位元組單元,剛一個字要用2個地址連續的記憶體單元來存放,字的低位位元組存在低地址單元。
字單元--存放一個字型資料(16位)的記憶體單元,由兩個地址連續的記憶體單元組成,高地址記憶體單元中存放字型資料的高位元組,低地址記憶體單元存放單元中存放字型資料的低位位元組。
DS和[address]
CPU要讀寫一個記憶體單元的時候,必須先給出這個記憶體單元的地址。
記憶體單元由2部分組成。8086CPU中,記憶體地址由以下組成。
1:段地址
2:偏移地址
8086CPU中,有一個DS暫存器地址,通常用來存放資料的段地址。
比如我們要讀取10000H的單元內容,可以用如下的程式段進行。
mov bx,1000H
mov ds,bx
mov al,[0]
[...] 表示一個記憶體單元。[...]中的0表示記憶體單元的便宜地址。我們知道,只有偏移地址是不能定位一個記憶體單元的。那麼記憶體單元的段地址是多少呢? 執行指令時,8086CPU會自動取DS中的資料為記憶體單元的段地址。
mov、add、sub指令
mov指令有以下幾種形式:
mov 暫存器,資料
mov 暫存器,暫存器
mov 暫存器,記憶體單元
mov 記憶體單元,暫存器
mov 記憶體單元,段暫存器
mov 段暫存器,暫存器
mov 暫存器,段暫存器
資料段
1、字在記憶體中儲存時,要用兩個連續的記憶體單元來存放,字的低位元組放在低地址單元,高位元組放在高地址單元
2、用mov指令訪問記憶體單元,可以在mov指令中只給出單元的偏移地址,此時,段地址預設在DS暫存器中
3、[address]表示一個偏移地址為address的記憶體單元
4、在記憶體和暫存器之間傳送字型資料時,高地址單元和高8位暫存器,低地址單元和低8位暫存器相對應
5、mov、sub、add是具有兩個操作物件的指令,jmp是具有一個操作物件的指令
push、pop指令
push 暫存器 ;將一個暫存器中的資料入棧
pop 暫存器 ;出棧,用一個暫存器接收出棧的資料
push 段暫存器 ;將一個段暫存器中的資料入棧
pop 段暫存器 ;出棧,用一個段暫存器接收出棧的資料
push和pop指令也可以在記憶體單元和記憶體單元之間傳送資料,還可以:
push 記憶體單元 ;將一個記憶體單元處的字入棧(棧的操作都是以字為單位)
pop 記憶體單元 ;出棧,用一個記憶體字單元接收出棧的資料