8086匯編 CPU 結構
8086 CPU 組成
一、結構說明
8086CPU主要由三塊部分組成、通過內部總線實現CPU內各個器件之間的聯系:
- 運算器進行信息處理:處理指令運算使用。
- 寄存器進行信息存儲:存儲地址數據使用。
- 控制器協調各種器件進行工作:發送讀寫執行使用。
二、寄存器
寄存器是CPU內部的信息存儲單元 CPU通過寄存器存放、內存地址、數據、指令,通過總線訪問主板上任意連接的設備。
8086CPU有14個寄存器:
- 通用寄存器:AX、BX、CX、DX
- 變址寄存器:SI、DI
- 指針寄存器:SP、BP
- 指令指針寄存器: IP
- 段寄存器:CS、SS、DS、ES
- 標志寄存器:PSW
通用寄存器說明:
- AX:計算乘法除法專用
- BX:可作為指針寄存器專用、默認指向DS
- CX:默認循環指針、指針轉移專用
- DX:配合AX計算乘法除法專用
8086 CPU 存儲方式
一、CPU 存儲
CPU 存儲主要通過寄存器,在8086CPU中寄存器最多可以存儲16位數據,兩個字節。
CPU寄存器存儲單位:
字:CPU寄存器使用位以字為單位、PC位、如 16位 32位 64位、稱為字、8086CPU的字長(word size)為16bit=2字節。
字節:1字節 = 8bit 、1bit= 二進制1
二、CPU 兼容
上面說到8086CPU寄存器存儲單元最多存儲16位數據存儲,那么上一代最多存儲8位數據、那么如今的16位CPU是如何兼容8位CPU的,下面會有說明。
通用寄存器均可以分為兩個獨立的8位寄存器使用、兩個8位寄存器作為一個16位寄存器使用。
高位低位:
一個字(word)可以存在一個16位寄存器中
- 這個字的高位字節存在這個寄存器的高8位寄存器
- 這個字的低位字節存在這個寄存器的低8位寄存器
通用寄存器
- AX可以分為AH和AL
- BX可以分為BH和BL
- CX可以分為CH和CL
- DX可以分為DH和DL
高低位在內存中存儲:
低位字節存在低地址單元,高位字節存在高地址單元。
例:20000D(4E20H)存放0、1兩個單元,18D(0012H)存放在2、3兩個單元。
注:先讀高位地址1、在讀低位地址0。4E20H。
(1)0地址單元中存放的字節型數據是( 20H )
(2)0地址字單元中存放的字型數據是( 4E20H )
(3)2地址單元中存放的字節型數據是( 12H )
(4)2地址字單元中存放的字型數據是( 0012H )
8086CPU 物理尋址
一、CPU 尋址
- CPU訪問內存單元時要給出內存單元的地址。
- 所有的內存單元構成的存儲空間是一個一維的線性空間。
- 每一個內存單元在這個空間中都有唯一的地址,這個唯一的地址稱為物理地址。
問題說明
上篇博客我們知道了 8086CPU是20位地址總線,可傳送20位地址,尋址能力為1M。但是8086CPU是16位結構的CPU。運算器一次最多可以處理16位的數據,寄存器的最大寬度為16位,在8086內部處理的、傳輸、暫存的地址也是16位,尋址能力也只有64KB,那么8086如何處理在尋址空間缺乏的問題,下面會說明。
解決方法
CPU在訪問內存時,用一個基礎地址(段地址×16)和一個相對於基礎地址的偏移地址相加,給出內存單元的物理地址。
- 用兩個16位地址(段地址、偏移地址)合成一個20位的物理地址。
- 地址加法器合成物理地址的方法
- 物理地址=段地址×16+偏移地址
注:段地址x16就相當於段地址向左偏移4個二進制位
注:相當於16位段地址向左移動4個二進制位、加上偏移地址、值為20位內存地址。
注:通過段地址向左偏移4位后 + 偏移地址 = 物理地址、只要結果成立,可任意調整段地址與偏移地址。
段地址會采用一個寄存器進行存儲16位數據、在通過另一個寄存器存儲偏移地址。
二、CPU 內存分段
8086CPU用“(段地址×16)+偏移地址=物理地址”的方式給出內存單元的物理地址。
實際上內存並沒有分段,段的划分來自於CPU。
可根據、物理地址、段地址、求出偏移地址。
分段方案
- 段地址×16 必然是 16的倍數,所以一個段的起始地址也一定是16的倍數;
- 偏移地址為16位,16 位地址的尋址能力為 64K,所以一個段的長度最大為64K。
- 段地址:分段內存的起始地址到結尾中、取結尾后16個二進制位。
- 可根據、物理地址、段地址、求出偏移地址。