版權聲明:本文為 gfson
原創文章,轉載請注明出處。
注:作者水平有限,文中如有不恰當之處,請予以指正,萬分感謝。
概述
- 典型的 CPU 由運算器、控制器、寄存器等器件構成。
- CPU 內部器件由內部總線相連。
- 內部總線實現 CPU 內部各個器件的聯系,外部總線實現 CPU 和主板上其他器件的聯系。
- 在 CPU 中:
- 運算器進行信息處理。
- 寄存器進行信息存儲。
- 控制器控制各種器件進行工作。
- 內部總線連接各種器件,在它們之間進行數據的傳送。
- 寄存器是 CPU 中程序員可以用指令讀寫的部件。
- 程序員通過改變各種寄存器中的內容來實現對 CPU 的控制。
- 不同的 CPU,寄存器的個數、結構和種類是不同的。
- 8086CPU 中有 14 個寄存器:
- AX、BX、CX、DX
- SI、DI
- SP、BP、IP
- CS、SS、DS、ES
- PSW
2.1 通用寄存器
- 8086CPU 所有寄存器都是 16 位的,可以存放兩個字節。
- AX、BX、CX、DX 這 4 個寄存器用來存放一般數據,稱為通用寄存器。
-
為了兼容上一代 8 位寄存器,這四個寄存器可以分為兩個獨立的 8 位寄存器:
-
AX 分為 AH 和 AL:
2.2 檢測點 2.1
-
答案:
2.3 物理地址
- 所有內存單元構成的存儲空間是一個一維的線性空間,每一個內存單元在這個空間中都有唯一的地址。
- 這個唯一的地址稱為物理地址。
- CPU 通過地址總線送入存儲器的,必須是一個內存單元的物理地址。
- 不同 CPU 可以有不同的形成物理地址的方式。
2.4 16 位結構的 CPU
- 16 位機、字長為 16 位等常見說法,與 16 位結構的含義相同。
- 16 位結構描述了一個 CPU 具有以下結構特性:
- 運算器一次最多可以處理 16 位數據。
- 寄存器最大寬度為 16 位。
- 寄存器和運算器之間的通路為16 位。
- 8086 是 16 位結構的 CPU。
- 在 8086 內部,能夠一次性處理、傳輸、暫時存儲的信息最大長度是 16 位。
- 內存單元的地址在送上地址總線之前,必須在 CPU 中處理、傳輸、暫時存放。
- 對于 16 位 CPU,能一次性處理、傳輸、暫時存儲 16 位的地址。
2.5 8086CPU 形成物理地址的方法
- 8086 有 20 位地址總線,可以傳送 20 位地址,達到 1MB 尋址能力。
- 8086 是 16 位結構,在 CPU 內部能一次性處理、傳輸、暫時存儲的地址為 16 位。
- 8086 內部將兩個 16 位地址合成 20 位的物理地址。
-
8086 相關部件邏輯結構:
-
8086 讀寫內存方式:
- 地址加法器采用「物理地址 = 段地址 x 16 + 偏移地址」的方法合成物理地址。
-
地址加法器工作工程:
- 8086 的這種尋址功能是「基礎地址 + 偏移地址 = 物理地址」尋址模式的一種具體實現方案。
2.6 段的概念
- 內存中沒有分段,段的劃分來自于 CPU。
- 在編程時,可以根據需要,將若干地址連續的內存單元看作一個段,用「段地址 x 16」定位段的起始地址(基礎地址),用偏移地址定位段中的內存單元。
- 「段地址 x 16」必定是 16 的倍數,所以一個段的起始地址一定是 16 的倍數。
- 偏移地址為 16 位,16 位地址的尋址能力為 64KB,所以一個段的長度最大為 64KB。
-
CPU 可以用不同的段地址和偏移地址形成同一個物理地址,如下所示:
2.7 檢測點 2.2
-
答案:
2.8 CS 和 IP
- CS 為代碼段寄存器。
- IP 為指令指針寄存器。
- CS:IP 提供了 CPU 要執行指令的地址。
- CPU 將 CS:IP 指向的內存單元中的內容看作指令,不看作數據。
- 修改 CS、IP 的指令
- mov 指令不能用于設置 CS、IP 的值,因為 8086 沒有提供這樣的功能。
- 「jmp 段地址:偏移地址」用指令中給出的段地址修改 CS,偏移地址修改 IP。
- 「jmp 2AE3:3」執行后,CS = 2AE3H,IP = 0003H,CPU 將從 2AE33 處讀取指令。
- 「jmp 某一合法寄存器」用來僅修改 IP 的內容,用寄存器中的值修改 IP。
- 「jmp ax」,執行前:
ax = 1000H,CS = 2000H,IP = 0003H
,執行后:ax = 1000H,CS = 2000H,IP = 1000H
。
- 「jmp ax」,執行前:
2.9 檢測點 2.3
-
答案:
2.10 實驗 1
- 答案:
(1)略
(2)每次執行 add ax, ax 相當于將 ax 乘 2,重復執行該條指令 8 次即可。
(3)通過 debug 中的-d FFF0:0 FF
命令,可以觀察到生產日期以 MM/DD/YY 的格式存儲在內存的 ffff:00f5-ffff:00fc 共計 8 個字節處。該生產日期不可被修改,因為其只讀。如下所示:
(4)通過向內存中的顯存地址空間寫入數據,控制在屏幕上的不同位置顯示不同顏色的字符。如下所示: