第三章知識彙總
第三章 暫存器
3.1 記憶體中字的儲存
CPU中,用16位的暫存器來儲存一個字。高8位存放高位位元組,低8位存放低位位元組
字單元:存放一個字型資料(16位)的記憶體單元,由兩個地址連續的記憶體單元組成。高地址記憶體單元中存放字型資料的高位位元組,低地址記憶體單元中存放字型資料的低位位元組。
3.2 DS和[address]
DS暫存器:通常用來存放要訪問資料的段地址
mov al [0] [0]表示記憶體單元的偏移地址,8086CPU將自動使用此時DS的資料作為記憶體單元的段地址
8086CPU不支援直接將資料送入段地址暫存器中,可以先將資料送入bx,再將bx的資料送入ds
3.3 字的傳送
在mov指令中給出16位暫存器就可以進行16位資料的傳輸了。
3.4 mov,add,sub指令
mov 暫存器 , 資料
mov 暫存器 ,暫存器
mov 暫存器 ,記憶體單元 mov ax [0]
mov 記憶體單元 ,暫存器
mov 段暫存器 ,暫存器 P52
add 暫存器 ,資料
add 暫存器 ,暫存器
add 暫存器 ,記憶體單元
add 記憶體單元,暫存器
sub 暫存器,資料
sub 暫存器,暫存器
sub 暫存器,記憶體單元
sub 記憶體單元,暫存器
3.5 資料段
我們可以將一組長度為N(N≤64KB)、地址連續、起始地址為16的倍數的記憶體單元當作專門儲存資料的記憶體空間,從而定義了一個數據段。
3.6 棧
棧是一種具有特殊的訪問方式的儲存空間。它的特殊性就在於,最後進入這個空間的資料,最先出去。
應該有一個標記,指向棧頂的資料。
有兩個基本的操作,入棧和出棧
3.7 CPU提供的棧機制
8086CPU 最基本的兩個指令 PUSH(入棧) POP(出棧)
8086CPU的入棧和出棧操作都是以字為單位進行的
字型資料用兩個單元存放,高地址單元存放高8位,低地址單元存放低8位
如何知道棧頂的位置?
8086CPU中,有兩個暫存器 SS SP。 SS中存放著棧頂的段地址,SP中存放著棧頂的偏移地址。
任意時刻 SS:SP指向棧頂元素
PUSH和POP指令執行的時候,CPU從SS和SP中得到棧頂的地址
3.8 棧頂超界的問題
程式設計者必須要自己注意不要讓棧頂超界,因為8086CPU不知道我們安排的棧空間有多大
3.9 push,pop指令
3.10 棧段
我們可以將長度為N(N<=64KB)的一組地址連續,起始地址為16的倍數的記憶體單元當作棧空間來使用,從而定義了一個棧段。
定義一個棧段只是我們自己的一個行為,CPU並不會因為這個安排自動地將我們定義地棧段當作棧空間來使用
要使push,pop 等指令訪問我們定義的棧段,就是要使SS:SP指向我們定義的棧段