80868088CPU的內部結構由于匯編語言是建立在機器指令基礎之_第1頁
80868088CPU的內部結構由于匯編語言是建立在機器指令基礎之_第2頁
80868088CPU的內部結構由于匯編語言是建立在機器指令基礎之_第3頁
80868088CPU的內部結構由于匯編語言是建立在機器指令基礎之_第4頁
80868088CPU的內部結構由于匯編語言是建立在機器指令基礎之_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第二章 IBM PC 微型計算機2.1 8086/8088CPU的內部結構由于匯編語言是建立在機器指令基礎之上的,是一種描述硬件運作的語言,所以要學習匯編語言,必須對它對應的硬件結構先作了解。特別是對于CPU,因為每一種CPU都有自己的指令系統,必須先對CPU的內部結構和工作機制作一個概要的理解。1一般CPU由如下三個部分組成:(1) 控制器:計算機系統中控制所有功能部件(包括控制器本身)協同工作,自動執行計算機程序的功能部件,它通過對機器指令進行譯碼得到所需的控制信號,并根據時鐘信號使各種控制信號在適當的時刻產生,從而產生一系列時序過程來完成指令所要求的操作。2(2) 運算器:計算機系統中加

2、工、處理數據的功能部件,其功能包括算術運算和邏輯運算。(3) 寄存器:CPU內部一般提供一組零散的存儲單元,每一個存儲單元都能存儲二進制數據,并且都有自己獨特的功能和相應的名稱,這一組CPU內部的存儲單元通常稱為寄存器。38086和8088CPU內部結構大致是一致的,內部處理的最大二進制數都是16位的,只不過8086針對的數據總線是16位的,8088是8位的,也就是說,只是CPU的外部引腳有所區別。8086/8088CPU內部結構大致如教材上P18的圖2-3所示。4CPU中的寄存器:8086CPU中總共有14個物理寄存器,邏輯上的寄存器有22個,下面就它們的功能分別來討論。參見教材P20圖2-

3、5 (a)段寄存器:包括CS(Code Segment)、SS(Stack Segment)、DS(Data Segment)、ES(Extra Segment)四個16位物理寄存器,用于存放程序所要使用的4個存儲段的段基值,分別對應于內存中的四塊存儲區域,代碼段、堆棧段、數據段、附加段。5段:內存中一段連續的空間,在程序中具有特定的用途。每個程序都可能會使用這樣四個段,其中代碼段是必須的,實用的程序通常至少包含代碼段、堆棧段、數據段。6代碼段用于存放程序的機器指令序列;堆棧段用于存放程序使用堆棧指令所保存的數據,自動保存的斷點等信息;數據段存放程序直接使用的數據;附加段中的內容不確定,可以由

4、程序開發人員根據實際需要自己決定。7(b)地址指針寄存器:包括BX、SI、DI、BP、SP、IP五個16位寄存器,用于存放邏輯地址的偏移量或者偏移量的一部分(分量)其作用在尋址時類似于游標,通過相對于段基址的相對字節距離來定位具體的字節或字單元。8BX稱為基址寄存器,可以用于存放偏移量或者是偏移量的一部分(后面介紹指令尋址方式時會詳細分析),通常和DS、ES這兩個段寄存器配合使用,用于定位數據段或附加段中的內存單元;9SI稱為源變址寄存器,用于存放偏移量或者是偏移量的一部分,通常和DS、ES這兩個段寄存器配合使用,用于定位數據段或附加段中的內存單元。在串操作指令中,SI用于指明源串偏移量,所以

5、被稱為源變址寄存器。10DI稱為目的變址寄存器,用于存放偏移量或者是偏移量的一部分,通常和DS、ES這兩個段寄存器配合使用,用于定位數據段或附加段中的內存單元。在串操作指令中,DI用于指明目的串偏移量,所以被稱為目的變址寄存器。11BP稱為基址指針寄存器,用于存放偏移量,通常和SS段寄存器配合使用,用于定位堆棧段中的內存單元。SP稱為堆棧指針,用于存放偏移量,只能和SS段寄存器配合使用,且始終指向堆棧的棧頂,在堆棧指令中隱含的使用它來定位棧頂數據。12IP稱為指令指針,用于存放偏移量,只能和CS段寄存器配合使用,且始終指向代碼段中下一條將要讀取到CPU指令隊列的那條指令;修改IP中內容的操作是

6、CPU在每讀取一條指令到指令隊列后自動進行的,使它指向要讀取的下一條指令。跳轉指令中可以隱含的修改IP寄存器中的內容。13(c)數據寄存器:包括AX、BX、CX、DX這樣4個16位的寄存器在邏輯上一個16位的數據寄存器可以看成是3個寄存器例如AX,可以把它作為一個16位的數據寄存器來使用,也可以把它的高低8位分開,高8位為AH寄存器,低8位為AL寄存器14在使用上要注意邏輯上不同的寄存器可能在物理上是相互覆蓋的。這里的寄存器BX在上面提到過,它既可以用作數據寄存器,也可以用作地址指針寄存器。15(d)標志寄存器:8086CPU提供一個16位的標志寄存器FR,對這個寄存器的使用在指令中往往是隱含

7、的。值得注意的是,FR是按位操作的,每一個二進制位都有自己特定的含義,具體每一位的含義可以參見教材P23的圖2-8及其說明。16一般在匯編語言程序中的運算指令或者標志位控制指令會影響特定標志位。可以通過轉移指令來判斷標志位的變化,從而實現程序中的分支結構或者循環結構。標志寄存器是實現程序中分支、循環結構的重要硬件基礎。17)進位標志位CF(Carry Flag):在CPU進行算術運算指令時,如果該指令要影響CF標志,并且用戶把操作數看作無符號數,那么該標志位是有效標志。它標志著上次算術運算最高位(對字操作是第15位,字節是第7位)是否產生進位(加法指令)或者借位(減法指令)。如果有進位或借位產

8、生,那么CF=1;如果沒有,那么CF=0。CF標志位位于FR的第0位。18例1觀察下面的加減法運算,判斷最后CF標志應該為什么值,注意,算術運算中的操作數必須理解為無符號數,這樣CF標志的值才有意義。10110011+ 010100011 00000100這次字節的加法運算后,最高位向更高一位產生了進位,CF應該等于1。1900110000+00001101000111101這次字節的加法運算后,最高位沒有向更高一位產生進位,CF應該等于0。2001010101-00111110000010111這次字節的減法運算后,最后位沒有向更高一位產生借位,CF應該等于0。21)奇偶標志位PF(Pari

9、ty Flag):如果CPU所執行的指令要影響PF標志,并且該指令得到的數據結果低8位中含有偶數個“1”時,PF=1;含有奇數個“1”,PF=0。注意無論指令的操作數有多么長,只有低8位數據中1的個數能夠影響到PF標志的取值。PF標志位位于FR的第2位。22)輔助進位標志位AF(Auxiliary Carry Flag):在CPU執行算術運算指令時,如果該指令要影響AF標志,并且用戶把操作數看作無符號數,AF標志才有意義。如果低字節中的低4位向高4位產生進位或借位時(也就是第3位向第4位產生進位或借位),AF被置為1;如果低4位沒有向高4位產生進位或借位,AF被置為0。AF標志,又稱半進位標志

10、,位于FR的第4位。判別標準:和CF一樣,使用無符號數的加減運算來作判斷,只是判斷進位和借位的位置不在操作數的最高位,而是在低字節的第3位。234)零值標志位ZF(Zero Flag):如果CPU執行的指令要影響ZF標志,并且保證ZF標志是有意義的,那么當指令得到的結果數據各位全為“0”時,則ZF置“1”,否則ZF置“0”。ZF標志位位于FR的第6位。實用價值:ZF標志的使用主要是進行比較,并根據比較的結果來進行程序的分支或循環。例如,對兩個整數進行比較,即對兩個整數進行相減的操作,如果兩個數是相等的,那么結果為0,ZF=1;如果不等,那么結果非0,ZF=0。245)符號標志位SF(Sign

11、Flag):如果CPU執行的指令要影響SF標志,并且用戶把指令得到的結果數據看作帶符號數,那么當結果為負數時,SF置“1”;當結果為正數時,SF置“0”。也就是說,SF標志位的取值和結果數據的最高位是一致的,因為補碼的最高位就是符號位。SF標志位位于FR的第7位。25(6)溢出標志位OF(Overflow Flag):如果CPU執行算術運算指令,并且用戶把操作數看作帶符號數時,OF標志位的取值才有意義。如果運算結果超出了補碼的表示范圍(對字節來說,是-128到127,對字來說,是-32768到32767),那么解釋為溢出,OF置為1;如果運算結果沒有超出補碼的表示范圍,OF置為0。OF標志位位

12、于FR的第11位。267)單步(或跟蹤)標志位TF(Trace Flag):前面講到的標志位都屬于狀態標志位,是指令根據自己的執行情況而為后續指令留下的一些可供參考的狀態信息。TF標志位是一個控制標志位,和前面所講的標志位功能不同,它是用于觸發單步中斷的。如果使用指令將TF標志位置為1,那么CPU將進入單步執行指令的工作方式,每執行完一條指令就會觸發單步中斷,執行單步中斷服務程序,一般會在屏幕上顯示CPU內部各寄存器和標志位的狀態,以便用戶觀察該指令產生的影響。27進入中斷時,TF標志會自動被清0,所以中斷服務程序的執行并不會出現單步執行的情況,中斷服務程序結束后TF標志會恢復中斷以前的設置。

13、TF標志為用戶單步調試自己的程序提供了相應的硬件基礎。如果使用指令將TF標志清0,那么將會使CPU退出單步運行模式,回到連續執行機器指令的狀態。TF標志位位于FR的第8位。28(8)中斷標志位IF(Interrupt-enable Flag):這也是一個控制標志位,用于控制CPU是否處理可屏蔽中斷。如果使用指令將IF標志置為1,那么CPU將會處理任何可屏蔽中斷,如果使用指令將IF標志置為0,那么CPU將不會處理可屏蔽中斷。IF標志位位于FR的第9位。注意,IF標志只能屏蔽可屏蔽中斷,對于一些由嚴重錯誤或故障引起的不可屏蔽中斷則是無法屏蔽的。29(9)方向標志位DF(Direction Flag

14、):這也是一個控制標志位,用于控制串操作指令存取數據的方向.如果使用指令將DF標志置為0,每執行完一次串操作以后,源串地址指針SI和目的串地址指針DI中的內容會自動遞增;如果使用指令將DF標志置為1,那么每執行完一次串操作以后,SI和DI中的內容會自動遞減。30寄存器的分類可以參見教材P20圖2-5,地址指針寄存器和數據寄存器統稱為通用寄存器,總共有8個,除了各自特殊的功能外,它們都可以用于存放數據;指令指針和標志寄存器統稱為控制寄存器,指令指針直接控制機器指令的執行流程,標志寄存器可以由標志位間接影響機器指令的執行流程或者運算結果;段寄存器用于指示當前運行程序中可以使用的4個當前段。31主存

15、儲器221 8086/8088系統中主存儲器的編址方式以及數據的存放方式 主存儲器就是前面提到的內部存儲器,簡稱內存,它是以字節為單位進行存儲單元編址的。也就是說,內存中每一個字節都有自己獨一無二的地址,CPU讀寫內存中的數據最小單位為字節。328086/8088系統中地址線有20條,每個地址可以用20位的無符號二進制數來表示,為了表達方便,在程序中常常使用5位16進制數來表示內存單元的地址。系統的尋址范圍為00000H到0FFFFFH,可以尋址1MB的內存空間。內存中字節的編址可以參見教材P24的圖2-9。CPU訪問內存中的數據,可以以字節為單位,也可以以字為單位。字節是基本單位。一個字數據

16、(16位)在內存中將占據相鄰的兩個字節單元,數據的低8位存放在低地址單元;高8位存放在高地址單元。33例1把16位數據5342H放入地址為20000H的字單元,試說明其存放方式。20000H:42H20001H:53H34例2參見教材P25圖2-10,試說明CPU讀取地址為10000H、10002H的字節單元時,將分別讀取到什么樣的數據,讀取地址為10000H、10001H的字單元時,將分別讀取到什么樣的數據。10000H:56H(字節)10002H:12H(字節)10000H:3456H(字)10001H:1234H(字)內存中存放的數據可以看作字節數據,也可以看作字數據,具體以什么樣的方式

17、來訪問內存單元中的數據關鍵在于編制程序的人如何來解釋和使用內存中的數據。35222 8086/8088系統中存儲單元的地址及其表示方法8086和8088CPU都提供20條地址引腳,也就是說它的尋址范圍為2 20個字節,即1MB的內存空間。但是,8086/8088內部寄存器和內部總線都只有16位,不能夠直接形成20位的地址。CPU的設計者采用了一種分段管理內存的方法來解決這個問題。36使用段寄存器來存放16位的段基值(無符號數),使用其他寄存器來存放16位的偏移量(也稱有效地址Effective Address,縮寫為EA,為無符號數),由段基值和偏移量組成的內存單元地址表示形式稱為邏輯地址。37在CPU訪問內存單元時會使用地址加法器來計算內存單元的地址(見教材P19,如圖2-4)。先把段基值左移4位(也就是在右邊添上4個0,相當于乘以16),生成20位的段基址,然后加上16位的偏移量,就是要訪問的內存單元地址,這種CPU在最終訪問內存單元時使用的20位地址稱為物理地址。38一個段由它的段基址起始,即一個段的起始地

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論