小結 第三章
記憶體中字的儲存
記憶體以位元組為單位,劃分為若干個單元。
計算機內資料存-取單位:
① 位元組 (8bit)
② 字 (16bit)
③ 雙字 (32bit)
④ 四字 (64bit) 字資料的存-取原則:高-高 低-低
即:
① 字資料的低位位元組存放在低地址記憶體單元;
字資料的高位位元組存放在高地址記憶體單元;
② 取低地址記憶體單元地址作為字資料地址。
資料在記憶體和CPU之間的傳送
要在CPU和記憶體單元之間傳送資料,就必須知道記憶體單元的地址。
DS: 資料段段暫存器,用於存放資料段的「段地址」。
說明:
(1)將一段記憶體用作資料段,是程式設計時的一種安排;
(2) 在mov, add, sub等彙編指令中,訪問記憶體單元時,預設情況下,指的是資料段。
彙編指令mov, add, sub
兩個運算元長度要一致
例:
mov ax, cl × mov ax, cx √
mov al, 300 × mov ax, 300 √
關於常數(也叫立即數)
不能作為第1個運算元(目的運算元)
作第2個運算元(源運算元)時,如果最高位是十六進位制的a~f或A~F,前面要加零!
例:
mov 4000H, ax × mov ax, 4000H √
mov ax, A400H × mov ax, 0A400H √
注: 運算元是記憶體單元時,指令中只給出「偏移地址」。
預設,「段地址」在ds中。
注: 運算元是記憶體單元時,指令中只給出「偏移地址」。
預設,「段地址」在ds中。
「棧」是一個邏輯上的概念。可以將一段記憶體空間當作「棧」來使用。
棧的特性: 後進先出
兩個概念: 棧底、棧頂
兩個操作: 入棧、出棧
一個約定: 8086中棧以字為存取單位
棧底: 固定的一端,棧區最高地址單元的前一個單元 入棧: 把資料存入棧
出棧: 從棧取出資料 SS: 棧段段暫存器,用於存放棧段的「段地址」
SP: 棧指標暫存器,用於存放棧頂的偏移地址。 SS:SP對應的實體地址是棧頂的實體地址 (SS) × 16 + (SP) → 棧頂的實體地址 操作指令: push和pop
在push 記憶體單元和pop 記憶體單元中,指令中只需給出「偏移地址」。預設,段地址在DS中。
對8086CPU而言,push和pop的操作:
入棧和出棧均以字為單元
操作物件不能是常數
pop 段暫存器中,段暫存器不能是CS和SS
小結
(1) 「段」是一個邏輯上的概念。
程式設計時,可根據需要指定一段記憶體區用作資料段、程式碼段或是棧段。
(2) 用作資料段時,要把段地址→DS
用作棧段時,要把段地址→SS,棧頂偏移地址 → SP
用作程式碼段時,段地址→CS,要取的指令偏移地址→IP。但CS和IP的值不能使用mov改變。
(3) 一段記憶體可以同時用作程式碼段、資料段、棧段。
由程式設計時靈活確定。
(4) 在8086CPU中,每個段的最大長度不能超過64KB。
(因為暫存器是16位的,能表示的地址範圍只能是0000H~FFFFH,即0~216-1)