出於對兼容性的考慮,8086CPU能夠一次性處理兩種尺寸的數據:程序員
CPU經過地址總線送入存儲器的必須是一個內存單元的物理地址。 在CPU向地址總線上發出物理地址以前,必須在內部先造成這個物理地址。 不一樣的CPU能夠有不一樣的造成物理地址的方式。編程
16位結構的CPU具備下面幾方面的結構特性:spa
內存單元的地址在送上地址總線以前,必須在CPU中處理、傳輸、暫時存放,對於16位CPU,能一次性處理、傳輸、暫時存儲16位的地址。指針
8086CPU有20位地址線,能夠傳送20位地址,達到1MB的尋址能力。
8086CPU又是16位結構,在內部一次性處理、傳輸、暫時存儲的地址爲16位。
從8086CPU的內部結構來看,若是將地址從內部簡單地發出,那麼它只能送出16位的地址,表現出的尋址能力只有64KB。
事實上,8086CPU採用一種在內部用兩個16位地址合成的方法來造成一個20位的物理地址。code
8086CPU相關部件的邏輯結構如圖所示: 當8086CPU要讀寫內存時:
(1).CPU中的相關部件提供兩個16位地址,一個稱爲段地址,一個稱爲偏移地址
(2).段地址和偏移地址經過內部總線送入一個稱爲地址加法器的部件
(3).地址加法器將兩個16位地址合併成喲個20位物理地址
(4).地址加法器經過內部總線將20位物理地址送入輸入輸出控制電路
(5).輸入輸出控制電路將20位物理地址送上地址總線
(6).20位物理地址被地址總線傳送到存儲器
地址加法器採用物理地址=段地址X16+偏移地址的方法用段地址和偏移地址合成物理地址內存
"段地址"中的「段」的概念,其實來自於CPU。內存並無分段,段的劃分來自於CPU。class
段地址在8086CPU的段寄存器中存放。
8086有4個段寄存器:CS,DS,SS,ES。兼容性
當8086CPUCPU要訪問內存時由這4個段寄存器提供內存單元的段地址。原理
CS和IP是8086CPU中兩個最關鍵的寄存器,他們指示了CPU當前要讀取指令的地址。二進制
在8086PC中,任意時刻,設CS中的內容爲M,IP中的內容爲N,8086CPU將從內存M×16+N單元開始,讀取一條指令並執行。
也能夠描述爲:8086機中,任意時刻,CPU將CS:IP指向的內容看成指令執行。
如圖顯示了8086CPU讀取、執行指令的工做原理:
在CPU中,程序員可以用指令讀寫的部件只有寄存器,程序員能夠經過改變寄存器的內容實現對CPU的控制。 CPU從何處執行指令是由CS、IP中的內容決定的,程序員能夠經過改變CS、IP中的內容來控制CPU執行目標指令。
8086CPU大部分寄存器的值,均可以經過mov指令來改變。mov指令被稱爲傳送指令。
mov指令不能用於設置CS、IP的值,緣由是:8086沒有提供這樣的功能。
可以改變CS、IP的內容的指令被統稱爲轉移指令。
對於8086PC機,在編程時,能夠根據須要,將一組內存單元定義爲一段。能夠將長度爲N(N<=64KB5)的一組代碼,存在一組地址連續、起始地址爲16的倍數的內存單元中。存在這段內存單元中的代碼能夠成爲一個代碼段。
將一段內存看成代碼段,僅僅是咱們在編程時的一種安排,CPU並不會因爲這種安排,就自動的將咱們定義的代碼段中的指令看成指令來執行。
CPU只認被CS:IP指向的內存單元中的內容爲指令。
要讓CPU執行咱們放在代碼段中的指令,必需要將CS:iP指向所定義的代碼段中的第一條指令的首地址。