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