2.1.1 8086的結(jié)構(gòu)特點
微處理器執(zhí)行一段程序通常是通過重復(fù)執(zhí)行如下步驟來完成的,即:
(1)從內(nèi)存儲器中取出一條指令,分析指令操作碼;
(2)讀出一個操作數(shù)(如果指令需要操作數(shù));
(3)執(zhí)行指令;
(4)將結(jié)果寫人內(nèi)存儲器(如果指令需要)。
在8位微處理器中,上述步驟大部分是一個接一個串行地完成的。微處理器在取操作碼、取操作數(shù)和存儲操作數(shù)時要占用總線,而分析操作碼和執(zhí)行指令時不占用總線。由于微處理器以串行方式工作,在執(zhí)行指令的過程中,總線會出現(xiàn)空閑時間,指令執(zhí)行時間就較長。為了提高程序的執(zhí)行速度,充分使用總線,8086微處理器被設(shè)計為兩個獨立的功能部件:執(zhí)行部件和總線接口部件,如圖2-1所示。
1.總線接口部件BIU(Bus Interface Unit)
總線接口部件由段寄存器、指令指針、地址形成邏輯、總線控制邏輯和指令隊列等組成。BIU負責(zé)從內(nèi)存指定區(qū)域取出指令送到指令隊列中排隊;執(zhí)行指令時所需要的操作數(shù)(內(nèi)存操作數(shù)和I/O操作數(shù))也由BIU從相應(yīng)的內(nèi)存區(qū)域或I/O端口取出,傳送給執(zhí)行部件EU。指令執(zhí)行的結(jié)果如果需要存入內(nèi)存的話,也由BIU寫入相應(yīng)的內(nèi)存區(qū)域。總之,BIU同外部總線連接為EU完成所有的總線操作,并計算形成20位的內(nèi)存物理地址。
2.執(zhí)行部件 EU(Execution Unit)
執(zhí)行部件由通用寄存器、標(biāo)志寄存器、運算器(ALU)和EU控制系統(tǒng)等組成。EU從BIU的指令隊列中獲得指令,然后執(zhí)行該指令,完成指令所規(guī)定的操作。EU用來對寄存器內(nèi)容和指令操作數(shù)進行算術(shù)和邏輯運算.以及進行內(nèi)存有效地址的計算。EU負責(zé)全部指令的執(zhí)行,向BIU提供數(shù)據(jù)和所需訪問的內(nèi)存或I/O端口的地址,并對通用寄存器、標(biāo)志寄存器和指令操作數(shù)進行管理。
由于EU和BIU這兩個功能部件能相互獨立地工作,并在大多數(shù)情況下,能使大部分的取指令和執(zhí)行指令重疊進行。這樣EU執(zhí)行的是BfU在前一時刻取出的指令,與此同時,BIU又在取出EU在下一時刻要執(zhí)行的指令。所以,在大多數(shù)情況下,取指令所需的時間“消失”了(隱含在上一指令的執(zhí)行之中)。大大減少等待取指令所需的時間,提高了微處理器的利用率和整個系統(tǒng)的執(zhí)行速度。這種取指令和執(zhí)行指令的重疊過程如圖2-2所示。
3.8088與8086的區(qū)別
Inte1 8088微處理器內(nèi)部采用16位結(jié)構(gòu),實質(zhì)上與 8086基本上是相同的,其內(nèi)部的兩個功能部件中EU與8086一樣,而BIU略有區(qū)別。第一,8086的指令隊列是6字節(jié)長,而8088的指令隊列為4字節(jié)長;第二,8086是真正的16位機,同BIU相連的8086總線中數(shù)據(jù)總線是16位總線,而8088是準(zhǔn)16位機,同BIU相連的8088總線中數(shù)據(jù)總線為8位總線。
2.1.2 8086的寄存器結(jié)構(gòu)
對8086的程序員而言,掌握其編程結(jié)構(gòu)——寄存器結(jié)構(gòu)是至關(guān)重要的。在8086微處理器中可供程序員使用的有14個16位寄存器,如圖2-3所示。
這14個寄存器按其用途可分為通用寄存器、指令指針、標(biāo)志寄存器和段寄存器四類。
1.通用寄存器
有8個通用寄存器,可分為兩組,即:(1)數(shù)據(jù)寄存器。數(shù)據(jù)寄存器有4個,包括累加器AX(Accumulator)、基址寄存器BX(Base)、計數(shù)寄存器CX(count)和數(shù)據(jù)寄存器DX(Data)。數(shù)據(jù)寄存器的特點是,這4個16位寄存器可分為高8位(AH、BH、CH和DH)與低8位(AL、BL、CL和DL),這兩組8位寄存器可分別尋址、獨立操作。這樣,可以將數(shù)據(jù)寄存器作為一個16位寄存器進行操作,也可用作兩個8位寄存器。
數(shù)據(jù)寄存器可以用來存放8位或16位的二進制操作數(shù),這些操作數(shù)可以是參加操作的數(shù)據(jù)、操作的中間結(jié)果,也可以是操作數(shù)的地址。大多數(shù)算術(shù)和邏輯運算指令都可以使用這些數(shù)據(jù)寄存器。
(2)指針寄存器和變址寄存器。另外4個通用寄存器是:堆棧指針SP(Stack Pointer),基址指針BP(Base Pointer)、源變址寄存SI(Source Index)和目的變址寄存器DI(Destination Index)。這4個16位寄存器只能按16位進行存取操作,主要用來形成操作數(shù)的地址,用于堆棧操作和變址運算中計算操作數(shù)的有效地址。其中SP、BP用于堆棧操作,SP用來確定堆棧在內(nèi)存中的地址,BP來存放在現(xiàn)行堆棧段的一個數(shù)據(jù)區(qū)的“基地址”。SI、DI用于變址操作,存放變址地址。這4個寄存器也可用作數(shù)據(jù)寄存器。
在8086的指令系統(tǒng)中,許多情況下,一條指令只能用一個特定的寄存器或寄存器組來完成其功能,對某些用來完成特定操作的8086指令,上述通用寄存器具有一些隱含用法,如表2-1所示。
表2-1 通用寄存器的隱含用法
寄存器 |
操 作 |
AX |
在字乘/字除指令中用作累加器在字I/O操作時作為數(shù)據(jù)寄存器 |
AH前一單元fix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> AL |
字節(jié)乘、字節(jié)除在LAHF指令中用作目的寄存器在字節(jié)乘、字節(jié)除指令中用作累加器在字節(jié)中I/O操作時作為數(shù)據(jù)寄存器BCD、ASCII碼數(shù)據(jù)運算時作累加器在XLAT指令中作累加器 |
BX |
間接尋址時,作為地址寄存器和基址寄存器在XLAT指令中用作基址寄存器 |
CX |
串操作時的循環(huán)次數(shù)計數(shù)器循環(huán)操作時的循環(huán)次數(shù)計數(shù)器 |
CL |
在循環(huán)移位和移位操作時用作環(huán)移和移位次數(shù)的計數(shù)寄存器 |
DX |
字乘、字除指令中用作輔助寄存器I/O指令間接尋址時作端口地址寄存器 |
SP |
堆棧指針 |
SI |
間接尋址時,作為地址寄存器和變址寄存器串操作時的源變址寄存器 |
DI |
間接尋址時,作為地址寄存器和變址寄存器串操作時的目的變址寄存器 |
2.指令指針I(yè)P(Instruction Pointer)
指令指針I(yè)P是一個16位專用寄存器。它指向當(dāng)前需要取出的指令字節(jié),當(dāng)BIU從內(nèi)存中取出一個指令字節(jié)后,IP就自動加1,指向下一指令字節(jié)。注意,IP指向的是指令地址的段內(nèi)地址偏移量,又稱偏移地址(Offset Address)或有效地址(EA,Effective Address)。
程序員不能對IP進行存取操作.程序中的轉(zhuǎn)移指令、返回指令以及中斷處理能對IP進行操作。
3.標(biāo)志寄存器 FR(Flag Register)
8086有一個16位的標(biāo)志寄存器FR,如圖2-4所示。
|
|
|
|
OF |
DF |
IF |
TF |
SF |
ZF |
|
AF |
|
PF |
|
CF |
圖2-4 8086的標(biāo)志寄存器
在16位的標(biāo)志寄存器FR中有意義的有9位,其中6位是狀態(tài)位,3位是控制位,簡述如下:
(1) 狀態(tài)位。
①進位標(biāo)志 CF(Carry Flag)。反映算術(shù)運算后,最高位(字節(jié)操作為D7位,字操作為D15位)出現(xiàn)進位(或借位)的情況,有則為‘1’。CF主要用于加、減法運算,移位和環(huán)移指令也會改變CF值。
②奇偶(校驗)標(biāo)志PF(Parity Flag)。反映操作結(jié)果低8位中“1”的個數(shù)的情況,若為偶數(shù),PF置“1”,主要在數(shù)據(jù)通信中用來檢查數(shù)據(jù)傳送有無出錯。
③輔助進位標(biāo)志AF(Auxiliary Carry Flag)。反映一個8位量(或16位量的低位字節(jié))的低4位向高位(即D3向D4)有無進位(或借位)的情況,有則置“1”,AF用于BCD碼算術(shù)運算指令。
④零標(biāo)志ZF(Zero Flag)。反映運算結(jié)果是否為零的情況,結(jié)果為零,ZF置“1”。
⑤符號標(biāo)志 SF(Sign Flag)。反映帶符號數(shù)運算結(jié)果符號位的情況,結(jié)果為負數(shù),SF
置“1”,SF的取值與運算結(jié)果的最高位(字節(jié)操作為D7,字操作為D15)取值一致。
⑥溢出標(biāo)志OF(Overflow Flag)。反映帶符號數(shù)(以二進制補碼表示)運算結(jié)果是否超過機器所能表示的數(shù)值范圍的情況,對字節(jié)運算為-128~+127,對字運算為-32768~+32767。若超過上述范圍,稱為“溢出”,OF置“1”。
注意:“溢出”與“進位”是兩種不同的概念,某次運算結(jié)果有“溢出” 不一定有“進
位”,反之有“進位”也不一定有“溢出”。
上述6個狀態(tài)標(biāo)志由執(zhí)行部件EU設(shè)置,反映算術(shù)或邏輯運算結(jié)果的某些特征,這些狀態(tài)標(biāo)志常用來影響或控制某些后續(xù)指令(例如,條件轉(zhuǎn)移指令、循環(huán)指令等)的執(zhí)行。不同指令對狀態(tài)標(biāo)志的影響不一樣,有些指令不影響狀態(tài)標(biāo)志。另外,進位標(biāo)志CF可由指令設(shè)置。
(2)控制位。
①方向標(biāo)志DF(Direction Flag)。在進行字符串操作時,每執(zhí)行一條串操作指令,對源或/與目的操作數(shù)的地址要進行一次調(diào)整(對字節(jié)操作為加 1或減1,對宇操作為加2或減
2),由DF決定地址是遞增還是遞減。若DF=“1”為遞減,即從高地址向低地址進行,DF
=‘0’為遞增。
②中斷允許標(biāo)志IF(Interrupt Fnable Flag)。表示系統(tǒng)是否允許響應(yīng)外部的可屏蔽中斷,若IF=1,表示允許響應(yīng)。IF對不可屏蔽中斷請求以及內(nèi)部中斷不起作用。
③陷阱標(biāo)志TF(Trap Flag)。當(dāng)TF=“1’時,微處理器每執(zhí)行完一條指令便自動產(chǎn)生一個內(nèi)部中斷,轉(zhuǎn)去執(zhí)行一個中斷服務(wù)程序,可以借助中斷服務(wù)程序來檢查每條指令的執(zhí)行情況;稱為“單步工作方式”,常用于程序的調(diào)試。
上述3個控制標(biāo)志用來控制微處理器的某些操作.可以由指令來設(shè)置。
4.段寄存器(Segment Register)
在微機系統(tǒng)的內(nèi)存中通常存放著三類信息,即:
(1)代碼(指令)——指示微處理器執(zhí)行何種操作;
(2)數(shù)據(jù)(字符、數(shù)值)——程序處理的對象;
(3)堆棧信息——被保存的返回地址和中間結(jié)果。
在8086系統(tǒng)中,這三類信息通常分別存放在各自的內(nèi)存區(qū)域中——8086存儲系統(tǒng)中的不同存儲段。
8086系統(tǒng)中把可直接尋址的1M字節(jié)內(nèi)在空間分為稱作“段”的邏輯區(qū)域,每個段的物理長度為64K字節(jié),而段的起始地址由稱為“段寄存器”的4個16位寄存器決定,這4個段寄存器為:
(1)代碼段寄存器CS(Code Segment),指向當(dāng)前的代碼段,指令由此段中取出;
(2)堆棧段寄存器SS(Stack Segment),指向當(dāng)前的堆棧段,堆棧操作的對象就是該段中存儲單元的內(nèi)容;
(3)數(shù)據(jù)段寄存器DS(Data Segment),指向當(dāng)前的數(shù)據(jù)段,通常用來存放程序變量
(存儲器操作數(shù));
(4)附加段寄存器ES(Extra Segment),指向當(dāng)前的附加段,通常也用來存放數(shù)據(jù)。
8086利用上述段寄存器的內(nèi)容,通過適當(dāng)轉(zhuǎn)換可以訪問這4個存儲段——代碼段、堆棧段、數(shù)據(jù)段和附加段。
2.1.3 8086系統(tǒng)中的存儲器組織及物理地址的形成
1.存儲器組織
8086微處理器有20條地址線、可以配置1M字節(jié)(1048576字節(jié))的內(nèi)存儲器,地址編號為00000H~FFFFFH。存儲空間都按8位字節(jié)進行組織,每個存儲單元存儲一個字節(jié)數(shù)據(jù),若存放“字”數(shù)據(jù)(16位),則存放在相鄰兩個存儲單元中,高字節(jié)存放在高地址單元、低字節(jié)存放在低地址單元,如圖2-5所示。
如果不考慮數(shù)據(jù)存取的速度,則指令、字節(jié)數(shù)據(jù)和字數(shù)據(jù)可以自由地存放在內(nèi)存的任何
字節(jié)地址中,而不必考慮“對準(zhǔn)”問題。因此代碼可以緊湊地存放在存儲器中,從而節(jié)省了
存儲空間。至于“對準(zhǔn)”問題,將在第三章中討論。
2.存儲器分段
(1)為什么要分段。因為8086微處理器內(nèi)部數(shù)指通路和寄存器皆為16位,內(nèi)部ALU只能進行16位運算,在程序中也只能使用16位地址,尋址范圍局限在216=65536(64K)字節(jié),為了能尋址1M字節(jié)地址,所以要引入“分段”概念。
(2)分段。8086程序把1M字節(jié)的存儲空間看成為一組存儲段,各段的功能由具體用途而定,分別為代碼段、堆棧段、數(shù)據(jù)段和附加段。一個存儲段是存儲器的一個邏輯單位,其長度可達64K字節(jié),每個段都由連續(xù)的存儲單元構(gòu)成,并是存儲器中獨立的、可分別尋址的單位。每段第一個字節(jié)的位置稱為“段起始地址”,可由軟件指定。對段起始地址的要求是:必須能被16整除(起始地址為XXXX0H)。段寄存器中存放了與段起始地址有關(guān)的16位“段基值”(Segment Base Value),一旦4個段寄存器的內(nèi)容確定后,程序就可訪問4個段中的任一存儲單元。若程序超過64K字節(jié),則必須通過給段寄存器重新送新值,把超出部分轉(zhuǎn)到新段中。注意,幾個段可以相互重疊,也可指向同一個64K字節(jié)空間。
(3)物理地址與邏輯地址。
①在具有地址變換機構(gòu)的計算機中,有兩種存儲器地址,一種是允許在程序中編排的地址——邏輯地址(Logical Address);另一種是信息在存儲器中實際存放的地址——物理地址
(Physical Address)。在8086系統(tǒng)中每個存儲單元也有兩種地址。
②8086系統(tǒng)中,8086微處理器與內(nèi)存儲器之間所有信息交換都要使用20位的物理地址。而在程序中所涉及的地址都是16位的邏輯地址。對給定的任一存儲單元而言有兩部分邏輯地址:“段基值”——決定該段第一個字節(jié)的位置;“段內(nèi)偏移量”(Offset)——該存使單元相對于該段起始單元的距離。
“段基值”存放在段寄存器(CS、SS、DS和ES)中,而“段內(nèi)偏移量”由 SP、BP、SI、DI、IP以及上述寄存器的組合而形成。
③物理地址的生成。存儲單元的20位物理地址是通過將16位的“段基值”左移4位再加上 16位的“段內(nèi)偏移量”(又稱“偏移地址”)而生成的,如圖2-6所示。
a.當(dāng)取指令時,8086會自動選擇CS值作為段基值,再加上由IP提供之偏移量形成物理地址;
b.當(dāng)涉及堆棧操作時,8086會自動選擇SS值作為段基值,再加上由SP提供之偏移量形成物理地址;
c.當(dāng)涉及一個操作數(shù)(存儲器操作數(shù))時,8086會自動選擇DS值為段基值(若以BP為基地址,則SS為段基值),再加上16位偏移量形成物理地址,這16位偏移量可以來自:
*指令中提供的直接地址——16位的位移量;
*某一個16位地址寄存器之值;
*指令中的位移量加上16位地址寄存器之值。
d.ES用于串操作指令中的數(shù)據(jù)塊傳送指令。
總之,8086系統(tǒng)中邏輯地址的來源可歸納如表2-2所示。
表2-2 邏輯地址的來源
操作類型 |
隱含的段基值 |
可替換的段基值 |
偏移地址 |
取指令 |
CS |
無 |
IP |
堆棧操作 |
SS |
無 |
SP |
BP用作基地址寄存器 |
SS |
CS、DS、ES |
EA |
通用數(shù)據(jù)讀寫 |
DS |
CS、ES、SS |
EA |
字符串操作(源地址) |
DS |
CS、ES、SS |
SI |
字符串操作(目的地址) |
ES |
無 |
DI |
EA(Effective Address)----有效地址,反映操作數(shù)的段內(nèi)偏移地址。
聲明:
(一)由于考試政策等各方面情況的不斷調(diào)整與變化,本網(wǎng)站所提供的考試信息僅供參考,請以權(quán)威部門公布的正式信息為準(zhǔn)。
(二)本網(wǎng)站在文章內(nèi)容來源出處標(biāo)注為其他平臺的稿件均為轉(zhuǎn)載稿,免費轉(zhuǎn)載出于非商業(yè)性學(xué)習(xí)目的,版權(quán)歸原作者所有。如您對內(nèi)容、版權(quán)等問題存在異議請與本站聯(lián)系,我們會及時進行處理解決。
相關(guān)推薦
2023年4月浙江自考高級英語課文翻譯復(fù)習(xí)資料十二
11-262022年浙江自考英語(二)語法及翻譯復(fù)習(xí)資料(8)
10-092023年4月浙江自考英語(二)串講筆記:lesson10-13
02-102024年4月浙江自考溫病學(xué)復(fù)習(xí)資料:第八章
12-22自考輔導(dǎo)資料:2021年10月《馬克思主義哲學(xué)原理》—感性認識和理性認識的辯證關(guān)系
06-172023年浙江自考公共管理學(xué)串講資料:公共管理學(xué)的產(chǎn)生
03-022023年4月浙江自考美學(xué)模擬題及答案匯總
12-012022年浙江自考《高級英語》復(fù)習(xí)資料(13)
09-282023年4月浙江自考環(huán)境心理學(xué)復(fù)習(xí)重點三
11-182022年浙江自考市政學(xué)復(fù)習(xí)筆記第十二章:城市經(jīng)濟管理
09-16與考生自由互動、并且能直接與專業(yè)老師進行交流解答。
與考生自由互動、并且能直接與專業(yè)老師進行交流解答。