CPU的內(nèi)部結(jié)構(gòu)由于匯編語言是建立在機器指令基礎(chǔ)之.ppt
《CPU的內(nèi)部結(jié)構(gòu)由于匯編語言是建立在機器指令基礎(chǔ)之.ppt》由會員分享,可在線閱讀,更多相關(guān)《CPU的內(nèi)部結(jié)構(gòu)由于匯編語言是建立在機器指令基礎(chǔ)之.ppt(40頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第二章IBMPC微型計算機2 18086 8088CPU的內(nèi)部結(jié)構(gòu)由于匯編語言是建立在機器指令基礎(chǔ)之上的 是一種描述硬件運作的語言 所以要學習匯編語言 必須對它對應的硬件結(jié)構(gòu)先作了解 特別是對于CPU 因為每一種CPU都有自己的指令系統(tǒng) 必須先對CPU的內(nèi)部結(jié)構(gòu)和工作機制作一個概要的理解 一般CPU由如下三個部分組成 1 控制器 計算機系統(tǒng)中控制所有功能部件 包括控制器本身 協(xié)同工作 自動執(zhí)行計算機程序的功能部件 它通過對機器指令進行譯碼得到所需的控制信號 并根據(jù)時鐘信號使各種控制信號在適當?shù)臅r刻產(chǎn)生 從而產(chǎn)生一系列時序過程來完成指令所要求的操作 2 運算器 計算機系統(tǒng)中加工 處理數(shù)據(jù)的功能部件 其功能包括算術(shù)運算和邏輯運算 3 寄存器 CPU內(nèi)部一般提供一組零散的存儲單元 每一個存儲單元都能存儲二進制數(shù)據(jù) 并且都有自己獨特的功能和相應的名稱 這一組CPU內(nèi)部的存儲單元通常稱為寄存器 8086和8088CPU內(nèi)部結(jié)構(gòu)大致是一致的 內(nèi)部處理的最大二進制數(shù)都是16位的 只不過8086針對的數(shù)據(jù)總線是16位的 8088是8位的 也就是說 只是CPU的外部引腳有所區(qū)別 8086 8088CPU內(nèi)部結(jié)構(gòu)大致如教材上P18的圖2 3所示 CPU中的寄存器 8086CPU中總共有14個物理寄存器 邏輯上的寄存器有22個 下面就它們的功能分別來討論 參見教材P20圖2 5 a 段寄存器 包括CS CodeSegment SS StackSegment DS DataSegment ES ExtraSegment 四個16位物理寄存器 用于存放程序所要使用的4個存儲段的段基值 分別對應于內(nèi)存中的四塊存儲區(qū)域 代碼段 堆棧段 數(shù)據(jù)段 附加段 段 內(nèi)存中一段連續(xù)的空間 在程序中具有特定的用途 每個程序都可能會使用這樣四個段 其中代碼段是必須的 實用的程序通常至少包含代碼段 堆棧段 數(shù)據(jù)段 代碼段用于存放程序的機器指令序列 堆棧段用于存放程序使用堆棧指令所保存的數(shù)據(jù) 自動保存的斷點等信息 數(shù)據(jù)段存放程序直接使用的數(shù)據(jù) 附加段中的內(nèi)容不確定 可以由程序開發(fā)人員根據(jù)實際需要自己決定 b 地址指針寄存器 包括BX SI DI BP SP IP五個16位寄存器 用于存放邏輯地址的偏移量或者偏移量的一部分 分量 其作用在尋址時類似于游標 通過相對于段基址的相對字節(jié)距離來定位具體的字節(jié)或字單元 BX稱為基址寄存器 可以用于存放偏移量或者是偏移量的一部分 后面介紹指令尋址方式時會詳細分析 通常和DS ES這兩個段寄存器配合使用 用于定位數(shù)據(jù)段或附加段中的內(nèi)存單元 SI稱為源變址寄存器 用于存放偏移量或者是偏移量的一部分 通常和DS ES這兩個段寄存器配合使用 用于定位數(shù)據(jù)段或附加段中的內(nèi)存單元 在串操作指令中 SI用于指明源串偏移量 所以被稱為源變址寄存器 DI稱為目的變址寄存器 用于存放偏移量或者是偏移量的一部分 通常和DS ES這兩個段寄存器配合使用 用于定位數(shù)據(jù)段或附加段中的內(nèi)存單元 在串操作指令中 DI用于指明目的串偏移量 所以被稱為目的變址寄存器 BP稱為基址指針寄存器 用于存放偏移量 通常和SS段寄存器配合使用 用于定位堆棧段中的內(nèi)存單元 SP稱為堆棧指針 用于存放偏移量 只能和SS段寄存器配合使用 且始終指向堆棧的棧頂 在堆棧指令中隱含的使用它來定位棧頂數(shù)據(jù) IP稱為指令指針 用于存放偏移量 只能和CS段寄存器配合使用 且始終指向代碼段中下一條將要讀取到CPU指令隊列的那條指令 修改IP中內(nèi)容的操作是CPU在每讀取一條指令到指令隊列后自動進行的 使它指向要讀取的下一條指令 跳轉(zhuǎn)指令中可以隱含的修改IP寄存器中的內(nèi)容 c 數(shù)據(jù)寄存器 包括AX BX CX DX這樣4個16位的寄存器 在邏輯上一個16位的數(shù)據(jù)寄存器可以看成是3個寄存器 例如AX 可以把它作為一個16位的數(shù)據(jù)寄存器來使用 也可以把它的高低8位分開 高8位為AH寄存器 低8位為AL寄存器 在使用上要注意邏輯上不同的寄存器可能在物理上是相互覆蓋的 這里的寄存器BX在上面提到過 它既可以用作數(shù)據(jù)寄存器 也可以用作地址指針寄存器 d 標志寄存器 8086CPU提供一個16位的標志寄存器FR 對這個寄存器的使用在指令中往往是隱含的 值得注意的是 FR是按位操作的 每一個二進制位都有自己特定的含義 具體每一位的含義可以參見教材P23的圖2 8及其說明 一般在匯編語言程序中的運算指令或者標志位控制指令會影響特定標志位 可以通過轉(zhuǎn)移指令來判斷標志位的變化 從而實現(xiàn)程序中的分支結(jié)構(gòu)或者循環(huán)結(jié)構(gòu) 標志寄存器是實現(xiàn)程序中分支 循環(huán)結(jié)構(gòu)的重要硬件基礎(chǔ) 進位標志位CF CarryFlag 在CPU進行算術(shù)運算指令時 如果該指令要影響CF標志 并且用戶把操作數(shù)看作無符號數(shù) 那么該標志位是有效標志 它標志著上次算術(shù)運算最高位 對字操作是第15位 字節(jié)是第7位 是否產(chǎn)生進位 加法指令 或者借位 減法指令 如果有進位或借位產(chǎn)生 那么CF 1 如果沒有 那么CF 0 CF標志位位于FR的第0位 例1 觀察下面的加減法運算 判斷最后CF標志應該為什么值 注意 算術(shù)運算中的操作數(shù)必須理解為無符號數(shù) 這樣CF標志的值才有意義 10110011 01010001100000100這次字節(jié)的加法運算后 最高位向更高一位產(chǎn)生了進位 CF應該等于1 00110000 00001101000111101這次字節(jié)的加法運算后 最高位沒有向更高一位產(chǎn)生進位 CF應該等于0 01010101 00111110000010111這次字節(jié)的減法運算后 最后位沒有向更高一位產(chǎn)生借位 CF應該等于0 奇偶標志位PF ParityFlag 如果CPU所執(zhí)行的指令要影響PF標志 并且該指令得到的數(shù)據(jù)結(jié)果低8位中含有偶數(shù)個 1 時 PF 1 含有奇數(shù)個 1 PF 0 注意無論指令的操作數(shù)有多么長 只有低8位數(shù)據(jù)中1的個數(shù)能夠影響到PF標志的取值 PF標志位位于FR的第2位 輔助進位標志位AF AuxiliaryCarryFlag 在CPU執(zhí)行算術(shù)運算指令時 如果該指令要影響AF標志 并且用戶把操作數(shù)看作無符號數(shù) AF標志才有意義 如果低字節(jié)中的低4位向高4位產(chǎn)生進位或借位時 也就是第3位向第4位產(chǎn)生進位或借位 AF被置為1 如果低4位沒有向高4位產(chǎn)生進位或借位 AF被置為0 AF標志 又稱半進位標志 位于FR的第4位 判別標準 和CF一樣 使用無符號數(shù)的加減運算來作判斷 只是判斷進位和借位的位置不在操作數(shù)的最高位 而是在低字節(jié)的第3位 4 零值標志位ZF ZeroFlag 如果CPU執(zhí)行的指令要影響ZF標志 并且保證ZF標志是有意義的 那么當指令得到的結(jié)果數(shù)據(jù)各位全為 0 時 則ZF置 1 否則ZF置 0 ZF標志位位于FR的第6位 實用價值 ZF標志的使用主要是進行比較 并根據(jù)比較的結(jié)果來進行程序的分支或循環(huán) 例如 對兩個整數(shù)進行比較 即對兩個整數(shù)進行相減的操作 如果兩個數(shù)是相等的 那么結(jié)果為0 ZF 1 如果不等 那么結(jié)果非0 ZF 0 5 符號標志位SF SignFlag 如果CPU執(zhí)行的指令要影響SF標志 并且用戶把指令得到的結(jié)果數(shù)據(jù)看作帶符號數(shù) 那么當結(jié)果為負數(shù)時 SF置 1 當結(jié)果為正數(shù)時 SF置 0 也就是說 SF標志位的取值和結(jié)果數(shù)據(jù)的最高位是一致的 因為補碼的最高位就是符號位 SF標志位位于FR的第7位 6 溢出標志位OF OverflowFlag 如果CPU執(zhí)行算術(shù)運算指令 并且用戶把操作數(shù)看作帶符號數(shù)時 OF標志位的取值才有意義 如果運算結(jié)果超出了補碼的表示范圍 對字節(jié)來說 是 128到127 對字來說 是 32768到32767 那么解釋為溢出 OF置為1 如果運算結(jié)果沒有超出補碼的表示范圍 OF置為0 OF標志位位于FR的第11位 7 單步 或跟蹤 標志位TF TraceFlag 前面講到的標志位都屬于狀態(tài)標志位 是指令根據(jù)自己的執(zhí)行情況而為后續(xù)指令留下的一些可供參考的狀態(tài)信息 TF標志位是一個控制標志位 和前面所講的標志位功能不同 它是用于觸發(fā)單步中斷的 如果使用指令將TF標志位置為1 那么CPU將進入單步執(zhí)行指令的工作方式 每執(zhí)行完一條指令就會觸發(fā)單步中斷 執(zhí)行單步中斷服務程序 一般會在屏幕上顯示CPU內(nèi)部各寄存器和標志位的狀態(tài) 以便用戶觀察該指令產(chǎn)生的影響 進入中斷時 TF標志會自動被清0 所以中斷服務程序的執(zhí)行并不會出現(xiàn)單步執(zhí)行的情況 中斷服務程序結(jié)束后TF標志會恢復中斷以前的設(shè)置 TF標志為用戶單步調(diào)試自己的程序提供了相應的硬件基礎(chǔ) 如果使用指令將TF標志清0 那么將會使CPU退出單步運行模式 回到連續(xù)執(zhí)行機器指令的狀態(tài) TF標志位位于FR的第8位 8 中斷標志位IF Interrupt enableFlag 這也是一個控制標志位 用于控制CPU是否處理可屏蔽中斷 如果使用指令將IF標志置為1 那么CPU將會處理任何可屏蔽中斷 如果使用指令將IF標志置為0 那么CPU將不會處理可屏蔽中斷 IF標志位位于FR的第9位 注意 IF標志只能屏蔽可屏蔽中斷 對于一些由嚴重錯誤或故障引起的不可屏蔽中斷則是無法屏蔽的 9 方向標志位DF DirectionFlag 這也是一個控制標志位 用于控制串操作指令存取數(shù)據(jù)的方向 如果使用指令將DF標志置為0 每執(zhí)行完一次串操作以后 源串地址指針SI和目的串地址指針DI中的內(nèi)容會自動遞增 如果使用指令將DF標志置為1 那么每執(zhí)行完一次串操作以后 SI和DI中的內(nèi)容會自動遞減 寄存器的分類可以參見教材P20圖2 5 地址指針寄存器和數(shù)據(jù)寄存器統(tǒng)稱為通用寄存器 總共有8個 除了各自特殊的功能外 它們都可以用于存放數(shù)據(jù) 指令指針和標志寄存器統(tǒng)稱為控制寄存器 指令指針直接控制機器指令的執(zhí)行流程 標志寄存器可以由標志位間接影響機器指令的執(zhí)行流程或者運算結(jié)果 段寄存器用于指示當前運行程序中可以使用的4個當前段 主存儲器2 2 18086 8088系統(tǒng)中主存儲器的編址方式以及數(shù)據(jù)的存放方式主存儲器就是前面提到的內(nèi)部存儲器 簡稱內(nèi)存 它是以字節(jié)為單位進行存儲單元編址的 也就是說 內(nèi)存中每一個字節(jié)都有自己獨一無二的地址 CPU讀寫內(nèi)存中的數(shù)據(jù)最小單位為字節(jié) 8086 8088系統(tǒng)中地址線有20條 每個地址可以用20位的無符號二進制數(shù)來表示 為了表達方便 在程序中常常使用5位16進制數(shù)來表示內(nèi)存單元的地址 系統(tǒng)的尋址范圍為00000H到0FFFFFH 可以尋址1MB的內(nèi)存空間 內(nèi)存中字節(jié)的編址可以參見教材P24的圖2 9 CPU訪問內(nèi)存中的數(shù)據(jù) 可以以字節(jié)為單位 也可以以字為單位 字節(jié)是基本單位 一個字數(shù)據(jù) 16位 在內(nèi)存中將占據(jù)相鄰的兩個字節(jié)單元 數(shù)據(jù)的低8位存放在低地址單元 高8位存放在高地址單元 例1 把16位數(shù)據(jù)5342H放入地址為20000H的字單元 試說明其存放方式 20000H 42H20001H 53H 例2 參見教材P25圖2 10 試說明CPU讀取地址為10000H 10002H的字節(jié)單元時 將分別讀取到什么樣的數(shù)據(jù) 讀取地址為10000H 10001H的字單元時 將分別讀取到什么樣的數(shù)據(jù) 10000H 56H 字節(jié) 10002H 12H 字節(jié) 10000H 3456H 字 10001H 1234H 字 內(nèi)存中存放的數(shù)據(jù)可以看作字節(jié)數(shù)據(jù) 也可以看作字數(shù)據(jù) 具體以什么樣的方式來訪問內(nèi)存單元中的數(shù)據(jù)關(guān)鍵在于編制程序的人如何來解釋和使用內(nèi)存中的數(shù)據(jù) 2 2 28086 8088系統(tǒng)中存儲單元的地址及其表示方法8086和8088CPU都提供20條地址引腳 也就是說它的尋址范圍為220個字節(jié) 即1MB的內(nèi)存空間 但是 8086 8088內(nèi)部寄存器和內(nèi)部總線都只有16位 不能夠直接形成20位的地址 CPU的設(shè)計者采用了一種分段管理內(nèi)存的方法來解決這個問題 使用段寄存器來存放16位的段基值 無符號數(shù) 使用其他寄存器來存放16位的偏移量 也稱有效地址EffectiveAddress 縮寫為EA 為無符號數(shù) 由段基值和偏移量組成的內(nèi)存單元地址表示形式稱為邏輯地址 在CPU訪問內(nèi)存單元時會使用地址加法器來計算內(nèi)存單元的地址 見教材P19 如圖2 4 先把段基值左移4位 也就是在右邊添上4個0 相當于乘以16 生成20位的段基址 然后加上16位的偏移量 就是要訪問的內(nèi)存單元地址 這種CPU在最終訪問內(nèi)存單元時使用的20位地址稱為物理地址 一個段由它的段基址起始 即一個段的起始地址為段基址 這個起始地址由放在段寄存器中的段基值決定 注意段基址一定是可以被16整除的 因為它最后4個二進制位都為0 所以并不是所有的20位地址都可以作為段基址 只有能被16整除的地址可以作為段基址 這樣的地址有1M 16 64K個 也就是說 在8086 8088系統(tǒng)的內(nèi)存空間 最多可以組織64K個段 一個段的最大空間由16位偏移量決定 最大偏移量用16進制數(shù)表示為0FFFFH 換算為十進制可得到一個段的最大空間大小 為64KB 在匯編語言程序中 可以根據(jù)實際情況定義多個段 程序中的段按照其功能可以分為數(shù)據(jù)段 代碼段 堆棧段 附加段- 1.請仔細閱讀文檔,確保文檔完整性,對于不預覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- CPU 內(nèi)部結(jié)構(gòu) 由于 匯編語言 建立 機器 指令 基礎(chǔ)
鏈接地址:http://www.820124.com/p-6328372.html