微機原理第2章微處理器與指令系統.ppt_第1頁
微機原理第2章微處理器與指令系統.ppt_第2頁
微機原理第2章微處理器與指令系統.ppt_第3頁
微機原理第2章微處理器與指令系統.ppt_第4頁
微機原理第2章微處理器與指令系統.ppt_第5頁
已閱讀5頁,還剩168頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2-1,第二章 微處理器和指令系統,重點: 1.Intel系列微處理器的演變歷史; 2.Pentium的內部基本寄存器功能及應用; 3.操作數尋址方式; 4.通用整數指令,2-2,第二章 微處理器和指令系統,2.1 Intel系列微處理器概述 2.2 8086/8088微處理器 2.3 Pentium微處理器 2.4 Pentium微處理器指令系統,2-3,2.1.1 8086/8088 微處理器 2.1.2 80486 微處理器 2.1.3 Pentium 微處理器(80586) 2.1.4 Pentium Pro 微處理器 2.1.5 Pentium 微處理器 2.1.6 Pentium 微處理器 2.1.7 Pentium 4 微處理器,2.1 Intel系列微處理器概述,2-4,2.1.1 8086/8088 微處理器,8086是1978年推出的全16位微處理器, 8088是1978年推出的準16位微處理器。二者除外數據總線位數(8086為16位,8088為8位)及與此相關的部分邏輯稍有差別外,內部結構和基本性能相同,指令系統完全兼容。,在8086/8088的設計中,引入了兩個重要的結構概念: 指令流水線 存儲器分段,這兩個概念在以后升級的Intel系列微處理器中一直被沿用和發(fā)展。正是這兩個概念的引入,使8086/8088比原來的8位MPU在運行速度、處理能力和對存儲空間的訪問等性能方面有很大提高。,2-5,2.1.2 80486微處理器,1.內部寄存器的容量都擴充到了32位或以上,具有全32 位數據處理能力,并可進行64位的數據運算。 2.片內存儲管理部件可實現段頁式存儲管理,比80286可 提供更大的虛擬存儲空間和物理存儲空間。 3.新增了一種保護模式下的工作方式,即虛擬8086方式。 4.指令流水線增加到了6級。 5.提供了32位外部總線接口,最大數據傳輸速率顯著提 高。,80486是繼80386之后推出的第二代32位高性能微處理器,它以提高性能和面向多處理器系統為主要目標。80486繼承了80386的各種優(yōu)點,表現在以下幾方面:,2-6,2.1.2 80486微處理器,1.片內集成了一個浮點運算單元FPU 。 2.內含一個8KB的數據與指令合用的Cache。 3.采用RISC技術。使芯片內的不規(guī)則控制部分減少,同時常用基本指令采用硬件邏輯控制執(zhí)行,使基本指令可以用一個時鐘周期完成。 4.采用一種突發(fā)總線(Burst Bus)的技術。使取得一個地址后,與該地址相關的一組數據可以連續(xù)輸入/輸出,有效地解決了微處理器同內存儲器之間的數據交換問題。 5.面向多處理器結構,增加了支持多機操作的指令。,除以上80386、80486共有的特點之外,80486也采用了許多新技術:,2-7,2.1.3 Pentium微處理器(80586),1.采用超標量體系結構。 2.內置的浮點運算部件采用超流水線技術。 3.增加了分支指令預測。 4.內置了指令和數據兩個獨立的超高速緩存器,避免了預取指令和數據可能發(fā)生的沖突。,Pentium是一種高性能的32位微處理器。其對80486作了下列重大改進:,2-8,5.采用64位外部數據總線。 6.引入了大型機中采用的 內部錯誤檢測、功能冗余檢驗 和錯誤報告等自診斷功能。 7.進行了更多的可測性設計。 8.提供了獨特的性能監(jiān)察功能,以利于軟、硬件產品的優(yōu)化和升級。 9.提供了靈活的存儲器頁面管理。,2.1.3 Pentium微處理器(80586),2-9,精簡指令集技術。 二級緩沖結構。 亂序執(zhí)行和預測執(zhí)行技術。 三級超標量和14級超流水線結構。 寄存器重命名技術,2.1.4 Pentium Pro微處理器,簡稱P6,中文名為“高能奔騰”。在體系結構中采用了許多新的思想和新的技術:,2-10,2.1.5 Pentium 微處理器,P6級微處理器的第二代產品,從系統結構角度看,主要采用了以下幾種先進技術:,采用了由三種創(chuàng)新處理技巧結合的動態(tài)執(zhí)行技術,即:多分支預測、數據流分析和推測執(zhí)行。 雙重獨立總線技術(DIB, Dual Independent Bus), 多媒體增強技術(MMX技術) 采用單指令流多數據流SIMD技術 新增加了57條功能強大的MMX指令,2-11,2.1.6 Pentium 微處理器,Pentium 是第三代P6級微處理器產品。與Pentium相比,有如下改進:,前端總線的時鐘頻率為100MHz (采用0.18m新工藝的Pentium ,其前端總線達到133MHz)。,將256KB的L2 Cache集成到了芯片內。 增加了 70條流式單指令多數據擴展SSE指令。 首次設置了處理器序列號PSN。,2-12,2.1.7 Pentium 4微處理器,1.采用了超級管道技術,使用長 達20級的分支預測/恢復管道,而P6 只有10級。 2.它的簡單算術邏輯單元(ALU) 采用2倍的處理器核心頻率運行。 3.動態(tài)執(zhí)行技術中的指令池能容下126條指令。 4.內含一個4KB的分支目標緩沖。 5.增加了由144條新指令組成的SSE2。,它是第一個非P6核心結構的全新32位微處理器,與P6級微處理器相比,主要結構特點如下:,2-13,2.2 8086/8088微處理器,內部結構 指令流水線 存儲器分段,8086是全16位微處理器,8088是準16位微處理器。二者除了外數據總線位數及與此相關的部分邏輯稍有差別外,內部結構和基本性能相同,指令系統完全兼容。,2-14,1.內部結構,2.2 8086/8088微處理器,2-15,EU( Execution Unit),2-16,(2)功能,BIU(Bus Interface Unit),完成所有外部總線的操作,提供總線控制信號。 具體地完成:取指、指令排隊、讀寫操作數、地址轉換(將兩個16位地址相加 20位物理地址),總線控制。,2-17,(3)指令隊列,BIU使用指令隊列實現流水線操作。 當指令隊列中有2個或2個(1個)以上的字節(jié)空間,且EU未申請讀寫存儲器,則BIU順序預取后續(xù)指令代碼 Queue。,2-18,EU的工作過程,2-19,2.指令流水線,指令隊列的存在使EU和BIU并行工作,取指令和分析、執(zhí)行指令操作可重疊進行,形成了兩級指令流水線結構,減少了CPU等待時間,提高了CPU的利用率,加快了整機運行速度,降低了對存儲器存取速度的要求。,2.2 8086/8088微處理器,2-20,2-21,將1MB的物理存儲空間分成若干個邏輯段,每段大小為64KB。,段的起始單元地址叫段基址,存放在段寄存器中。通過4個段寄存器,CPU每次可同時對4個段進行尋址。,3.存儲器分段,2.2 8086/8088微處理器,2-22,分段方式不唯一,各段之間可以連續(xù)、分離、部分重疊或完全重疊,這主要取決于對各個段寄存器的預置內容。,2.2 8086/8088微處理器, 存儲器分段結構示例,2-23,物理地址是1MB存儲空間中的某一單元地址,用20位地址碼表示,CPU訪問存儲器時,地址總線上送出的就是物理地址。 邏輯地址在編程時采用,由段基址和偏移地址組成,兩者均為16位。, 物理地址和邏輯地址,2.2 8086/8088微處理器,2-24,邏輯地址與20位物理地址的變換關系: 物理地址=段基址16+偏移地址, 邏輯地址與物理地址的變換,2.2 8086/8088微處理器,2-25,例:已知CS=1055H,DS=250AH,ES=2EF0H,SS=8FF0H,DS段有一操作數,其偏移地址=0204H, 1)畫出各段在內存中的分布 2)指出各段首地址 3)該操作數的物理地址=?,解:各段在內存中的分布右圖所示。 操作數的物理地址為: 250AH10H+0204H = 252A4H,2-26,2.3 Pentium微處理器,2.3.1 內部結構與外部引腳 2.3.2 內部寄存器 2.3.3 Pentium的四種工作方式,2-27,Pentium在結構上由如下功能部件組成: 整數執(zhí)行單元 浮點單元 指令Cache和數據Cache 指令預取單元 指令譯碼單元 地址轉換與管理單元 總線接口單元 控制單元(核心,又叫運算器) 這些功能部件除地址轉換與管理單元與80386/80486保持兼容外,其他都進行了重新設計。,2.3.1 內部結構和外部引腳,2-28,1. 內部結構,2.2.1 內部結構和外部引腳,1)總線接口單元 主要用于管理訪問外部存儲器和 I/O端口必須的地址、數據和控制總線,完成預取指令、讀/寫數據等總線操作。,3)預取緩沖單元 預取緩沖單元在總線接口單元空閑時,負責提前去內存或指令Cache預取指令。其指令預取緩沖器在前一條指令執(zhí)行結束之前可以預取多達94個字節(jié)的指令代碼。,4)指令譯碼單元 將預取的指令譯成Pentium可以執(zhí)行的控制信號并送控制單元。對絕大多數指令來說,Pentium微處理器可以做到每個時鐘周期以并行方式完成兩條指令的譯碼操作。,5)控制單元 負責解釋來自指令譯碼單元的指令字和控制ROM的微代碼??刂撇考妮敵鲋苯涌刂苾蓷l指令流水線和浮點單元。,6)地址轉換與存儲管理單元 Pentium的地址轉換與存儲管理單元與80386/80486保持完全兼容,由分段和分頁部件組成。Pentium除繼續(xù)支持4KB大小的頁面外,還允許使用高達4MB的頁面,從而減少了頁面切換的頻率,并加快了某些應用程序的執(zhí)行。,8) 浮點運算單元,2-29,2. Pentium的外部引腳,2-30,2-31,2-32,Pentium微處理器總線周期,2-33,基本寄存器 系統級寄存器 調試和模型專用寄存器 浮點寄存器,Pentium的內部寄存器,按功能可分為4類:,2.3.2 Pentium內部寄存器,2-34,2.3.2 Pentium內部寄存器,1. 基本寄存器,EIP用于保存下一條待預取指令相對于代碼基址的偏移量。它的低16位也可單獨訪問,稱之為IP。,2-35, 標志寄存器位定義,2.3.2 Pentium內部寄存器,2-36,在調試程序時,DEBUG提供了測試標志位的手段, 用符號表示標志位的值,每種標志位的符號如右表,2-37,標志: 運算結果最高位為0 SF=0 運算結果0 ZF=0 低8位中1的個數為奇數個 PF=0 最高位有進位 CF=1 第三位向第四位無進位 AF=0 次高位向最高位沒有進位 ,最高位向前進位 , OF=1,例:執(zhí)行兩個數的加法,分析對標志位的影響。,2-38, 段寄存器,Pentium有6個段寄存器:,2.3.2 Pentium內部寄存器,編程者可直接訪問的,編程者不能訪問的,2-39,實地址方式和虛擬8086方式下相同,段的長度固定為64KB,段選擇器就是段寄存器,它保存的是邏輯段基址的高16位,將它的內容左移4位即可得到實際段基址,而不必使用描述符高速緩存器。,在保護虛地址方式下,段的長度可以在1字節(jié)到4G字節(jié)之間變化;為了描述每個段的基址、屬性和邊界,為每個段定義了一個描述符。操作系統使用的各任務公用的段描述符放在一起構成全局描述符表GDT;某個任務專用的段描述符放在一起構成局部描述符表LDT。,Pentium段的定義與8086有所不同:,2.3.2 Pentium內部寄存器,2-40, 描述符與描述符表,2.3.2 Pentium內部寄存器,2-41, 段的的選擇符,為了說明一個段的描述符在哪個表中,表的序號是多少以及特權的高低,為每個段定義了一個16位的選擇符,存于段選擇器中,其格式為:,2.3.2 Pentium內部寄存器,2-42,將一個選擇符裝入一個段選擇器時,處理器將自動從GDT或LDT中找到其對應的描述符裝入相應描述符高速緩存器中。,2.3.2 Pentium內部寄存器,以后,每當訪問存儲器時,與所用段相關的段描述符高速緩沖器就自動參與該次存儲器訪問操作。轉換關系: 線性地址 = 段描述符高速緩存器中段基址 + 偏移地址,2-43,例題 有一個描述符表存放在全局描述符表的第63個表項中,訪問該描述符的請求特權級為2,請寫出該描述符的選擇符。 已知段描述符中有基址=56780000H,界限=10,G=1。求該描述符定義的存儲段的線性地址范圍。,2-44,例:假設虛擬地址為0100:00000200H,禁止分頁。如果描述符中讀出的段基址為00030000H,那么操作數的物理地址是什么?,解:將此虛擬地址轉換成物理地址為,基地址+偏移量,=00030000H+00002000H,=00032000H,2-45,Pentium微處理器中包含一組系統級寄存器:即5個控制寄存器CR0CR4和4個系統地址寄存器。這些寄存器只能由在特權級 0上運行的程序(一般是操作系統)訪問。,2.2.2 Pentium內部寄存器, 控制寄存器,Pentium在80486控制寄存器CR0CR3的基礎上新增了一個控制寄存器CR4,這些寄存器用來存放全局特性的機器狀態(tài)和實現對80X86/ Pentium微處理器的多種功能的控制與選擇。,2.系統級寄存器,2-46,2.3.2 Pentium內部寄存器,CR0,CR4,CR3,CR2,CR1, 控制寄存器格式:,2-47, 系統地址寄存器,2.3.2 Pentium的內部寄存器,系統地址寄存器,其中GDTR和LDTR分別用來存放GDT和LDT的32位線性基地址等內容;IDTR用來存放中斷描述符表的基址和界限;TR用來存放任務狀態(tài)段(TSS)的基址、界限和其他屬性。,只在保護方式下使用,所以又叫保護方式寄存器。用于把在保護方式下常用的數據基地址、界限和其他屬性保存起來,以確保其快速性。,2-48,圖2.14 GDTR與它定義的全局描述符表,2-49,例:(GDTR)=001000000FFFH,求GDT在物理存儲器中的起始地址,結束地址, 表的大小,表中可以存放多少個描述符?,解:GDT的起始地址為: 00100000H 結束地址為: 00100000H+0FFFH=00100FFFH 表的大小為: 0FFFH+1=4096字節(jié) 表中可以存放4096/8=512個描述符,2-50,2-51,圖2.15 LDTR和它定義的局部描述符表,2-52,例:設LDT的基址為00120000H,GDT的基址為 00100000H, (CS)=1007H,那么: 請求的特權級是多少? 段描述符位于GDT還是LDT中? 段描述符的地址是什么?,2-53,解:(CS)=1007H=0001 0000 0000 0111B, RPL=3,申請的特權級為3,TI=1,描述符位于LDT中,描述符相對于LDT基址的偏移量,段描述符的地址為0,0001000000000B8=512 8=4096=1000H,00120000H+1000H=00121000H,2-54,2-55,圖2.16 任務寄存器和任務切換機制,2-56,Pentium處理器中提供了一組調試寄存器和一組模型專用寄存器,用于排除故障和用于執(zhí)行跟蹤、性能監(jiān)測、測試及機器檢查錯誤。,2.3.2 Pentium的內部寄存器,3.調試和模型專用寄存器,2-57,Pentium處理器取消了80386/80486中的測試寄存器TR,其功能由一組“模型專用寄存器” MSR(Model Special Register)來實現,這一組MSR用于執(zhí)行跟蹤、性能監(jiān)測、測試和機器檢查錯誤。 Pentium處理器采用兩條指令RDMSR(讀MSR)和WRMSR(寫MSR)來訪問這些寄存器,ECX中的值(8位值)確定將訪問該組寄存器中哪一個MSR。,2.3.2 Pentium的內部寄存器,(2) 模型專用寄存器,2-58,2.3.3 Pentium的四種工作方式,2-59,2.4 Pentium微處理器指令系統,2.4.1 基本數據類型 2.4.2 操作數尋址方式 2.4.3 Pentium指令系統概貌 2.4.4 數據傳送類指令 2.4.5 算術運算類指令 2.4.6 邏輯運算和移位指令 2.4.7 串操作類指令 2.4.8 控制轉移類指令,2-60,Pentium在其內部定點處理單元CPU和浮點處理單元FPU的支持下,共可處理7類數據:,1. 無符號二進制數 2. 帶符號的二進制定點整數 3. 浮點數 4. BCD碼數 5. 串數據 6. ASCII碼數據 7. 指針數據,2.4.1 基本數據類型,2-61,2.4.1 基本數據類型,這類數不帶任何符號信息,只含有量值域,僅CPU支持。分為三類:, 字節(jié): 字: 雙字:,任何邏輯地址上的8位相鄰位串。,任何字節(jié)地址開始的2個相鄰字節(jié)。低字節(jié)地址為該字地址。,任何字節(jié)地址開始的2個相鄰字,即4個相鄰字節(jié)。最小字節(jié)地址為雙字的地址。,1.無符號二進制數(序數),2-62,這類數均以補碼表示,有8位數(字節(jié))、16位數(字)、32位數(雙字)、64位數(4字)四種。,CPU支持前3種,FPU支持后3種。,2.4.1 基本數據類型,2.帶符號的二進制定點整數(整數),2-63,2.4.1 基本數據類型,這類數由FPU支持,有單精度、雙精度和擴展精度三種形式:, 單精度數, 雙精度數, 擴展精度數,3.浮點數(實數),2-64,BCD碼數有壓縮BCD碼數和非壓縮BCD碼數兩種。 CPU兩種數都支持;FPU只支持壓縮BCD碼數,且最大長度為80位,最多可處理20位BCD碼數。,2.4.1 基本數據類型,5.串數據,這類數據僅CPU支持。包括: 位串: 字節(jié)/字/雙字串:,是從任何字節(jié)的任何位開始的相鄰位的序列,最長可達232-1位。,是字節(jié)/字/雙字的相鄰序列,最長可達232-1字節(jié)。,4.BCD碼數,2-65,2.4.1 基本數據類型,包括ASCII碼字符串和ASCII碼數(0F)兩種。,7.指針數據,包括近指針和遠指針兩種:,近指針即32位指針,是一個32位的段內偏移量,段內尋址用。 遠指針即48位指針,由16位選擇符和32位偏移量組成,用于跨段訪問。,6.ASCII碼數據,2-66,關于數據類型的兩點說明:,(1)在上述各類型數據中,基本的數據類型仍是字節(jié)、字和雙字。一般應盡可能將字操作對準于偶地址,將雙字操作對準于4的整數倍地址。但也允許不對準操作,以便在數據結構的處理上和存儲器的有效利用上給系統設計人員和用戶提供最大的靈活性。不過,對準和不對準獲得的數據傳遞速度不一樣:對準的字和雙字可一次傳遞完,而未對準的字和雙字需幾次才能傳遞完。 (2)對于字和雙字數據,80X86是采用低端低地址方式來存儲的。即字數據被存儲在兩個相鄰的字節(jié)單元之中,低位字節(jié)在低地址單元,高位字節(jié)在高地址單元;雙字數據存儲在四個連續(xù)字節(jié)單元中,最低位字節(jié)在最低地址單元,最高字節(jié)在最高地址單元。而字或雙字數據的地址是指最低位字節(jié)所在的單元地址。,2.4.1 基本數據類型,2-67,2.4.2 操作數尋址方式,1. 尋址方式和有效地址概念 2. 11種尋址方式 3. 存儲器尋址時的段約定 4. 應用舉例,2-68,2.4.2 尋址方式,尋址方式就是尋找指令中操作數地址的方式。操作數所在地址有三種可能:,直接包含在指令中,即指令的操作數部分就是操作 數本身。這種操作數叫立即數,對應的指令尋址方 式稱為立即數尋址。,包含在CPU 的某個內部寄存器中。這時指令中的操 作數部分是CPU的一個寄存器,這種指令尋址方式稱 為寄存器尋址。,在內存儲器中。這時指令的操作數部分包含著該操 作數所在的內存地址。這種指令尋址方式稱為存儲 器尋址。,1.尋址方式和有效地址概念, 尋址方式,2-69,在Pentium系列MPU中,內存實際地址(PA)由段基地址和段內偏移地址兩部分組成。 段內偏移地址可由以下幾部分組合而成:,基址寄存器內容 變址寄存器內容 比例因子 位移量,這四個基本部分稱為偏移地址四元素,一般又將由這四種元素組合形成的偏移地址稱為有效地址EA。,EA=基址+(變址比例因子)+位移量, 有效地址EA,2.4.2 尋址方式,2-70,2.4.2 尋址方式,16位和32位尋址時的四元素定義,2-71, 保護方式下的尋址過程(地址轉換過程),2.4.2 尋址方式,2-72,2.4.2 尋址方式,偏移地址四元素可優(yōu)化組合出9種存儲器尋址方式,加上立即數尋址和寄存器尋址,Pentium共有11種尋址方式:,(1) 立即數尋址 (2) 寄存器尋址 (3) 直接尋址 (4) 寄存器間接尋址 (5) 基址尋址,(6) 變址尋址 (7) 比例變址尋址 (8) 基址加變址尋址 (9) 基址加比例變址尋址 (10)帶位移的基址加變址尋址 (11)帶位移的基址加比例變址尋址,2. 11種尋址方式,2-73,2.4.2 尋址方式,在這種尋址方式下,操作數作為立即數直接存在指令中,可為8位、16位或32位。,MOV AX,4567H MOV BL,78H MOV ECX,12345678H,(1)立即數尋址,動畫演示,2-74,2.4.2 尋址方式,在這種方式下,操作數包含在指令規(guī)定的8位、16位或32位寄存器中。,這種尋址方式指令編碼短,無需從存儲器取操作數,故執(zhí)行速度快。,(2)寄存器尋址(寄存器直接尋址),2-75,2.4.2 尋址方式,在這種方式下,指令中的操作數部分直接給出操作數有效地址EA,它和操作碼一起放在存儲器代碼段中,可以是16位或32位整數。但操作數一般在數據段DS中。,例: MOV AX,DS:3000H,將DS段中3000H和3OO1H單元的內容送到AX中。假設DS=5000H,則此指令是將物理地址為53000H單元的內容送到AL寄存器,將53001H單元的內容送到AH寄存器,直接尋址方式的執(zhí)行過程動畫演示。,(3)直接尋址(存儲器直接尋址),2-76,2.4.2 尋址方式,實際中對于直接尋址,如操作數在DS段中,則可直接寫成:,MOV AX,3000H,如操作數在DS之外的其他段(CS,SS,ES,FS,GS)中,指令中則必須用段寄存器名前綴(稱為段超越前綴)予以指明。,MOV AX,FS:3000H,直接尋址主要用于單個操作數的相對尋址場合(如簡單的標量操作數尋址和靜態(tài)分配數組的起始地址尋址等)。,2-77,2.4.2 尋址方式,在這種方式下,操作數放在存儲器中,但其有效地址EA放在寄存器中,即: EA=寄存器 寄存器的使用規(guī)定在16位尋址和32位尋址時不一樣。,(4)寄存器間接尋址,2-78,2.4.2 尋址方式,若以SI、DI、BX間接尋址,則默認操作數在DS段中。 MOV AX,SI ;默認DS為段基址 若以BP間接尋址,則默認操作數在SS段中。 MOV AX,BP ;默認SS為段基址 動畫演示,如果操作數不在上述規(guī)定的默認段,而是在其他段,則必須在指令中相應的操作數前加上段超越前綴。,MOV AX,ES:SI MOV AX,DS:BP, 16位尋址時,偏移地址放在SI、DI、BP或BX中。兩種段默認情況:,2-79,2.4.2 尋址方式,MOV EBX,EAX ;默認DS為段基址,傳送雙字給EBX MOV DX,EBX ;默認DS為段基址,傳送字給DX MOV CH,EAX ;默認DS為段基址,傳送字節(jié)給CH,除ESP、EBP默認段寄存器為SS外,其余6個通用寄存器均默認段寄存器為DS。如操作數在默認段之外,指令中必須加段超越前綴。,寄存器間接尋址的應用場合與直接尋址的應用場合相似,但更靈活。,32位尋址時,8個32位通用寄存器均可作寄存器間接尋址。,2-80,2.4.2 尋址方式,EA=基址寄存器+位移量。 其中位移量一定要為常數,且跟隨在操作碼之后,與操作碼一起存放在代碼段中。,16位尋址情況下,BX和BP作為基址寄存器。在缺省段超越前綴時,BX以DS作為默認段寄存器,BP以SS作為默認段寄存器。位移量可為8位或16位; 32位尋址情況下,8個32位通用寄存器均可作基址寄存器,其中ESP、EBP以SS為默認段寄存器,其余6個通用寄存器均以DS為默認段寄存器。位移量為8位或32位。,MOV EAX,BX+24 ;也可寫成MOV EAX,24BX MOV ECX,EBP+50 ;也可寫成MOV ECX,50EBP MOV DX,EAX+1500H;也可寫成MOV DX,1500HEAX,(5)基址尋址,2-81,2.4.2 尋址方式,EA=變址寄存器+位移量 指令書寫格式和尋址執(zhí)行過程與基址尋址相同,區(qū)別僅在于將基址寄存器改成變址寄存器。,(6)變址尋址,2-82,2.4.2 尋址方式,MOV AX,COUNTSI,MOV EAX,5EBP MOV ECX,DATAEAX,基址、變址尋址適于對一維數組的數組元素進行檢索操作。位移量表示數組起始地址偏移量;基址/變址表示數組元素的下標,可變。, 16位尋址時,僅SI、DI可作變址寄存器,且默認DS作為段基址寄存器。, 32位尋址時,除ESP外的任何通用寄存器均可作變址寄存器,且默認EBP以SS作段基址寄存器,其余均以DS作段基址寄存器。,2-83,2.4.2 尋址方式,EA=變址寄存器比例因子+位移量,這種尋址方式只適于32位尋址一種情況。,MOV EAX,TABLEESI*4 ;TABLE是位移量,4是比例因子,比例變址尋址和基址/變址尋址的作用相似,也適用于對一維數組元素的檢索。但當數組元素大小為2/4/8字節(jié)時,用它更方便、更高效。,(7)比例變址尋址,2-84,2.4.2 尋址方式,EA=基址寄存器+變址寄存器,MOV AX,BX+SI ;或寫成MOV AX,BXSI 動畫演示,它有16位尋址和32位尋址兩種情況,每種情況下基址、變址寄存器的使用規(guī)定和段寄存器的默認規(guī)定與前面所述相同,但一種尋址方式中既有基址寄存器又有變址寄存器,而兩個寄存器默認的段寄存器又不相同時,一般規(guī)定由基址寄存器來決定默認哪一個段寄存器作段基址指針。,基址加變址尋址主要用于二維數組元素的檢索和二重循環(huán)等。,(8)基址加變址尋址,2-85,2.4.2 尋址方式,EA=變址寄存器比例因子+基址寄存器,它只有32位尋址一種情況。,MOV ECX,EDX*8EAX ;或MOV ECX,EDX*8+EAX MOV AX,EBX*4ESI ;或MOV AX,EBX*4+ESI,這種方式主要用于數組元素大小為2/4/8字節(jié)時的二維數組檢索操作等場合。,(9)基址加比例變址尋址,2-86,2.4.2 尋址方式,在這種方式下:,EA=變址寄存器+基址寄存器+位移量,這種方式也分16位尋址和32位尋址兩種情況。變址、基址寄存器的使用約定和對段寄存器的默認約定與前面所述相同。,MOV AX,BX+DI+MASK 或 MOVAX,MASKBXDI ADD EDX,ESIEBP+0FFFF000H 或 ADD EDX,0FFFF000HESIEBP,這種尋址方式也是主要用于二維數組操作,位移量即為數組起始地址。,(10)帶位移的基址加變址尋址,動畫演示,2-87,2.4.2 尋址方式,EA=變址寄存器比例因子+基址寄存器+位移量,它只有32位尋址一種情況。各種約定和默認情況同前所述。,INC EDI*8ECX+40 ;或INC EDI*8+ECX+40,當二維數組的數組元素大小為2/4/8字節(jié),且數組起始地址不為0時,適于用這種尋址方式進行數組檢索操作。,(11)帶位移的基址加比例變址尋址,2-88,2.4.2 尋址方式,3.存儲器尋址時的段約定,2-89,4.應用舉例,例2.1 已知Pentium工作在實地址方式下,其中一些寄存器的內容和一些存儲單元的內容如圖所示,試指出下列各條指令執(zhí)行后,AX中的內容。, MOV AX,2010H, MOV AX,BX, MOV AX,1200H, MOV AX,BX, MOV AX,1100HBX, MOV AX,BXSI, MOV AX,1100HBX+SI, LEA AX,SI,2.4.2 尋址方式,2-90,2.4.2 尋址方式,例2.2 假定Pentium工作在實地址方式下,已知:(DS)=1000H,(SS)=2000H,(SI)=007FH,(BX)=0040H,(BP)=0016H,變量TABLE的偏移地址為0100H。請指出下列指令的源操作數字段是什么尋址方式?它的有效地址(EA)和物理地址(PA)分別是多少?, MOV AX,1234H MOV AX,TABLE MOV AX,BX+100H MOV AX,TABLEBPSI,2-91,Pentium的指令系統是在80X86系列指令系統的基礎上逐步發(fā)展而形成的,在代碼級具有向上兼容性。它增加了指令的種類,增強了一些指令的功能,提供了32位尋址方式和32位操作方式,并且包含全部浮點運算指令。 Pentium指令的操作數可以是03個,根據尋址方式不同,可直接包含在指令中,也可存于寄存器或存儲器中。每條指令的長度因指令而異,平均指令長度為3.2字節(jié)。指令的操作數寬度可以是8位、16位、32位,尋址寬度可以是16位或32位。 Pentium指令系統的突出特點是:功能強、靈活性高,給編譯程序和匯編語言程序的設計人提供了很寬的選擇余地。,2.4.3 Pentium指令系統概貌,2-92,1. 指令格式,2.4.3 Pentium指令系統概貌,2-93,Pentium指令系統分為:,整數指令-最常用部分 浮點數指令 操作系統型指令,2. 指令分類,2.4.3 Pentium指令系統概貌,2-94,數據傳送是計算機中最基本、最常用、最重要的一類操作。如:,這類指令尋址方式最豐富,除POPF外,均不影響標志寄存器的標志位。,在實際程序中,它的使用頻率最高。, 各種初始化操作 取操作數 保存結果,2.4.4 數據傳送類指令,2-95,通用數據傳送指令。如數據傳送指令(MOV)、裝入有效地址指令(LEA) 、段裝入指令、交換類指令(XCHG和BSWAP)、查表轉換指令(XLAT)等。 堆棧指令。如PUSH類/POP類指令等。 數據類型變換指令。如數據寬度變換指令,帶符號數符號位擴展/無符號數位擴展指令等。 I/O指令。如IN類/OUT類指令等。 標志寄存器傳送指令,2.4.4 數據傳送類指令,數據傳送指令主要包括:,2-96,1. 傳送指令MOV,指令操作:(源操作數)目的操作數,指令格式:MOV 目的操作數,源操作數,尋址規(guī)定: REG/MEM/SREG,REG REG/MEM, SREG REG/SREG, MEM REG/MEM, IMM,2.4.4 數據傳送類指令,2-97,2.3.4 數據傳送類指令,2-98,MOV指令使用說明:,源操作數和目的操作數的類型必須一致。 目的操作數不能為立即數。 CS和(E)IP均不能用作指令的目的寄存器。 段寄存器間不能直接傳送,也不能直接將立即數送給段寄存器。 源操作數為立即數,而目的操作數類型不確定時,要給目的操作數加類型說明。,源操作數和目的操作數不能同為存儲器操作數。,2.4.4 數據傳送類指令,目的操作數, 源操作數 REG/MEM/SREG,REG REG/MEM, SREG REG/SREG, MEM REG/MEM, IMM,2-99, MOV DS,100, MOV 1000H,23H,錯。源、目的操作數不能同為存儲器尋址。, MOV 1000H,2000H,錯。立即數不能直接賦給段寄存器。,錯。目的操作數長度不確定。, MOV DATA,1133H, MOV CS,AX,依賴于DATA的定義,錯。不能用傳送指令改變代碼段寄存器。, MOV AX,0100H+BX+BP,錯。地址寄存器不能同為基址寄存器。,例2.3 識別下列指令的正確性,對錯誤的指令,說明錯誤的原因。,MOV AX,100 MOV DS,AX,MOV WORD PTR 1000H,23H,MOV AX,2000H MOV 1000H,AX,2.3.4 數據傳送類指令,2-100,2. 交換指令,操作: (目的操作數) (源操作數),格式:XCHG 目的操作數,源操作數 REG/MEM, REG REG, MEM,說明: 基本用法同MOV指令; 當源或目的操作數為MEM操作數時,會自動 激活LOCK信號,該特性常用于多機、多任務 或多用戶系統中的臨界段(共享資源)訪問。,2.4.4 數據傳送類指令,2-101,例2.4 臨界段訪問(測試與置位操作),TEST_SET:MOV AL,0FFH XCHG AL,SEMAPHORE ;讀信號燈并置位 AND AL,AL ;產生條件碼 JNZ TEST_SET ;忙時等待 (臨界段程序) MOV AL,0 MOV SEMAPHORE,AL ;清信號燈,2.4.4 數據傳送類指令,2-102,說明: XLAT是一條隱含尋址的指令。隱含兩個操作數:DS:(E)BX存放表基址,AL存放查表參數。使用前要給隱含操作數賦初值。,3. 查表指令,格式: XLAT 操作: (EBX)+(AL)AL (BX)+(AL)AL,2.4.4 數據傳送類指令,2-103,例2.5 內存中自TABLE開始的16個單元連續(xù)存放著自然數0到15的平方值(構成一個平方表),任給一整數M在XX單元中(該數為0M15),查表求M的平方值,并將結果存入YY單元中。,解: LEA BX,TABLE MOV AL,XX XLAT MOV YY,AL,2.4.4 數據傳送類指令,2-104,4. 堆棧指令PUSH/POP,格式:PUSH 源操作數 REG16/MEM16/IMM16/SREG REG32/MEM32/IMM32/SREG 操作: (E)SP)-2/4(E)SP (源操作數)(SS:(E)SP),(1) 壓棧指令,2.4.4 數據傳送類指令,2-105,格式:POP 目的操作數 MEM16/MEM32/REG16/REG32/SREG 操作:(SS:(E)SP)目的操作數 (E)SP)+ 2/4(E)SP,(2) 彈棧指令,2.4.4 數據傳送類指令,2-106,堆棧指令的操作數只能為字或雙字。 PUSH和POP要成對出現,以保持堆棧平衡 堆棧指令也隱含了一個目的/源操作數堆棧。 壓棧順序是先壓高字節(jié)后壓低字節(jié),彈棧則是先彈低字節(jié)后彈高字節(jié)。,(3)堆棧指令使用說明:,2.4.4 數據傳送類指令,2-107,例2.6 用堆棧操作指令將BX和CX中的兩個16位數(其中BX是高16位)組成32位數傳送到EAX寄存器中。,PUSH BX ;先壓高16位 PUSH CX ;后壓低16位 POP EAX,解:,2.4.4 數據傳送類指令,2-108,說明:I/O端口有兩種尋址方式 直接尋址,尋址范圍為0255; 間接尋址,尋址范圍為0216-1。,(1) 輸入指令 格式:IN 累加器, 端口 AL/AX/EAX,IMM8 AL/AX/EAX,DX 操作: AL/AX/EAX(I/O端口),直接尋址: 指令給出的立即數是I/O端口地址,間接尋址: DX寄存器給出的是I/O端口地址,5. I/O指令,2.4.4 數據傳送類指令,2-109,(2) 輸出指令,格式:OUT 端口,累加器 IMM8, AL/AX/EAX DX , AL/AX/EAX 操作:(AL/AX/EAX)I/O端口,2.4.4 數據傳送類指令,2-110,例2.7 設程序在數據段中定義的數組如下: NAMES DB TOM DB 20 DB ROSE DB 30 DB KATE. DB 25 請指出下列指令是否正確,如正確,A累加器中的結果是多少?,6. 傳送指令應用舉例,2.4.4 數據傳送類指令,2-111,1. MOV BX, OFFSET NAMES MOV AL,BX+5,(AL)=NAMES+5=20,2. MOV AX, NAMES,錯,源與目的操作數類型不一致,3. MOV AX, WORD PTR NAMES+1,(AX)=NAMES+1=MO=4D4FH,4. MOV BX,6 MOV SI,5 MOV AX,NAMESBXSI,前兩條指令正確,第三條錯,源與目的操作數類型不一致,2.4.4 數據傳送類指令,2-112,5. MOV BX, 6*2 MOV SI,5 MOV AX,OFFSET NAMESBXSI INC AX,6. MOV BX, 6 MOV SI,5 LEA DI,NAMESBXSI MOV AL,DI,(DI)=NAMES偏移地址+(BX)+(SI) =NAMES偏移地址+11 (AL)=NAMES+11=K=4BH,前兩條指令正確,第三條錯,OFFSET只能取直接變量的偏移地址;第四條錯,非法尋址。,2.4.4 數據傳送類指令,2-113,例2.8 80486工作在實地址方式時,(DS)=091DH,(BX)=0024H,有關存儲器的內容如圖所示。求指令LES DI,32HBX執(zhí)行后的結果。,LES DI,32HBX,2.4.4 數據傳送類指令,2-114,這類指令支持加、減、乘、除四種基本算術運算,其操作對象可以是字節(jié)、字、雙字的無符號和有符號的二進制整數;也可以是無符號的壓縮/非壓縮BCD碼數;還支持符號擴展指令和十進制調整指令。 它的操作結果一般會影響標志寄存器中的狀態(tài)標志位,如ZF、CF、SF、OF、AF、PF等。,2.4.5 算術運算類指令,2-115,算術運算指令有:,雙操作數指令,如加、減、比較等。,單操作數指令,如增/減、整數變反、乘除法指令等。,無操作數指令,如十進制運算調整和符號位擴展等。,三操作數指令,如有符號整數乘法指令IMUL等。,2.4.5 算術運算類指令,2-116,1. 加法/減法指令,操作: ADD:(目的)+(源) 目的 SUB: (目的)-(源) 目的 ADC:(目的)+(源)+CF目的 SBB: (目的)-(源)-CF目的,2.4.5 算術運算類指令,2-117,加法/減法指令使用說明:,ADD/SUB指令用于單個字節(jié)/字/雙字數的加/減法運算; ADC/SBB指令則常用于多精度或多字節(jié)/多字/多雙字數的加/減法運算。 INC/DEC REG/MEM 與 ADD/SUB REG/MEM,1指令的異同:兩者都執(zhí)行加1/減1操作,但前者不影響進位,而后者影響。,2-118,解: 用8086指令 MOV AX,Y SUB X,AX ;低16位字數據相減 MOV AX,2Y SBB 2X,AX ;高16位字數據相減, 用80386/486指令 MOV EAX,DWORD PTR Y SUB DWORD PTR X,EAX,兩個32位雙字數據X、Y定義如下: X DW 1234H,5678H Y DW 3FEAH,A033H 請編寫計算X=XY的程序段(低位在前),例2.9,2.4.5 算術運算類指令,2-119,2. 整數變反指令(求補),格式: NEG 目的操作數 REG/MEM 操作: 0-(目的操作數) 目的操作數 應用: 常用于求負數的絕對值。,解: TEST AX,8000H ;測試符號位 JZ NEXT NEG AX NEXT:HLT,例2.10 求AX中存放的有符號數的絕對值。,2.4.5 算術運算類指令,2-120,3. 比較指令,格式: CMP 目的操作數,源操作數 REG, REG/MEM/IMM MEM, REG/IMM,CMP與SUB指令都執(zhí)行減法操作,但前者不因操作結果改變目標操作數值,而后者改變。,操作:(目的操作數)(源操作數),根據操作結果修改狀態(tài)標志,但不改變目標操作數值。,2.4.5 算術運算類指令,2-121,表2.8 狀態(tài)標志反映的兩數關系,2-122,乘法指令分為有符號數和無符號數乘法指令(IMUL/MUL)。 無符號數乘法指令只有單操作數格式一種; 有符號數乘法指令則有單操作數、雙操作數和三操作數三種格式。,4. 乘法指令,2.4.5 算術運算類指令,2-123,1) 單操作數乘法指令,格式:MUL/IMUL 源操作數 REG/MEM,操作:MUL和IMUL分別為有符號數和無符號數乘法指令,兩種指令除操作數類型不同外,操作完全相同:,字: (AX)(源操作數)DX:AX,雙字:(EAX)(源操作數)EDX:EAX,2.4.5 算術運算類指令,2-124,單操作數乘法指令的被乘數是隱含的(在AL/AX/EAX中),而結果長度一定是被乘數/乘數的二倍(在AX/DX:AX/EDX:EAX中)。 源操作數不能為立即數。 源操作數為存儲器操作數,且類型不能確定時,要顯式說明操作數類型。 要根據是有符號數還是無符號數,分別選用IMUL或MUL指令 指令執(zhí)行影響CF和OF標志,若指令執(zhí)行后,結果的高一半是有效數值位,則CF=OF=1,否則CF=OF=0。,乘法指令使用說明:,2.4.5 算術運算類指令,2-125,例2.11,解: MUL BL指令完成AL和BL中的兩個無符號數相乘:,AH含有效數字, OF=1、CF=1。,(AX)=0A8CH,12C,+ 96,若(AL)=96H,(BL)=12H,求分別執(zhí)行MUL BL和IMUL BL指令后的結果及OF、CF狀態(tài)。,2.4.5 算術運算類指令,2-126,AH含有效數字, OF=1、CF=1。,解: IMUL 執(zhí)行有符號數乘法,此時AL中的數是負數,真值為-6AH,即:,用補碼表示: (AX)= F88CH,(AX)= -774H,D4,+ 6A,2.4.5 算術運算類指令,2-127,格式: IMUL 目的操作數,源操作數 REG, REG/MEM/IMM 操作:(目的操作數)(源操作數)目的操作數,3)三操作數乘法指令 格式:IMUL 目的操作數,源操作數,立即數 REG, REG/MEM, IMM 操作:(源操作數)(立即數)目的操作數,2) 雙操作數乘法指令,2.4.5 算術運算類指令,2-128,5. 除法指令,格式:D

溫馨提示

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

評論

0/150

提交評論