版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第二章 IBM PC 微型計(jì)算機(jī)2.1 8086/8088CPU的內(nèi)部結(jié)構(gòu)由于匯編語言是建立在機(jī)器指令基礎(chǔ)之上的,是一種描述硬件運(yùn)作的語言,所以要學(xué)習(xí)匯編語言,必須對它對應(yīng)的硬件結(jié)構(gòu)先作了解。特別是對于CPU,因?yàn)槊恳环NCPU都有自己的指令系統(tǒng),必須先對CPU的內(nèi)部結(jié)構(gòu)和工作機(jī)制作一個(gè)概要的理解。,一般CPU由如下三個(gè)部分組成:(1) 控制器:計(jì)算機(jī)系統(tǒng)中控制所有功能部件(包括控制器本身)協(xié)同工作,自動執(zhí)行計(jì)算機(jī)程序
2、的功能部件,它通過對機(jī)器指令進(jìn)行譯碼得到所需的控制信號,并根據(jù)時(shí)鐘信號使各種控制信號在適當(dāng)?shù)臅r(shí)刻產(chǎn)生,從而產(chǎn)生一系列時(shí)序過程來完成指令所要求的操作。,(2) 運(yùn)算器:計(jì)算機(jī)系統(tǒng)中加工、處理數(shù)據(jù)的功能部件,其功能包括算術(shù)運(yùn)算和邏輯運(yùn)算。(3) 寄存器:CPU內(nèi)部一般提供一組零散的存儲單元,每一個(gè)存儲單元都能存儲二進(jìn)制數(shù)據(jù),并且都有自己獨(dú)特的功能和相應(yīng)的名稱,這一組CPU內(nèi)部的存儲單元通常稱為寄存器。,8086和8088CPU內(nèi)部結(jié)構(gòu)大
3、致是一致的,內(nèi)部處理的最大二進(jìn)制數(shù)都是16位的,只不過8086針對的數(shù)據(jù)總線是16位的,8088是8位的,也就是說,只是CPU的外部引腳有所區(qū)別。8086/8088CPU內(nèi)部結(jié)構(gòu)大致如教材上P18的圖2-3所示。,CPU中的寄存器:8086CPU中總共有14個(gè)物理寄存器,邏輯上的寄存器有22個(gè),下面就它們的功能分別來討論。參見教材P20圖2-5 .(a) 段寄存器:包括CS(Code Segment)、SS(Stack Segm
4、ent)、DS(Data Segment)、ES(Extra Segment)四個(gè)16位物理寄存器,用于存放程序所要使用的4個(gè)存儲段的段基值,分別對應(yīng)于內(nèi)存中的四塊存儲區(qū)域,代碼段、堆棧段、數(shù)據(jù)段、附加段。,段:內(nèi)存中一段連續(xù)的空間,在程序中具有特定的用途。每個(gè)程序都可能會使用這樣四個(gè)段,其中代碼段是必須的,實(shí)用的程序通常至少包含代碼段、堆棧段、數(shù)據(jù)段。,代碼段用于存放程序的機(jī)器指令序列;堆棧段用于存放程序使用堆棧指令所保存的數(shù)
5、據(jù),自動保存的斷點(diǎn)等信息;數(shù)據(jù)段存放程序直接使用的數(shù)據(jù);附加段中的內(nèi)容不確定,可以由程序開發(fā)人員根據(jù)實(shí)際需要自己決定。,(b)地址指針寄存器:包括BX、SI、DI、BP、SP、IP五個(gè)16位寄存器,用于存放邏輯地址的偏移量或者偏移量的一部分(分量).其作用在尋址時(shí)類似于游標(biāo),通過相對于段基址的相對字節(jié)距離來定位具體的字節(jié)或字單元。,BX稱為基址寄存器,可以用于存放偏移量或者是偏移量的一部分(后面介紹指令尋址方式時(shí)會詳細(xì)分析)
6、,通常和DS、ES這兩個(gè)段寄存器配合使用,用于定位數(shù)據(jù)段或附加段中的內(nèi)存單元;,SI稱為源變址寄存器,用于存放偏移量或者是偏移量的一部分,通常和DS、ES這兩個(gè)段寄存器配合使用,用于定位數(shù)據(jù)段或附加段中的內(nèi)存單元。在串操作指令中,SI用于指明源串偏移量,所以被稱為源變址寄存器。,DI稱為目的變址寄存器,用于存放偏移量或者是偏移量的一部分,通常和DS、ES這兩個(gè)段寄存器配合使用,用于定位數(shù)據(jù)段或附加段中的內(nèi)存單元。在串操作指令中,
7、DI用于指明目的串偏移量,所以被稱為目的變址寄存器。,BP稱為基址指針寄存器,用于存放偏移量,通常和SS段寄存器配合使用,用于定位堆棧段中的內(nèi)存單元。SP稱為堆棧指針,用于存放偏移量,只能和SS段寄存器配合使用,且始終指向堆棧的棧頂,在堆棧指令中隱含的使用它來定位棧頂數(shù)據(jù)。,IP稱為指令指針,用于存放偏移量,只能和CS段寄存器配合使用,且始終指向代碼段中下一條將要讀取到CPU指令隊(duì)列的那條指令;修改IP中內(nèi)容的操作是CPU在每讀
8、取一條指令到指令隊(duì)列后自動進(jìn)行的,使它指向要讀取的下一條指令。跳轉(zhuǎn)指令中可以隱含的修改IP寄存器中的內(nèi)容。,(c) 數(shù)據(jù)寄存器:包括AX、BX、CX、DX這樣4個(gè)16位的寄存器.在邏輯上一個(gè)16位的數(shù)據(jù)寄存器可以看成是3個(gè)寄存器.例如AX,可以把它作為一個(gè)16位的數(shù)據(jù)寄存器來使用,也可以把它的高低8位分開,高8位為AH寄存器,低8位為AL寄存器.,在使用上要注意邏輯上不同的寄存器可能在物理上是相互覆蓋的。這里的寄存器BX在上
9、面提到過,它既可以用作數(shù)據(jù)寄存器,也可以用作地址指針寄存器。,(d)標(biāo)志寄存器:8086CPU提供一個(gè)16位的標(biāo)志寄存器FR,對這個(gè)寄存器的使用在指令中往往是隱含的。值得注意的是,F(xiàn)R是按位操作的,每一個(gè)二進(jìn)制位都有自己特定的含義,具體每一位的含義可以參見教材P23的圖2-8及其說明。,一般在匯編語言程序中的運(yùn)算指令或者標(biāo)志位控制指令會影響特定標(biāo)志位??梢酝ㄟ^轉(zhuǎn)移指令來判斷標(biāo)志位的變化,從而實(shí)現(xiàn)程序中的分支結(jié)構(gòu)或者循環(huán)結(jié)構(gòu)。標(biāo)
10、志寄存器是實(shí)現(xiàn)程序中分支、循環(huán)結(jié)構(gòu)的重要硬件基礎(chǔ)。,1)進(jìn)位標(biāo)志位CF(Carry Flag):在CPU進(jìn)行算術(shù)運(yùn)算指令時(shí),如果該指令要影響CF標(biāo)志,并且用戶把操作數(shù)看作無符號數(shù),那么該標(biāo)志位是有效標(biāo)志。它標(biāo)志著上次算術(shù)運(yùn)算最高位(對字操作是第15位,字節(jié)是第7位)是否產(chǎn)生進(jìn)位(加法指令)或者借位(減法指令)。如果有進(jìn)位或借位產(chǎn)生,那么CF=1;如果沒有,那么CF=0。CF標(biāo)志位位于FR的第0位。,例1.觀察下面的加減法運(yùn)算,判
11、斷最后CF標(biāo)志應(yīng)該為什么值,注意,算術(shù)運(yùn)算中的操作數(shù)必須理解為無符號數(shù),這樣CF標(biāo)志的值才有意義?!?0110011+ 010100011 00000100這次字節(jié)的加法運(yùn)算后,最高位向更高一位產(chǎn)生了進(jìn)位,CF應(yīng)該等于1。,00110000+00001101000111101這次字節(jié)的加法運(yùn)算后,最高位沒有向更高一位產(chǎn)生進(jìn)位,CF應(yīng)該等于0。,01010101-00111110000010111
12、這次字節(jié)的減法運(yùn)算后,最后位沒有向更高一位產(chǎn)生借位,CF應(yīng)該等于0。,2)奇偶標(biāo)志位PF(Parity Flag):如果CPU所執(zhí)行的指令要影響PF標(biāo)志,并且該指令得到的數(shù)據(jù)結(jié)果低8位中含有偶數(shù)個(gè)“1”時(shí),PF=1;含有奇數(shù)個(gè)“1”,PF=0。注意無論指令的操作數(shù)有多么長,只有低8位數(shù)據(jù)中1的個(gè)數(shù)能夠影響到PF標(biāo)志的取值。PF標(biāo)志位位于FR的第2位。,3)輔助進(jìn)位標(biāo)志位AF(Auxiliary Carry Flag):在CPU
13、執(zhí)行算術(shù)運(yùn)算指令時(shí),如果該指令要影響AF標(biāo)志,并且用戶把操作數(shù)看作無符號數(shù),AF標(biāo)志才有意義。如果低字節(jié)中的低4位向高4位產(chǎn)生進(jìn)位或借位時(shí)(也就是第3位向第4位產(chǎn)生進(jìn)位或借位),AF被置為1;如果低4位沒有向高4位產(chǎn)生進(jìn)位或借位,AF被置為0。AF標(biāo)志,又稱半進(jìn)位標(biāo)志,位于FR的第4位。判別標(biāo)準(zhǔn):和CF一樣,使用無符號數(shù)的加減運(yùn)算來作判斷,只是判斷進(jìn)位和借位的位置不在操作數(shù)的最高位,而是在低字節(jié)的第3位。,4)零值標(biāo)志位ZF
14、(Zero Flag):如果CPU執(zhí)行的指令要影響ZF標(biāo)志,并且保證ZF標(biāo)志是有意義的,那么當(dāng)指令得到的結(jié)果數(shù)據(jù)各位全為“0”時(shí),則ZF置“1”,否則ZF置“0”。ZF標(biāo)志位位于FR的第6位。實(shí)用價(jià)值:ZF標(biāo)志的使用主要是進(jìn)行比較,并根據(jù)比較的結(jié)果來進(jìn)行程序的分支或循環(huán)。例如,對兩個(gè)整數(shù)進(jìn)行比較,即對兩個(gè)整數(shù)進(jìn)行相減的操作,如果兩個(gè)數(shù)是相等的,那么結(jié)果為0,ZF=1;如果不等,那么結(jié)果非0,ZF=0。,5)符號標(biāo)志位SF(Sign
15、Flag):如果CPU執(zhí)行的指令要影響SF標(biāo)志,并且用戶把指令得到的結(jié)果數(shù)據(jù)看作帶符號數(shù),那么當(dāng)結(jié)果為負(fù)數(shù)時(shí),SF置“1”;當(dāng)結(jié)果為正數(shù)時(shí),SF置“0”。也就是說,SF標(biāo)志位的取值和結(jié)果數(shù)據(jù)的最高位是一致的,因?yàn)檠a(bǔ)碼的最高位就是符號位。SF標(biāo)志位位于FR的第7位。,(6)溢出標(biāo)志位OF(Overflow Flag):如果CPU執(zhí)行算術(shù)運(yùn)算指令,并且用戶把操作數(shù)看作帶符號數(shù)時(shí),OF標(biāo)志位的取值才有意義。如果運(yùn)算結(jié)果超出了補(bǔ)碼的
16、表示范圍(對字節(jié)來說,是-128到127,對字來說,是-32768到32767),那么解釋為溢出,OF置為1;如果運(yùn)算結(jié)果沒有超出補(bǔ)碼的表示范圍,OF置為0。OF標(biāo)志位位于FR的第11位。,7)單步(或跟蹤)標(biāo)志位TF(Trace Flag):前面講到的標(biāo)志位都屬于狀態(tài)標(biāo)志位,是指令根據(jù)自己的執(zhí)行情況而為后續(xù)指令留下的一些可供參考的狀態(tài)信息。TF標(biāo)志位是一個(gè)控制標(biāo)志位,和前面所講的標(biāo)志位功能不同,它是用于觸發(fā)單步中斷的。如果
17、使用指令將TF標(biāo)志位置為1,那么CPU將進(jìn)入單步執(zhí)行指令的工作方式,每執(zhí)行完一條指令就會觸發(fā)單步中斷,執(zhí)行單步中斷服務(wù)程序,一般會在屏幕上顯示CPU內(nèi)部各寄存器和標(biāo)志位的狀態(tài),以便用戶觀察該指令產(chǎn)生的影響。,進(jìn)入中斷時(shí),TF標(biāo)志會自動被清0,所以中斷服務(wù)程序的執(zhí)行并不會出現(xiàn)單步執(zhí)行的情況,中斷服務(wù)程序結(jié)束后TF標(biāo)志會恢復(fù)中斷以前的設(shè)置。TF標(biāo)志為用戶單步調(diào)試自己的程序提供了相應(yīng)的硬件基礎(chǔ)。如果使用指令將TF標(biāo)志清0,那么將會使CPU
18、退出單步運(yùn)行模式,回到連續(xù)執(zhí)行機(jī)器指令的狀態(tài)。TF標(biāo)志位位于FR的第8位。,(8)中斷標(biāo)志位IF(Interrupt-enable Flag):這也是一個(gè)控制標(biāo)志位,用于控制CPU是否處理可屏蔽中斷。如果使用指令將IF標(biāo)志置為1,那么CPU將會處理任何可屏蔽中斷,如果使用指令將IF標(biāo)志置為0,那么CPU將不會處理可屏蔽中斷。IF標(biāo)志位位于FR的第9位。注意,IF標(biāo)志只能屏蔽可屏蔽中斷,對于一些由嚴(yán)重錯誤或故障引起的不可屏蔽中斷則是無
19、法屏蔽的。,(9)方向標(biāo)志位DF(Direction Flag):這也是一個(gè)控制標(biāo)志位,用于控制串操作指令存取數(shù)據(jù)的方向.如果使用指令將DF標(biāo)志置為0,每執(zhí)行完一次串操作以后,源串地址指針SI和目的串地址指針DI中的內(nèi)容會自動遞增;如果使用指令將DF標(biāo)志置為1,那么每執(zhí)行完一次串操作以后,SI和DI中的內(nèi)容會自動遞減。,寄存器的分類可以參見教材P20圖2-5,地址指針寄存器和數(shù)據(jù)寄存器統(tǒng)稱為通用寄存器,總共有8個(gè),除了各自特殊的
20、功能外,它們都可以用于存放數(shù)據(jù);指令指針和標(biāo)志寄存器統(tǒng)稱為控制寄存器,指令指針直接控制機(jī)器指令的執(zhí)行流程,標(biāo)志寄存器可以由標(biāo)志位間接影響機(jī)器指令的執(zhí)行流程或者運(yùn)算結(jié)果;段寄存器用于指示當(dāng)前運(yùn)行程序中可以使用的4個(gè)當(dāng)前段。,2.2主存儲器2.2.1 8086/8088系統(tǒng)中主存儲器的編址方式以及數(shù)據(jù)的存放方式 主存儲器就是前面提到的內(nèi)部存儲器,簡稱內(nèi)存,它是以字節(jié)為單位進(jìn)行存儲單元編址的。也就是說,內(nèi)存中每一個(gè)字節(jié)
21、都有自己獨(dú)一無二的地址,CPU讀寫內(nèi)存中的數(shù)據(jù)最小單位為字節(jié)。,8086/8088系統(tǒng)中地址線有20條,每個(gè)地址可以用20位的無符號二進(jìn)制數(shù)來表示,為了表達(dá)方便,在程序中常常使用5位16進(jìn)制數(shù)來表示內(nèi)存單元的地址。系統(tǒng)的尋址范圍為00000H到0FFFFFH,可以尋址1MB的內(nèi)存空間。內(nèi)存中字節(jié)的編址可以參見教材P24的圖2-9。CPU訪問內(nèi)存中的數(shù)據(jù),可以以字節(jié)為單位,也可以以字為單位。字節(jié)是基本單位。一個(gè)字?jǐn)?shù)據(jù)(16位)
22、在內(nèi)存中將占據(jù)相鄰的兩個(gè)字節(jié)單元,數(shù)據(jù)的低8位存放在低地址單元;高8位存放在高地址單元。,例1.把16位數(shù)據(jù)5342H放入地址為20000H的字單元,試說明其存放方式。20000H:42H20001H:53H,例2.參見教材P25圖2-10,試說明CPU讀取地址為10000H、10002H的字節(jié)單元時(shí),將分別讀取到什么樣的數(shù)據(jù),讀取地址為10000H、10001H的字單元時(shí),將分別讀取到什么樣的數(shù)據(jù)。10000H:56H(
23、字節(jié))10002H:12H(字節(jié))10000H:3456H(字)10001H:1234H(字)內(nèi)存中存放的數(shù)據(jù)可以看作字節(jié)數(shù)據(jù),也可以看作字?jǐn)?shù)據(jù),具體以什么樣的方式來訪問內(nèi)存單元中的數(shù)據(jù)關(guān)鍵在于編制程序的人如何來解釋和使用內(nèi)存中的數(shù)據(jù)。,2.2.2 8086/8088系統(tǒng)中存儲單元的地址及其表示方法8086和8088CPU都提供20條地址引腳,也就是說它的尋址范圍為2 20個(gè)字節(jié),即1MB的內(nèi)存空間。但是,8
24、086/8088內(nèi)部寄存器和內(nèi)部總線都只有16位,不能夠直接形成20位的地址。CPU的設(shè)計(jì)者采用了一種分段管理內(nèi)存的方法來解決這個(gè)問題。,使用段寄存器來存放16位的段基值(無符號數(shù)),使用其他寄存器來存放16位的偏移量(也稱有效地址Effective Address,縮寫為EA,為無符號數(shù)),由段基值和偏移量組成的內(nèi)存單元地址表示形式稱為邏輯地址。,在CPU訪問內(nèi)存單元時(shí)會使用地址加法器來計(jì)算內(nèi)存單元的地址(見教材P19,如圖2-4)。
25、先把段基值左移4位(也就是在右邊添上4個(gè)0,相當(dāng)于乘以16),生成20位的段基址,然后加上16位的偏移量,就是要訪問的內(nèi)存單元地址,這種CPU在最終訪問內(nèi)存單元時(shí)使用的20位地址稱為物理地址。,一個(gè)段由它的段基址起始,即一個(gè)段的起始地址為段基址,這個(gè)起始地址由放在段寄存器中的段基值決定。注意段基址一定是可以被16整除的,因?yàn)樗詈?個(gè)二進(jìn)制位都為0。所以并不是所有的20位地址都可以作為段基址。只有能被16整除的地址可以作為段
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 匯編語言指令
- 匯編語言常用指令
- tms320c28x cpu匯編語言指令手冊
- tms320c28x cpu匯編語言指令手冊
- tms320c28x cpu匯編語言指令手冊
- 匯編語言指令詳解大全
- 匯編語言常用指令大全
- 常見匯編語言指令及解釋
- 常見匯編語言指令及解釋
- 匯編語言最全指令表
- 8086匯編語言指令集
- 匯編語言課件05其他指令
- 51匯編語言指令集符號定義表
- 解剖之腦干內(nèi)部結(jié)構(gòu)
- 英譯漢的翻譯方法和技巧是建立在英漢兩種語言的對比之
- 4匯編語言程序設(shè)計(jì)基礎(chǔ)
- 朋友是建立在信任的基礎(chǔ)上的-700字優(yōu)秀作文
- 匯編語言標(biāo)志位(cf)及一些常用指令
- 匯編語言基礎(chǔ)知識習(xí)題解答
- 第1章 匯編語言基礎(chǔ)知識
評論
0/150
提交評論