程序如何執行:
CPU先找到程序在內存中的入口地址 -- 地址總線
(8086有20根地址總線,每一根可以某一時傳0或1,
20位的二進制數字可以表示的不同的數字的個數是2^20=1048576
1048576 byte/1024=1024 KB (注:8bit(位)=1Byte(字節) 1024Byte(字節)=1KB 1MB=1024kb=1024x1024b)
1024KB/1024=1 MB
所以尋址范圍為2的20次方byte=1M
)
因此有多少根地址總線(總線寬度)決定了CPU內存尋址的范圍
以上也可以理解為:CPU是多少位的尋址就是2的位的次方,ex:32位CPU尋址范圍就是2的32次方=4G
即使此刻內存容量有8G,CPU也只能夠利用當中的低4G中的內存地址,高4G地址無法尋址到
然后通過一定的途徑將程序輸送給CPU存於CPU的對應的寄存器中,再去執行 -- 數據總線
如果CPU需要控制外圍設備、是加是減、或是讀是寫內存等 -- 控制總線
CPU對數據的+-/*等運算 -- 運算器
總結:CPU的組成=寄存器+運算器+控制器+內部總線(連接各種器件在它們之間傳送數據)
控制器
| |
------------------------------------------- 內部總線
| |
運算器 CPU結構圖
什么是CPU的寄存器:
寄存器分為通用寄存器、段寄存器...
寄存器用於存放CPU要執行的數據或指令
例如:8086CPU的AX通用寄存器結構如下:

物理地址的表示方法:
問題:8086主板地址線20根,所以進行尋址操作一次需要傳送20位的二進制數據
但是CPU最大一次只能夠傳送16位的二進制數據,那如何處理呢?
例子:如何將 兩個3位的數 進化為 一個4位數
ex: 23 --> 234 ×10 + xxxx
↑ ↑ ↑
偏移地址 --> 物理地址
以上的類似實現在CPU中通過地址加法器實現:
實際內存地址=基地址:偏移地址
實際內存地址=基地址×16(×16進位,類似10進制中的×10進位) + 偏移地址
demo:1402:100
1402H (16進制數 4*4=16位的二進制數) × 16 + 0100
即 14020H --基地址×16
+ 0100H --偏移地址
--------------
14120H --實際物理地址
計算機中是不是這么表示的呢?
WIN+R --> cmd,進入Widows環境下的命令行下 輸入debug命令
- C:\Documents and Settings\Administrator>debug
debug工具是DOS/Widows提供的實模式程序調試工具,可以用它檢查內存中任何地方的字節以及修改任何地方的字節。
它可以用於逐指令執行某個程序以驗證程序運行的正確性,
也可以追蹤執行過程、比較一個指令執行前后的值以及比較與移動內存中數據的范圍,讀寫文件與磁盤扇區等
輸入d命令查看寄存器的內容:
- -d
- 0B5D:0100 02 00 EB 0E 50 B0 03 B4-FF E8 9E 00 58 EB 03 E8 ....P.......X...
- 0B5D:0110 1D 01 58 C3 F9 C3 55 51-26 8A 4F 08 34 00 4C 0B ..X...UQ&.O.4.L.
- 0B5D:0120 74 0D 8D 6F 09 E8 19 04-73 08 E8 0E 00 E2 F6 F9 t..o....s.......
- 0B5D:0130 EB 06 2E 89 2E 5D 91 F8-59 5D C3 26 80 7E 00 00 .....]..Y].&.~..
- 0B5D:0140 74 03 45 EB F6 45 C3 2E-80 0E 56 91 10 E8 C6 FF t.E..E....V.....
- 0B5D:0150 72 4A 2E 80 26 56 91 EF-50 2E A1 59 91 2B C6 2E rJ..&V..P..Y.+..
- 0B5D:0160 01 06 57 91 58 2E 8B 36-59 91 2E 80 3C 00 75 26 ..W.X..6Y...<.u&
- 0B5D:0170 2E 80 7C FF 3A 75 09 2E-C7 06 4A 91 09 00 EB 1F ..|.:u....J.....
可以看到物理地址的表示方法都是基地址:偏移地址 ex:0B5D:0100
在CPU中 基地址 存於 段寄存器,偏移地址 存於通用寄存器
