8086CPU有哪些寄存器_各有什么用途 - 全文
8086概述
8086微處理器是Intel公司推出的第三代CPU芯片,它們的內(nèi)部結(jié)構(gòu)基本相同,都采用16位結(jié)構(gòu)進(jìn)行操作及存儲(chǔ)器尋址,但外部性能有所差異,兩種處理器都封裝在相同的40腳雙列直插組件(DIP)中。
8086CPU的編程結(jié)構(gòu)
編程結(jié)構(gòu):是指從程序員和使用者的角度看到的結(jié)構(gòu),亦可稱為功能結(jié)構(gòu)。如圖2-1所示是8086CPU的內(nèi)部功能結(jié)構(gòu)。
從功能上來(lái)看,8086CPU可分為兩部分,即總線接口部件BIU(BusInterfaceUnit)和執(zhí)行部件EU(ExecutionUnit)。
(1)執(zhí)行部件(EU)
功能:負(fù)責(zé)指令的執(zhí)行。
組成:包括①ALU(算術(shù)邏輯單元)、②通用寄存器組和③標(biāo)志寄存器等,主要進(jìn)行8位及16位的各種運(yùn)算。
?。?)總線接口部件(BIU)
功能:負(fù)責(zé)與存儲(chǔ)器及I/O接口之間的數(shù)據(jù)傳送操作。具體來(lái)看,完成取指令送指令隊(duì)列,配合執(zhí)行部件的動(dòng)作,從內(nèi)存單元或I/O端口取操作數(shù),或者將操作結(jié)果送內(nèi)存單元或者I/O端口。
組成:它由①段寄存器(DS、CS、ES、SS)、②16位指令指針寄存器IP(指向下一條要取出的指令代碼)、③20位地址加法器(用來(lái)產(chǎn)生20位地址)和④6字節(jié)(8088為4字節(jié))指令隊(duì)列緩沖器組成。
(3)8086BIU的特點(diǎn)
?、?086的指令隊(duì)列分別為6/4個(gè)字節(jié),在執(zhí)行指令的同時(shí),可從內(nèi)存中取出后續(xù)的指令代碼,放在指令隊(duì)列中,可以提高CPU的工作效率。
②地址加法器用來(lái)產(chǎn)生20位物理地址。8086可用20位地址尋址1M字節(jié)的內(nèi)存空間,而CPU內(nèi)部的寄存器都是16位,因此需要由一個(gè)附加的機(jī)構(gòu)來(lái)計(jì)算出20位的物理地址,這個(gè)機(jī)構(gòu)就是20位的地址加法器。
例如:CS=0FE00H,IP=0400H,則表示要取指令代碼的物理地址為0FE400H。
?。?)BIU與EU的動(dòng)作協(xié)調(diào)原則
總線接口部件(BIU)和執(zhí)行部件(EU)按以下流水線技術(shù)原則協(xié)調(diào)工作,共同完成所要求的信息處理任務(wù):
?、倜慨?dāng)8086的指令隊(duì)列中有兩個(gè)空字節(jié),或BIU就會(huì)自動(dòng)把指令取到指令隊(duì)列中。其取指的順序是按指令在程序中出現(xiàn)的前后順序。
?、诿慨?dāng)EU準(zhǔn)備執(zhí)行一條指令時(shí),它會(huì)從BIU部件的指令隊(duì)列前部取出指令的代碼,然后用幾個(gè)時(shí)鐘周期去執(zhí)行指令。在執(zhí)行指令的過(guò)程中,如果必須訪問(wèn)存儲(chǔ)器或者I/O端口,那么EU就會(huì)請(qǐng)求BIU,進(jìn)入總線周期,完成訪問(wèn)內(nèi)存或者I/O端口的操作;如果此時(shí)BIU正好處于空閑狀態(tài),會(huì)立即響應(yīng)EU的總線請(qǐng)求。如BIU正將某個(gè)指令字節(jié)取到指令隊(duì)列中,則BIU將首先完成這個(gè)取指令的總線周期,然后再去響應(yīng)EU發(fā)出的訪問(wèn)總線的請(qǐng)求。
③當(dāng)指令隊(duì)列已滿,且EU又沒(méi)有總線訪問(wèn)請(qǐng)求時(shí),BIU便進(jìn)入空閑狀態(tài)。④在執(zhí)行轉(zhuǎn)移指令、調(diào)用指令和返回指令時(shí),由于待執(zhí)行指令的順序發(fā)生了變化,則指令隊(duì)列中已經(jīng)裝入的字節(jié)被自動(dòng)消除,BIU會(huì)接著往指令隊(duì)列裝入轉(zhuǎn)向的另一程序段中的指令代碼。
從上述BIU與EU的動(dòng)作管理原則中,不難看出,它們兩者的工作是不同步的,正是這種既相互獨(dú)立又相互配合的關(guān)系,使得8086可以在執(zhí)行指令的同時(shí),進(jìn)行取指令代碼的操作,也就是說(shuō)BIU與EU是一種并行工作方式,改變了以往計(jì)算機(jī)取指令→譯碼→執(zhí)行指令的串行工作方式,大大提高了工作效率,這正是8086獲得成功的原因之一。
?。?)8086CPU內(nèi)部寄存器
8086內(nèi)部的寄存器可以分為通用寄存器和專用寄存器兩大類,專用寄存器包括指針寄存器、變址寄存器等。
①通用寄存器
8086有4個(gè)16位的通用寄存器(AX、BX、CX、DX),可以存放16位的操作數(shù),也可分為8個(gè)8位的寄存器(AL、AH;BL、BH;CL、CH;DL、DH)來(lái)使用。其中AX稱為累加器,BX稱為基址寄存器,CX稱為計(jì)數(shù)寄存器,DX稱為數(shù)據(jù)寄存器,這些寄存器在具體使用上有一定的差別,如表2-1所示。
?、谥羔樇拇嫫?/p>
系統(tǒng)中有兩個(gè)16位的指針寄存器SP和BP,其中SP是堆棧指針寄存器,由它和堆棧段寄存器SS一起來(lái)確定堆棧在內(nèi)存中的位臵;BP是基數(shù)指針寄存器,通常用于存放基地址。
?、圩冎芳拇嫫?/p>
系統(tǒng)中有兩個(gè)16位的變址寄存器SI和DI,其中SI是源變址寄存器,DI是目的變址寄存器,都用于指令的變址尋址方式。
?、芸刂萍拇嫫?/p>
IP、標(biāo)志寄存器是系統(tǒng)中的兩個(gè)16位控制寄存器,其中IP是指令指針寄存器,用來(lái)控制CPU的指令執(zhí)行順序,它和代碼段寄存器CS一起可以確定當(dāng)前所要取的指令的內(nèi)存地址。順序執(zhí)行程序時(shí),CPU每取一個(gè)指令字節(jié),IP自動(dòng)加1,指向下一個(gè)要讀取的字節(jié);當(dāng)IP單獨(dú)改變時(shí),會(huì)發(fā)生段內(nèi)的程序轉(zhuǎn)移;當(dāng)CS和IP同時(shí)改變時(shí),會(huì)產(chǎn)生段間的程序轉(zhuǎn)移。
標(biāo)志寄存器的內(nèi)容被稱為處理器狀態(tài)字PSW,用來(lái)存放8086CPU在工作過(guò)程中的狀態(tài)。
?、荻渭拇嫫?/p>
系統(tǒng)中共有4個(gè)16位段寄存器,即代碼段寄存器CS、數(shù)據(jù)段寄存器DS、堆棧段寄存器SS和附加段寄存器ES。這些段寄存器的內(nèi)容與有效的地址偏移量一起,可確定內(nèi)存的物理地址。通常CS劃定并控制程序區(qū),DS和ES控制數(shù)據(jù)區(qū),SS控制堆棧區(qū)。
?。?)處理器狀態(tài)字PSW
8086內(nèi)部標(biāo)志寄存器的內(nèi)容,又稱為處理器狀態(tài)字PSW。其中共有9個(gè)標(biāo)志位,可分成兩類:一類為狀態(tài)標(biāo)志,一類為控制標(biāo)志。其中狀態(tài)標(biāo)志表示前一步操作(如加、減等)執(zhí)行以后,ALU所處的狀態(tài),后續(xù)操作可以根據(jù)這些狀態(tài)標(biāo)志進(jìn)行判斷,實(shí)現(xiàn)轉(zhuǎn)移;控制標(biāo)志則可以通過(guò)指令人為設(shè)臵,用以對(duì)某一種特定的功能起控制作用(如中斷屏蔽等),反映了人們對(duì)微機(jī)系統(tǒng)工作方式的可控制性。
PSW中各標(biāo)志位的安排如圖2-2所示,這些標(biāo)志位的含義如下:①狀態(tài)標(biāo)志:6個(gè)
CF—進(jìn)位標(biāo)志位,做加法時(shí)最高位出現(xiàn)進(jìn)位或做減法時(shí)最高位出現(xiàn)借位,該位臵1,反之為0。
PF—奇偶標(biāo)志位,當(dāng)運(yùn)算結(jié)果的低8位中l(wèi)的個(gè)數(shù)為偶數(shù)時(shí),則該位臵1,反之為0。?AF—半進(jìn)位標(biāo)志位,做字節(jié)加法時(shí),當(dāng)?shù)退奈挥邢蚋咚奈坏倪M(jìn)位,或在做減法時(shí),低
四位有向高四位的借位時(shí),該標(biāo)志位就臵1。通常用于對(duì)BCD算術(shù)運(yùn)算結(jié)果的調(diào)整。(例:11011000+10101110=110000110其中AF=1,CF=1)
ZF—零標(biāo)志位,運(yùn)算結(jié)果為0時(shí),該標(biāo)志位臵1,否則清0。
SF—符號(hào)標(biāo)志位,當(dāng)運(yùn)算結(jié)果的最高位為1,該標(biāo)志位臵1,否則清0。即與運(yùn)算結(jié)果的最高位相同。
OF—溢出標(biāo)志位,OF溢出的判斷方法如下:
加法運(yùn)算:
若兩個(gè)加數(shù)的最高位為0,而和的最高位為1,則產(chǎn)生上溢出;若兩個(gè)加數(shù)的最高位為1,而和的最高位為0,則產(chǎn)生下溢出;兩個(gè)加數(shù)的最高位不相同時(shí),不可能產(chǎn)生溢出。
減法運(yùn)算:
若被減數(shù)的最高位為0,減數(shù)的最高位為1,而差的最高位為1,則產(chǎn)生上溢出;若被減數(shù)的最高位為1,減數(shù)的最高位為0,而差的最高位為0,則產(chǎn)生下溢出;被減數(shù)及減數(shù)的最高位相同時(shí),不可能產(chǎn)生溢出。
如果所進(jìn)行的運(yùn)算是帶符號(hào)數(shù)的運(yùn)算,則溢出標(biāo)志恰好能夠反映運(yùn)算結(jié)果是否超出了8位或16位帶符號(hào)數(shù)所能表達(dá)的范圍,即字節(jié)運(yùn)算大于十127或小于-128時(shí),字運(yùn)算大于十32767或小于-32768時(shí),該位臵1,反之為0。
8086CPU的兩種工作模式
為了適應(yīng)各種使用場(chǎng)合,在設(shè)計(jì)8086CPU芯片時(shí),就考慮了其應(yīng)能夠使它工作在兩種模式下,即最小模式與最大模式。
所謂最小模式,就是系統(tǒng)中只有一個(gè)8086微處理器,在這種情況下,所有的總線控制信號(hào),都是直接由8086CPU產(chǎn)生的,系統(tǒng)中的總線控制邏輯電路被減到最少,該模式適用于規(guī)模較小的微機(jī)應(yīng)用系統(tǒng)。
最大模式是相對(duì)于最小模式而言的,最大模式用在中、大規(guī)模的微機(jī)應(yīng)用系統(tǒng)中,在最大模式下,系統(tǒng)中至少包含兩個(gè)微處理器,其中一個(gè)為主處理器,即8086/8086CPU,其它的微處理器稱之為協(xié)處理器,它們是協(xié)助主處理器工作的。
與8086CPU配合工作的協(xié)處理器有兩類,一類是數(shù)值協(xié)處理器8087另一類是輸入/輸出協(xié)處理器8089。
8087是一種專用于數(shù)值運(yùn)算的協(xié)處理器,它能實(shí)現(xiàn)多種類型的數(shù)值運(yùn)算,如高精度的整型和浮點(diǎn)型數(shù)值運(yùn)算,超越函數(shù)(三角函數(shù)、對(duì)數(shù)函數(shù))的計(jì)算等,這些運(yùn)算若用軟件的方法來(lái)實(shí)現(xiàn),將耗費(fèi)大量的機(jī)器時(shí)間。換句話說(shuō),引入了8087協(xié)處理器,就是把軟件功能硬件化,可以大大提高主處理器的運(yùn)行速度。
8089協(xié)處理器,在原理上有點(diǎn)象帶有兩個(gè)DMA通道的處理器,它有一套專門(mén)用于輸入/輸出操作的指令系統(tǒng),但是8089又和DMA控制器不同,它可以直接為輸入/輸出設(shè)備服務(wù),使主處理器不再承擔(dān)這類工作。所以,在系統(tǒng)中增加8089協(xié)處理器之后,會(huì)明顯提高主處理器的效率,尤其是在輸入/輸出操作比較頻繁的系統(tǒng)中。
8086CPU寄存器種類及用途
8086有14個(gè)16位寄存器,這14個(gè)寄存器按其用途可分為通用寄存器、指令指針、標(biāo)志寄存器和段寄存器等4類。
1)通用寄存器
通用寄存器有8個(gè),又可以分成2組,一組是數(shù)據(jù)寄存器(4個(gè)),另一組是指針寄存器及變址寄存器(4個(gè))。
數(shù)據(jù)寄存器分為:
AH&AL=AX(accumulator):累加寄存器,常用于運(yùn)算;在乘除等指令中指定用來(lái)存放操作數(shù),另外,所有的I/O指令都使用這一寄存器與外界設(shè)備傳送數(shù)據(jù)。
BH&BL=BX(base):基址寄存器,常用于地址索引;
CH&CL=CX(count):計(jì)數(shù)寄存器,常用于計(jì)數(shù);常用于保存計(jì)算值,如在移位指令,循環(huán)(loop)和串處理指令中用作隱含的計(jì)數(shù)器。
DH&DL=DX(data):數(shù)據(jù)寄存器,常用于數(shù)據(jù)傳遞。
他們的特點(diǎn)是,這4個(gè)16位的寄存器可以分為高8位:AH,BH,CH,DH.以及低八位:AL,BL,CL,DL。這2組8位寄存器可以分別尋址,并單獨(dú)使用。另一組是指針寄存器和變址寄存器,包括:
SP(StackPointer):堆棧指針,與SS配合使用,可指向目前的堆棧位置;
BP(BasePointer):基址指針寄存器,可用作SS的一個(gè)相對(duì)基址位置;
SI(SourceIndex):源變址寄存器可用來(lái)存放相對(duì)于DS段之源變址指針;
DI(DestinationIndex):目的變址寄存器,可用來(lái)存放相對(duì)于ES段之目的變址指針。
這4個(gè)16位寄存器只能按16位進(jìn)行存取操作,主要用來(lái)形成操作數(shù)的地址,用于堆棧操作和變址運(yùn)算中計(jì)算操作數(shù)的有效地址。
2) 指令指針I(yè)P(Instruction Pointer)
指令指針I(yè)P是一個(gè)16位專用寄存器,它指向當(dāng)前需要取出的指令字節(jié),當(dāng)BIU從內(nèi)存中取出一個(gè)指令字節(jié)后,IP就自動(dòng)加1,指向下一個(gè)指令字節(jié)。注意,IP指向的是指令地址的段內(nèi)地址偏移量,又稱偏移地址(Offset Address)或有效地址(EA,Effective Address)。
3)標(biāo)志寄存器FR(Flag Register)
8086有一個(gè)18位的標(biāo)志寄存器FR,在FR中有意義的有9位,其中6位是狀態(tài)位,3位是控制位。
OF: 溢出標(biāo)志位OF用于反映有符號(hào)數(shù)加減運(yùn)算所得結(jié)果是否溢出。如果運(yùn)算結(jié)果超過(guò)當(dāng)前運(yùn)算位數(shù)所能表示的范圍,則稱為溢出,OF的值被置為1,否則,OF的值被清為0。
DF:方向標(biāo)志DF位用來(lái)決定在串操作指令執(zhí)行時(shí)有關(guān)指針寄存器發(fā)生調(diào)整的方向。
IF:中斷允許標(biāo)志IF位用來(lái)決定CPU是否響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請(qǐng)求。但不管該標(biāo)志為何值,CPU都必須響應(yīng)CPU外部的不可屏蔽中斷所發(fā)出的中斷請(qǐng)求,以及CPU內(nèi)部產(chǎn)生的中斷請(qǐng)求。具體規(guī)定如下:
(1)、當(dāng)IF=1時(shí),CPU可以響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請(qǐng)求;
?。?)、當(dāng)IF=0時(shí),CPU不響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請(qǐng)求。
TF:跟蹤標(biāo)志TF。該標(biāo)志可用于程序調(diào)試。TF標(biāo)志沒(méi)有專門(mén)的指令來(lái)設(shè)置或清楚。
?。?)如果TF=1,則CPU處于單步執(zhí)行指令的工作方式,此時(shí)每執(zhí)行完一條指令,就顯示CPU內(nèi)各個(gè)寄存器的當(dāng)前值及CPU將要執(zhí)行的下一條指令。
?。?)如果TF=0,則處于連續(xù)工作模式。
SF:符號(hào)標(biāo)志SF用來(lái)反映運(yùn)算結(jié)果的符號(hào)位,它與運(yùn)算結(jié)果的最高位相同。在微機(jī)系統(tǒng)中,有符號(hào)數(shù)采用補(bǔ)碼表示法,所以,SF也就反映運(yùn)算結(jié)果的正負(fù)號(hào)。運(yùn)算結(jié)果為正數(shù)時(shí),SF的值為0,否則其值為1。
ZF: 零標(biāo)志ZF用來(lái)反映運(yùn)算結(jié)果是否為0。如果運(yùn)算結(jié)果為0,則其值為1,否則其值為0。在判斷運(yùn)算結(jié)果是否為0時(shí),可使用此標(biāo)志位。
AF:下列情況下,輔助進(jìn)位標(biāo)志AF的值被置為1,否則其值為0:
?。?)、在字操作時(shí),發(fā)生低字節(jié)向高字節(jié)進(jìn)位或借位時(shí);
(2)、在字節(jié)操作時(shí),發(fā)生低4位向高4位進(jìn)位或借位時(shí)。
PF:奇偶標(biāo)志PF用于反映運(yùn)算結(jié)果中“1”的個(gè)數(shù)的奇偶性。如果“1”的個(gè)數(shù)為偶數(shù),則PF的值為1,否則其值為0。
CF:進(jìn)位標(biāo)志CF主要用來(lái)反映運(yùn)算是否產(chǎn)生進(jìn)位或借位。如果運(yùn)算結(jié)果的最高位產(chǎn)生了一個(gè)進(jìn)位或借位,那么,其值為1,否則其值為0。)
4)段寄存器(Segment Register)
為了運(yùn)用所有的內(nèi)存空間,8086設(shè)定了四個(gè)段寄存器,專門(mén)用來(lái)保存段地址:
CS(Code Segment):代碼段寄存器;
DS(Data Segment):數(shù)據(jù)段寄存器;
SS(Stack Segment):堆棧段寄存器;
ES(Extra Segment):附加段寄存器。
當(dāng)一個(gè)程序要執(zhí)行時(shí),就要決定程序代碼、數(shù)據(jù)和堆棧各要用到內(nèi)存的哪些位置,通過(guò)設(shè)定段寄存器 CS,DS,SS 來(lái)指向這些起始位置。通常是將DS固定,而根據(jù)需要修改CS。所以,程序可以在可尋址空間小于64K的情況下被寫(xiě)成任意大小。 所以,程序和其數(shù)據(jù)組合起來(lái)的大小,限制在DS 所指的64K內(nèi),這就是COM文件不得大于64K的原因。8086以內(nèi)存做為戰(zhàn)場(chǎng),用寄存器做為軍事基地,以加速工作。
- 第 1 頁(yè):8086CPU有哪些寄存器_各有什么用途
- 第 2 頁(yè):8086CPU的兩種工作模式
本文導(dǎo)航
非常好我支持^.^
(8) 100%
不好我反對(duì)
(0) 0%
相關(guān)閱讀:
- [電子說(shuō)] 學(xué)習(xí)STM32F103的ADC功能 2023-10-24
- [電子說(shuō)] 學(xué)習(xí)STM32F103的DAC功能 2023-10-24
- [電子說(shuō)] 學(xué)習(xí)STM32F103的定時(shí)器功能 2023-10-24
- [電子說(shuō)] STM32基礎(chǔ)知識(shí):定時(shí)器的PWM輸出功能 2023-10-24
- [電子說(shuō)] 既然ODR能控制管腳高低電平,為什么還需要BSRR寄存器呢? 2023-10-24
- [電子說(shuō)] ARM系列-P Channel簡(jiǎn)析 2023-10-24
- [控制/MCU] 基于STM32F429芯片的單片機(jī)芯片內(nèi)存映射圖 2023-10-23
- [電子說(shuō)] 軟硬件交互的角度將中斷的知識(shí)梳理 2023-10-22
( 發(fā)表人:姚遠(yuǎn)香 )