-8086CPU內部結構
1、總線接口部件BIU(Bus Interface Unit):
-描述:8086CPU與外部(存儲器和I/O端口)的接口,提供16位雙向數據總線和20位地址總線。
-作用:地址形成、取指令、指令排隊、讀/寫操作、總線控制;
-組成:
1)16位段地址寄存器:
CS:代碼段寄存器;
DS:數據段寄存器;
ES:附加段寄存器;
SS:堆棧段寄存器;
2)IP:16位指針寄存器,存放下一條要執行指令的偏移地址;
3)20位物理地址加法器:將16位邏輯地址變換成存儲器讀/寫所需要的20位物理地址;
4)6字節指令隊列:預放6字節的指令代碼;
5)總線控制邏輯:發出總線控制信號;
-工作過程:CS中16位段地址最低位補4個0,加上IP中16位偏移地址,在加法器中形成20位物理地址,送往地址總線,通過總線控制邏輯發出存儲器讀信號_RD,啓動存儲器,按給定地址從存儲器中取出指令,送往指令隊列中等待執行。
2、指令執行部件EU(Execution Unit)
-描述:完成指令譯碼和執行指令工作;
-組成:
1)ALU:算術邏輯運算單元,完成8位或16位的二進制運算;16位暫存器可以暫存參加運算的操作數;
2)PSW:標誌寄存器,存放ALU運算結果特徵;
3)寄存器組:
①通用16位寄存器:
AX、BX、CX、DX;
AX又稱累加器;
②專用16位寄存器:
SI:源變址寄存器;
DI:目的變址寄存器;
SP:堆棧指針寄存器;
BP:基址指針寄存器;
4)EU控制器:取指令控制和時序控制部件;
-工作過程:EU從BIU取得指令,譯碼,若執行指令需要訪問存儲器或I/O端口取操作數,則EU將操作數的偏移地址通過內部16位數據總線送給BIU,與地址段一起,在BIU的地址加法器中形成20位物理地址,申請訪問存儲器或I/O端口,取得操作數送給EU,EU根據指令要求向EU內部各部件發出控制命令,完成執行指令的功能。
-寄存器結構
1、通用寄存器組:
-描述:EU中包含4個16位通用寄存器:AX、BX、CX、DX;
也可以分爲8個8位寄存器使用:AL、BL、CL、DL、AH、BH、CH、DH,只能存放8位數據,不能存放地址。
2、指針和變址寄存器:
1)BP與SP寄存器稱爲指針寄存器,與SS聯用,爲訪問現行堆棧段提供方便。
2)SP寄存器在堆棧操作中使用。
3)SI與DI稱爲變址寄存器,通常與DS一起使用,爲訪問現行數據段提供段內地址偏移量。
3、段寄存器:
CS:代碼段寄存器;
DS:數據段寄存器;
ES:附加段寄存器;
SS:堆棧段寄存器;
由他們給出相應邏輯段的首地址,稱爲段基址,段基址與段內偏移地址組合形成20位物理地址,段內偏移地址可以存放在寄存器中,也可以存放在存儲器中。
4、指令指針寄存器:
IP,用來存放將要執行的下一條指令在現行代碼段中的偏移地址。8086程序不能直接訪問IP。
5、標誌寄存器PSW:
1)CF:Carry Flag,進位標誌位。本次運算中最高位由進位或借位時,CF=1。STC使CF標誌置位,CLC復位,CMC取反。
2)PF:Parity Flag,奇偶校驗標誌位。本次結果運算中低八位有偶數個1時,PF=1;奇數個1時,PF=0。
3)AF:Auxiliary Carry Flag,輔助進位標誌位。本次運算低四位向高四位有進位或借位時,AF=1。
4)ZF:Zero Flag,全零標誌位。本次運算結果全零時(結果爲0),ZF=1。
5)SF:Sign Flag,符號標誌位。本次運算結果最高位爲1時,SF=1。反映了本次運算結果的正負。
6)OF:Overflow Flag,溢出標誌位。本次運算過程中產生溢出時,OF=1。對帶符號數,字節運算結果範圍(-128~+127),字運算結果(-32768~+32767),超過此範圍爲溢出。
①加法運算:計算機判斷低位向最高有效位產生進位,而最高有效位向前無進位,置OF=1;或相反,低位向最高位無進位,而最高位向前卻有進位,置OF=1.
②減法運算:最高位需要借位,而低位並不向最高位借位時,OF置1;或相反,當最高位不需要借位,而低位從最高位有借位時,OF置1。
7)TF:Trap Flag,單步標誌位。調試程序時,可設置單步工作方式,TF=1時,CPU沒執行完一條指令,就自動產生一次內部中斷,使用戶能逐條跟蹤程序進行調試。
8)IF:Interrupt Flag,中斷標誌位。IF=1時,允許CPU響應可屏蔽中斷,當IF=0時,即使外部設備有中斷申請,CPU也不響應。STI使IF置1,CLI使IF置0。
9)DF:Ditection Flag,方向標誌位。控制串操作指令中地址指針變化方向,若在串操作指令中,DF=0,,地址指針自動增量,即由低地址向高地址進行串操作,若DF=1,地址指針自動減量,即由高地址向低地址進行串操作。STD使DF置1,CLD使DF置0。
各標誌位在DeBug中的符號表示:
-存儲器組織
1、存儲器地址分段
描述:在存儲器中以字節爲單位存儲信息,每個存儲單元有唯一的地址確定。8086由20根地址線可尋址1MB字節的存儲空間,即對存儲器尋址需要20位物理地址。而8086爲16位機,CPU內部寄存器只有16位,可尋址64KB。因此8086系統把整個存儲空間分成許多邏輯段,每段容量不超過64KB。
2、物理地址形成
-邏輯地址:存儲器的任一邏輯地址由段基址和偏移地址組成,都是無符號的16位二進制數,程序設計時採用邏輯地址。
-物理地址:存儲器的絕對地址,從00000~FFFFFH,是CPU訪問存儲器的實際尋址地址,它由邏輯地址變換而來。
-段基址:每段的起始地址,必須是每小段的首地址,其低四位一定位0。有四個段寄存器(CS,DS,ES,SS),用於存放段基址。
-計算公式:
物理地址 = 段基址 × 16 + 偏移地址
3、邏輯地址來源
取指令時:自動選擇CS寄存器值作段基址,偏移地址由IP指出;
堆棧操作:自動選擇SS寄存器值作段基址,偏移地址由SP指出;
讀/寫存儲器操作或訪問變量:自動選擇DS或ES寄存器值作段基址(必要時修改爲CS或SS),偏移地址由指令所給定的尋址方式來決定。當BP作爲基地址尋址時,段基址由堆棧寄存器SS提供,偏移地址從BP中取得。
4、存儲器分體結構
8086系統中1MB的存儲空間分成兩個存儲體:偶地址存儲體和奇地址存儲體,各512KB:
存儲器中存放的信息稱爲存儲單元的內容,一個字在存儲器中按相鄰兩個字節存放,存入時以低位字節在低地址、高位字節在高地址的次序存放。
如圖 (00100H) = 1234H
(00103H) = 0152H
8086CPU訪問存儲器時,都是以字爲單位進行的,並從偶地址開始。編程時要從存儲器偶地址開始存放字數據(對準存放)
5、堆棧
-描述:在存儲器中開闢一個區域,用來存放暫時需要保存的數據。堆棧段是由段定義語句在存儲器中定義的一段,容量小於等於64KB。段基址由SS指定,棧頂由SP指定(SP指向的可以是當前棧頂單元,也可以是棧頂上的空單元),堆棧地址增長方式是向上增長,棧底設在存儲器的高地址區,堆棧地址由高向低增長。
-工作方式:
1、堆棧工作方式是先進後出
2、入棧指令PUSH(SP-2->SP,SP指向新棧頂,低位數據壓入SP,高位數據壓入(SP+1));
3、出棧指令POP(當前棧頂SP(低位數據)和SP+1(高位數據)內容彈出,修改指針,SP+2->SP,SP指向新棧頂)。
4、以字爲單位進行操作時,低字節在偶地址,高字節在奇地址。
例:SS=C000H,堆棧段<64KB,SP=1000H