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