微處理器與指令系統(tǒng).ppt
《微處理器與指令系統(tǒng).ppt》由會員分享,可在線閱讀,更多相關(guān)《微處理器與指令系統(tǒng).ppt(138頁珍藏版)》請在裝配圖網(wǎng)上搜索。
2-1,第二章微處理器和指令系統(tǒng),2.1Intel系列微處理器概述2.28086/8088微處理器2.3Pentium微處理器2.4Pentium微處理器指令系統(tǒng),2-2,2.1.1Intel8086/8088微處理器2.1.2Intel80486微處理器2.1.3Pentium微處理器(80586)2.1.4PentiumPro微處理器2.1.5PentiumⅡ微處理器2.1.6PentiumⅢ微處理器2.1.7Pentium4微處理器,2.1Intel系列微處理器概述,2-3,2.1.1Intel8086/8088微處理器,8086是1978年推出的全16位微處理器,8088是1979年推出的準(zhǔn)16位微處理器。二者除外數(shù)據(jù)總線位數(shù)(8086為16位,8088為8位)及與此相關(guān)的部分邏輯稍有差別外,內(nèi)部結(jié)構(gòu)和基本性能相同(地址總線20位),指令系統(tǒng)完全兼容。,在8086/8088的設(shè)計中,引入了兩個重要的結(jié)構(gòu)概念:?指令流水線?存儲器分段,這兩個概念在以后升級的Intel系列微處理器中一直被沿用和發(fā)展。正是這兩個概念的引入,使8086/8088比原來的8位MPU在運行速度、處理能力和對存儲空間的訪問等性能方面有很大提高。,2-4,2.1.280486微處理器,1.內(nèi)部寄存器的容量都擴充到了32位或以上,具有全32位數(shù)據(jù)處理能力,并可進行64位的數(shù)據(jù)運算。2.片內(nèi)存儲管理部件可實現(xiàn)段頁式存儲管理,比80286可提供更大的虛擬存儲空間和物理存儲空間。3.新增了一種保護模式下的工作方式,即虛擬8086方式。4.指令流水線增加到了6級。5.提供了32位外部總線接口,最大數(shù)據(jù)傳輸速率顯著提高。,80486是繼80386之后推出的第二代32位高性能微處理器,它以提高性能和面向多處理器系統(tǒng)為主要目標(biāo)。80486繼承了80386的各種優(yōu)點,表現(xiàn)在以下幾方面:,2-5,1.片內(nèi)集成了一個浮點運算單元FPU。2.內(nèi)含一個8KB的數(shù)據(jù)與指令合用的Cache。3.采用RISC技術(shù)。使芯片內(nèi)的不規(guī)則控制部分減少,同時常用基本指令采用硬件邏輯控制執(zhí)行,使基本指令可以用一個時鐘周期完成。4.采用一種突發(fā)總線(BurstBus)的技術(shù)。使取得一個地址后,與該地址相關(guān)的一組數(shù)據(jù)可以連續(xù)輸入/輸出,有效地解決了微處理器同內(nèi)存儲器之間的數(shù)據(jù)交換問題。5.面向多處理器結(jié)構(gòu),增加了支持多機操作的指令。,2.1.280486微處理器,除以上80386、80486共有的特點之外,80486也采用了許多新技術(shù):,2-6,2.1.3Pentium微處理器(80586),,1.采用超標(biāo)量體系結(jié)構(gòu)。2.內(nèi)置的浮點運算部件采用超流水線技術(shù)。3.增加了分支指令預(yù)測。4.內(nèi)置了指令和數(shù)據(jù)兩個獨立的超高速緩存器,避免了預(yù)取指令和數(shù)據(jù)可能發(fā)生的沖突。,Pentium是一種高性能的32位微處理器。其對80486作了下列重大改進:,2-7,5.采用64位外部數(shù)據(jù)總線。6.引入了大型機中采用的內(nèi)部錯誤檢測、功能冗余檢驗和錯誤報告等自診斷功能。7.進行了更多的可測性設(shè)計。8.提供了獨特的性能監(jiān)察功能,以利于軟、硬件產(chǎn)品的優(yōu)化和升級。9.提供了靈活的存儲器頁面管理。,2.1.3Pentium微處理器(80586),2-8,精簡指令集技術(shù)。二級緩沖結(jié)構(gòu)。亂序執(zhí)行和預(yù)測執(zhí)行技術(shù)。三級超標(biāo)量和14級超流水線結(jié)構(gòu)。寄存器重命名技術(shù),2.1.4PentiumPro微處理器,簡稱P6,中文名為“高能奔騰”。在體系結(jié)構(gòu)中采用了許多新的思想和新的技術(shù):,2-9,2.1.5PentiumⅡ微處理器,,P6級微處理器的第二代產(chǎn)品,從系統(tǒng)結(jié)構(gòu)角度看,主要采用了以下幾種先進技術(shù):,采用了由三種創(chuàng)新處理技巧結(jié)合的動態(tài)執(zhí)行技術(shù),即:多分支預(yù)測、數(shù)據(jù)流分析和推測執(zhí)行。雙重獨立總線技術(shù)(DIB,DualIndependentBus),■多媒體增強技術(shù)(MMX技術(shù))?采用單指令流多數(shù)據(jù)流SIMD技術(shù)?新增加了57條功能強大的MMX指令,2-10,2.1.6PentiumⅢ微處理器,,PentiumⅢ是第三代P6級微處理器產(chǎn)品。與PentiumⅡ相比,有如下改進:,前端總線的時鐘頻率為100MHz(采用0.18μm新工藝的PentiumⅢ,其前端總線達到133MHz)。,將256KB的L2Cache集成到了芯片內(nèi)。增加了70條流式單指令多數(shù)據(jù)擴展SSE指令。首次設(shè)置了處理器序列號PSN。,2-11,2.1.7Pentium4微處理器,,1.采用了超級管道技術(shù),使用長達20級的分支預(yù)測/恢復(fù)管道,而P6只有10級。2.它的簡單算術(shù)邏輯單元(ALU)采用2倍的處理器核心頻率運行。3.動態(tài)執(zhí)行技術(shù)中的指令池能容下126條指令。4.內(nèi)含一個4KB的分支目標(biāo)緩沖。5.增加了由144條新指令組成的SSE2。,它是第一個非P6核心結(jié)構(gòu)的全新32位微處理器,與P6級微處理器相比,主要結(jié)構(gòu)特點如下:,2-12,2.2Intel8086/8088微處理器,內(nèi)部結(jié)構(gòu)指令流水線存儲器分段,8086是全16位微處理器,8088是準(zhǔn)16位微處理器。二者除了外數(shù)據(jù)總線位數(shù)及與此相關(guān)的部分邏輯稍有差別外,內(nèi)部結(jié)構(gòu)和基本性能相同,指令系統(tǒng)完全兼容。,2-13,1.內(nèi)部結(jié)構(gòu),2.2Intel8086/8088微處理器,,段寄存器,2-14,這種流水線操作并沒有減少每條指令的執(zhí)行步驟與時間,但由于各指令的不同步驟之間并行執(zhí)行,從而極大地提高了指令流(程序)的執(zhí)行速度。,流水線操作的優(yōu)點:指令隊列的存在使EU和BIU并行工作,取指令和分析、執(zhí)行指令操作可重疊進行,形成了兩級指令流水線結(jié)構(gòu),減少了CPU等待時間,提高了CPU的利用率,加快了整機運行速度,降低了對存儲器存取速度的要求。,2.指令流水線,2.2Intel8086/8088微處理器,2-15,將1MB的物理存儲空間分成若干個邏輯段,每段大小為64KB。,段的起始單元地址叫段基址,存放在段寄存器中。通過4個段寄存器,CPU每次可同時對4個段進行尋址。,3.存儲器分段,2.2Intel8086/8088微處理器,2-16,分段方式不唯一,各段之間可以連續(xù)、分離、部分重疊或完全重疊,這主要取決于對各個段寄存器的預(yù)置內(nèi)容。,2.2Intel8086/8088微處理器,?存儲器分段結(jié)構(gòu)示例,2-17,物理地址是1MB存儲空間中的某一單元地址,用20位地址碼表示,CPU訪問存儲器時,地址總線上送出的就是物理地址。邏輯地址在編程時采用,由段基址和偏移地址組成,兩者均為16位。,?物理地址和邏輯地址,2.2Intel8086/8088微處理器,2-18,邏輯地址與20位物理地址的變換關(guān)系:物理地址=段基址16+偏移地址,?邏輯地址與物理地址的變換,2.2Intel8086/8088微處理器,2-19,2.3Pentium微處理器,2.3.1內(nèi)部結(jié)構(gòu)與外部引腳2.3.2內(nèi)部寄存器2.3.3Pentium的四種工作方式,2-20,Pentium在結(jié)構(gòu)上由如下功能部件組成:?整數(shù)執(zhí)行單元?浮點單元?指令Cache和數(shù)據(jù)Cache?指令預(yù)取單元?指令譯碼單元?地址轉(zhuǎn)換與管理單元?總線接口單元?控制單元這些功能部件除地址轉(zhuǎn)換與管理單元與80386/80486保持兼容外,其他都進行了重新設(shè)計。,2.3.1內(nèi)部結(jié)構(gòu)和外部引腳,2-21,1.內(nèi)部結(jié)構(gòu),2.2.1內(nèi)部結(jié)構(gòu)和外部引腳,1)總線接口單元主要用于管理訪問外部存儲器和I/O端口必須的地址、數(shù)據(jù)和控制總線,完成預(yù)取指令、讀/寫數(shù)據(jù)等總線操作。,3)預(yù)取緩沖單元預(yù)取緩沖單元在總線接口單元空閑時,負(fù)責(zé)提前去內(nèi)存或指令Cache預(yù)取指令。其指令預(yù)取緩沖器在前一條指令執(zhí)行結(jié)束之前可以預(yù)取多達94個字節(jié)的指令代碼。,4)指令譯碼單元將預(yù)取的指令譯成Pentium可以執(zhí)行的控制信號并送控制單元。對絕大多數(shù)指令來說,Pentium微處理器可以做到每個時鐘周期以并行方式完成兩條指令的譯碼操作。,5)控制單元負(fù)責(zé)解釋來自指令譯碼單元的指令字和控制ROM的微代碼??刂撇考妮敵鲋苯涌刂苾蓷l指令流水線和浮點單元。,6)地址轉(zhuǎn)換與存儲管理單元Pentium的地址轉(zhuǎn)換與存儲管理單元與80386/80486保持完全兼容,由分段和分頁部件組成。Pentium除繼續(xù)支持4KB大小的頁面外,還允許使用高達4MB的頁面,從而減少了頁面切換的頻率,并加快了某些應(yīng)用程序的執(zhí)行。,8)浮點運算單元,2-22,2.Pentium的外部引腳,2-23,基本寄存器系統(tǒng)級寄存器調(diào)試和模型專用寄存器浮點寄存器,Pentium的內(nèi)部寄存器,按功能可分為4類:,2.3.2Pentium內(nèi)部寄存器,2-24,2.3.2Pentium內(nèi)部寄存器,1.基本寄存器,EIP用于保存下一條待預(yù)取指令相對于代碼基址的偏移量。它的低16位也可單獨訪問,稱之為IP。,2-25,?標(biāo)志寄存器位定義,2.3.2Pentium內(nèi)部寄存器,2-26,?段寄存器,Pentium有6個段寄存器:,2.3.2Pentium內(nèi)部寄存器,編程者可直接訪問的,編程者不能訪問的,程序中(或系統(tǒng))裝入段選擇器的也不再是直接的段基址,而是一個指向某個段描述符的16位的段選擇符。,2-27,實地址方式和虛擬8086方式下相同,段的長度固定為64KB,段選擇器就是段寄存器,它保存的是邏輯段基址的高16位,將它的內(nèi)容左移4位即可得到實際段基址,而不必使用描述符高速緩存器。,在保護虛地址方式下,段的長度可以在1字節(jié)到4G字節(jié)之間變化;為了描述每個段的基址、屬性和邊界,為每個段定義了一個描述符。操作系統(tǒng)使用的和各任務(wù)公用的段描述符放在一起構(gòu)成全局描述符表GDT;某個任務(wù)專用的段描述符放在一起構(gòu)成局部描述符表LDT。,Pentium段的定義與8086有所不同:,2.3.2Pentium內(nèi)部寄存器,段的類型存儲段:代碼段、數(shù)據(jù)段和堆棧段.系統(tǒng)段:局部描述符表(LDT)段和任務(wù)狀態(tài)段(TSS).門:調(diào)用門、中斷門、陷進門和任務(wù)門門是保護模式新增加的。門并不是段,但是,由它可以通向一個程序的入口或一個任務(wù)的入口,而程序在存儲器中表現(xiàn)為代碼段,因此,門與代碼段有關(guān),也把它劃歸到系統(tǒng)段這一類。,一、32位微型計算機接口技術(shù)及應(yīng)用劉樂善華中科技大學(xué)出版社2006.12二、三級偏硬考試教程江正戰(zhàn)東南大學(xué)出版社2004.6,2-28,?描述符與描述符表,2.3.2Pentium內(nèi)部寄存器,2-29,?段的的選擇符,為了說明一個段的描述符在哪個表中,表的序號是多少以及特權(quán)的高低,為每個段定義了一個16位的選擇符,存于段選擇器中,其格式為:,2.3.2Pentium內(nèi)部寄存器,2-30,,將一個選擇符裝入一個段選擇器時,處理器將自動從GDT或LDT中找到其對應(yīng)的描述符裝入相應(yīng)描述符高速緩存器中。,2.3.2Pentium內(nèi)部寄存器,以后,每當(dāng)訪問存儲器時,與所用段相關(guān)的段描述符高速緩沖器就自動參與該次存儲器訪問操作。轉(zhuǎn)換關(guān)系:線性地址=段描述符高速緩存器中段基址+偏移地址,圖2.11和2.15,2-31,Pentium微處理器中包含一組系統(tǒng)級寄存器:即5個控制寄存器CR0~CR4和4個系統(tǒng)地址寄存器。這些寄存器只能由在特權(quán)級0上運行的程序(一般是操作系統(tǒng))訪問。,2.2.2Pentium內(nèi)部寄存器,①控制寄存器,Pentium在80486控制寄存器CR0~CR3的基礎(chǔ)上新增了一個控制寄存器CR4,這些寄存器用來存放全局特性的機器狀態(tài)和實現(xiàn)對80X86/Pentium微處理器的多種功能的控制與選擇。,2.系統(tǒng)級寄存器,2-32,2.3.2Pentium內(nèi)部寄存器,CR0,CR4,CR3,CR2,CR1,?控制寄存器格式:,2-33,②系統(tǒng)地址寄存器,2.3.2Pentium的內(nèi)部寄存器,系統(tǒng)地址寄存器,其中GDTR和LDTR分別用來存放GDT和LDT的32位線性基地址等內(nèi)容;IDTR用來存放中斷描述符表的基址和界限;TR用來存放任務(wù)狀態(tài)段(TSS)的基址、界限和其他屬性。,只在保護方式下使用,所以又叫保護方式寄存器。用于把在保護方式下常用的數(shù)據(jù)基地址、界限和其他屬性保存起來,以確保其快速性。,2-34,Pentium處理器中提供了一組調(diào)試寄存器和一組模型專用寄存器,用于排除故障和用于執(zhí)行跟蹤、性能監(jiān)測、測試及機器檢查錯誤。,2.3.2Pentium的內(nèi)部寄存器,3.調(diào)試和模型專用寄存器,2-35,Pentium處理器取消了80386/80486中的測試寄存器TR,其功能由一組“模型專用寄存器”MSR(ModelSpecialRegister)來實現(xiàn),這一組MSR用于執(zhí)行跟蹤、性能監(jiān)測、測試和機器檢查錯誤。Pentium處理器采用兩條指令RDMSR(讀MSR)和WRMSR(寫MSR)來訪問這些寄存器,ECX中的值(8位值)確定將訪問該組寄存器中哪一個MSR。,2.3.2Pentium的內(nèi)部寄存器,(2)模型專用寄存器,2-36,2.3.3Pentium的四種工作方式,2-37,2.4Pentium微處理器指令系統(tǒng),2.4.1基本數(shù)據(jù)類型2.4.2操作數(shù)尋址方式2.4.3Pentium指令系統(tǒng)概貌2.4.4數(shù)據(jù)傳送類指令2.4.5算術(shù)運算類指令2.4.6邏輯運算和移位指令2.4.7串操作類指令2.4.8控制轉(zhuǎn)移類指令,2-38,Pentium在其內(nèi)部定點處理單元CPU和浮點處理單元FPU的支持下,共可處理7類數(shù)據(jù):,1.無符號二進制數(shù)2.帶符號的二進制定點整數(shù)3.浮點數(shù)4.BCD碼數(shù)5.串?dāng)?shù)據(jù)6.ASCII碼數(shù)據(jù)7.指針數(shù)據(jù),2.4.1基本數(shù)據(jù)類型,2-39,2.4.1基本數(shù)據(jù)類型,這類數(shù)不帶任何符號信息,只含有量值域,僅CPU支持。分為三類:,?字節(jié):?字:?雙字:,任何邏輯地址上的8位相鄰位串。,任何字節(jié)地址開始的2個相鄰字節(jié)。低字節(jié)地址為該字地址。,任何字節(jié)地址開始的2個相鄰字,即4個相鄰字節(jié)。最小字節(jié)地址為雙字的地址。,1.無符號二進制數(shù)(序數(shù)),2-40,這類數(shù)均以補碼表示,有8位數(shù)(字節(jié))、16位數(shù)(字)、32位數(shù)(雙字)、64位數(shù)(4字)四種。,CPU支持前3種,F(xiàn)PU支持后3種。,2.4.1基本數(shù)據(jù)類型,2.帶符號的二進制定點整數(shù)(整數(shù)),2-41,2.4.1基本數(shù)據(jù)類型,這類數(shù)由FPU支持,有單精度、雙精度和擴展精度三種形式:,?單精度數(shù),?雙精度數(shù),?擴展精度數(shù),3.浮點數(shù)(實數(shù)),2-42,BCD碼數(shù)有壓縮BCD碼數(shù)和非壓縮BCD碼數(shù)兩種。CPU兩種數(shù)都支持;FPU只支持壓縮BCD碼數(shù),且最大長度為80位,最多可處理20位BCD碼數(shù)。,2.4.1基本數(shù)據(jù)類型,5.串?dāng)?shù)據(jù),這類數(shù)據(jù)僅CPU支持。包括:?位串:?字節(jié)/字/雙字串:,是從任何字節(jié)的任何位開始的相鄰位的序列,最長可達232-1位。,是字節(jié)/字/雙字的相鄰序列,最長可達232-1字節(jié)。,4.BCD碼數(shù),2-43,2.4.1基本數(shù)據(jù)類型,包括ASCII碼字符串和ASCII碼數(shù)(0~F)兩種。,7.指針數(shù)據(jù),包括近指針和遠指針兩種:,近指針即32位指針,是一個32位的段內(nèi)偏移量,段內(nèi)尋址用。遠指針即48位指針,由16位選擇符和32位偏移量組成,用于跨段訪問。,6.ASCII碼數(shù)據(jù),2-44,★關(guān)于數(shù)據(jù)類型的兩點說明:,(1)在上述各類型數(shù)據(jù)中,基本的數(shù)據(jù)類型仍是字節(jié)、字和雙字。一般應(yīng)盡可能將字操作對準(zhǔn)于偶地址,將雙字操作對準(zhǔn)于4的整數(shù)倍地址。但也允許不對準(zhǔn)操作,以便在數(shù)據(jù)結(jié)構(gòu)的處理上和存儲器的有效利用上給系統(tǒng)設(shè)計人員和用戶提供最大的靈活性。不過,對準(zhǔn)和不對準(zhǔn)獲得的數(shù)據(jù)傳遞速度不一樣:對準(zhǔn)的字和雙字可一次傳遞完,而未對準(zhǔn)的字和雙字需幾次才能傳遞完。(2)對于字和雙字?jǐn)?shù)據(jù),80X86是采用低端低地址方式來存儲的。即字?jǐn)?shù)據(jù)被存儲在兩個相鄰的字節(jié)單元之中,低位字節(jié)在低地址單元,高位字節(jié)在高地址單元;雙字?jǐn)?shù)據(jù)存儲在四個連續(xù)字節(jié)單元中,最低位字節(jié)在最低地址單元,最高字節(jié)在最高地址單元。而字或雙字?jǐn)?shù)據(jù)的地址是指最低位字節(jié)所在的單元地址。,2.4.1基本數(shù)據(jù)類型,2-45,2.4.2操作數(shù)尋址方式,1.尋址方式和有效地址概念2.11種尋址方式3.存儲器尋址時的段約定4.應(yīng)用舉例,2-46,2.4.2尋址方式,尋址方式就是尋找指令中操作數(shù)地址的方式。操作數(shù)所在地址有三種可能:,①直接包含在指令中,即指令的操作數(shù)部分就是操作數(shù)本身。這種操作數(shù)叫立即數(shù),對應(yīng)的指令尋址方式稱為立即數(shù)尋址。,②包含在CPU的某個內(nèi)部寄存器中。這時指令中的操作數(shù)部分是CPU的一個寄存器,這種指令尋址方式稱為寄存器尋址。,③在內(nèi)存儲器中。這時指令的操作數(shù)部分包含著該操作數(shù)所在的內(nèi)存地址。這種指令尋址方式稱為存儲器尋址。,1.尋址方式和有效地址概念,?尋址方式,2-47,在Pentium系列MPU中,內(nèi)存實際地址(PA)由段基地址和段內(nèi)偏移地址兩部分組成。為了適應(yīng)處理各種數(shù)據(jù)結(jié)構(gòu)的需要,段內(nèi)偏移地址可由以下幾部分組合而成:,基址寄存器內(nèi)容變址寄存器內(nèi)容比例因子位移量,這四個基本部分稱為偏移地址四元素,一般又將由這四種元素組合形成的偏移地址稱為有效地址EA。,EA=基址+(變址比例因子)+位移量,?有效地址EA,2.4.2尋址方式,2-48,2.4.2尋址方式,16位和32位尋址時的四元素定義,2-49,?保護方式下的尋址過程(地址轉(zhuǎn)換過程),2.4.2尋址方式,2-50,2.4.2尋址方式,偏移地址四元素可優(yōu)化組合出9種存儲器尋址方式,加上立即數(shù)尋址和寄存器尋址,Pentium共有11種尋址方式:,(1)立即數(shù)尋址(2)寄存器尋址(3)直接尋址(4)寄存器間接尋址(5)基址尋址,(6)變址尋址(7)比例變址尋址(8)基址加變址尋址(9)基址加比例變址尋址(10)帶位移的基址加變址尋址(11)帶位移的基址加比例變址尋址,2.11種尋址方式,2-51,2.4.2尋址方式,在這種尋址方式下,操作數(shù)作為立即數(shù)直接存在指令中,可為8位、16位或32位。,以第3條指令為例,給出了立即數(shù)尋址方式的執(zhí)行過程的動畫演示。,(1)立即數(shù)尋址,2-52,2.4.2尋址方式,在這種方式下,操作數(shù)包含在指令規(guī)定的8位、16位或32位寄存器中。,這種尋址方式指令編碼短,無需從存儲器取操作數(shù),故執(zhí)行速度快。,(2)寄存器尋址(寄存器直接尋址),2-53,2.4.2尋址方式,在這種方式下,指令中的操作數(shù)部分直接給出操作數(shù)有效地址EA,它和操作碼一起放在存儲器代碼段中,可以是16位或32位整數(shù)。但操作數(shù)一般在數(shù)據(jù)段DS中。,例:MOVAX,DS:[3000H],將DS段中3000H和3OO1H單元的內(nèi)容送到AX中。假設(shè)DS=5000H,則此指令是將物理地址為53000H單元的內(nèi)容送到AL寄存器,將53001H單元的內(nèi)容送到AH寄存器,詳情請看直接尋址方式的執(zhí)行過程的動畫演示。,(3)直接尋址(存儲器直接尋址),2-54,2.4.2尋址方式,實際中對于直接尋址,如操作數(shù)在DS段中,則可直接寫成:,MOVAX,[3000H],如操作數(shù)在DS之外的其他段(CS,SS,ES,FS,GS)中,指令中則必須用段寄存器名前綴(稱為段超越前綴)予以指明。例如:,MOVAX,FS:[3000H],直接尋址主要用于單個操作數(shù)的相對尋址場合(如簡單的標(biāo)量操作數(shù)尋址和靜態(tài)分配數(shù)組的起始地址尋址等)。,2-55,2.4.2尋址方式,在這種方式下,操作數(shù)放在存儲器中,但其有效地址EA放在寄存器中,即:EA=[寄存器]寄存器的使用規(guī)定在16位尋址和32位尋址時不一樣。,(4)寄存器間接尋址,2-56,2.4.2尋址方式,①16位尋址時,偏移地址放在SI、DI、BP或BX中。這時又有兩種段默認(rèn)情況:,若以SI、DI、BX間接尋址,則默認(rèn)操作數(shù)在DS段中。例如:MOVAX,[SI];默認(rèn)DS為段基址若以BP間接尋址,則默認(rèn)操作數(shù)在SS段中。例如:MOVAX,[BP];默認(rèn)SS為段基址動畫演示,如果操作數(shù)不在上述規(guī)定的默認(rèn)段,而是在其他段,則必須在指令中相應(yīng)的操作數(shù)前加上段超越前綴。例如:,MOVAX,ES:[SI]MOVAX,DS:[BP],2-57,2.4.2尋址方式,②32位尋址時,8個32位通用寄存器均可作寄存器間接尋址。例如:,MOVEBX,[EAX];默認(rèn)DS為段基址,傳送雙字給EBXMOVDX,[EBX];默認(rèn)DS為段基址,傳送字給DXMOVCH,[EAX];默認(rèn)DS為段基址,傳送字節(jié)給CH,除ESP、EBP默認(rèn)段寄存器為SS外,其余6個通用寄存器均默認(rèn)段寄存器為DS。如操作數(shù)在默認(rèn)段之外,指令中必須加段超越前綴。,寄存器間接尋址的應(yīng)用場合與直接尋址的應(yīng)用場合相似,當(dāng)更靈活。,2-58,2.4.2尋址方式,在這種方式下,EA=[基址寄存器]+位移量。其中位移量一定要為常數(shù),且跟隨在操作碼之后,與操作碼一起存放在代碼段中。,①16位尋址情況下,BX和BP作為基址寄存器。在缺省段超越前綴時,BX以DS作為默認(rèn)段寄存器,BP以SS作為默認(rèn)段寄存器。位移量可為8位或16位;②32位尋址情況下,8個32位通用寄存器均可作基址寄存器,其中ESP、EBP以SS為默認(rèn)段寄存器,其余6個通用寄存器均以DS為默認(rèn)段寄存器。位移量為8位或32位。,例如:動畫演示MOVEAX,[BX+24];也可寫成MOVEAX,24[BX]MOVECX,[EBP+50];也可寫成MOVECX,50[EBP]MOVDX,[EAX+1500H];也可寫成MOVDX,1500H[EAX],(5)基址尋址,2-59,2.4.2尋址方式,在這種方式下,EA=[變址寄存器]+位移量指令書寫格式和尋址執(zhí)行過程與基址尋址相同,區(qū)別僅在于將基址寄存器改成變址寄存器。,(6)變址尋址,2-60,2.4.2尋址方式,①16位尋址時,僅SI、DI可作變址寄存器,且默認(rèn)DS作為段基址寄存器。如:,MOVAX,COUNT[SI],②32位尋址時,除ESP外的任何通用寄存器均可作變址寄存器,且默認(rèn)EBP以SS作段基址寄存器,其余均以DS作段基址寄存器。如:,MOVEAX,5[EBP]MOVECX,DATA[EAX],基址、變址尋址適于對一維數(shù)組的數(shù)組元素進行檢索操作。位移量表示數(shù)組起始地址偏移量;基址/變址表示數(shù)組元素的下標(biāo),可變。,2-61,2.4.2尋址方式,在這種方式下:,EA=[變址寄存器]比例因子+位移量,這種尋址方式只適于32位尋址一種情況。例如:,MOVEAX,TABLE[ESI*4];TABLE是位移量,4是比例因子,比例變址尋址和基址/變址尋址的作用相似,也適用于對一維數(shù)組元素的檢索。但當(dāng)數(shù)組元素大小為2/4/8字節(jié)時,用它更方便、更高效。,比例變址尋址方式的執(zhí)行過程的動畫演示。,(7)比例變址尋址,2-62,2.4.2尋址方式,在這種尋址方式下,,EA=[基址寄存器]+[變址寄存器],例如:,MOVAX,[BX+SI];或?qū)懗蒑OVAX,[BX][SI]動畫演示,它有16位尋址和32位尋址兩種情況,每種情況下基址、變址寄存器的使用規(guī)定和段寄存器的默認(rèn)規(guī)定與前面所述相同,但一種尋址方式中既有基址寄存器又有變址寄存器,而兩個寄存器默認(rèn)的段寄存器又不相同時,一般規(guī)定由基址寄存器來決定默認(rèn)哪一個段寄存器作段基址指針。,基址加變址尋址主要用于二維數(shù)組元素的檢索和二重循環(huán)等。,(8)基址加變址尋址,2-63,2.4.2尋址方式,在這種方式下,,EA=[變址寄存器]比例因子+[基址寄存器],它只有32位尋址一種情況。格式舉例:,MOVECX,[EDX*8][EAX];或MOVECX,[EDX*8+EAX]MOVAX,[EBX*4][ESI];或MOVAX,[EBX*4+ESI],這種方式主要用于數(shù)組元素大小為2/4/8字節(jié)時的二維數(shù)組檢索操作等場合。,(9)基址加比例變址尋址,2-64,2.4.2尋址方式,在這種方式下:,EA=[變址寄存器]+[基址寄存器]+位移量,這種方式也分16位尋址和32位尋址兩種情況。變址、基址寄存器的使用約定和對段寄存器的默認(rèn)約定與前面所述相同。格式舉例:,MOVAX,[BX+DI+MASK]或MOVAX,MASK[BX][DI]ADDEDX,[ESI][EBP+0FFFF000H]或ADDEDX,0FFFF000H[ESI][EBP],以第1條指令為例,給出了帶位移的基址加變址尋址方式的執(zhí)行過程的動畫演示。,這種尋址方式也是主要用于二維數(shù)組操作,位移量即為數(shù)組起始地址。,(10)帶位移的基址加變址尋址,2-65,2.4.2尋址方式,這種方式將偏移地址四元素都用上了,即:,EA=[變址寄存器]比例因子+[基址寄存器]+位移量,它只有32位尋址一種情況。各種約定和默認(rèn)情況同前所述。,格式舉例:,INC[EDI*8][ECX+40];或INC[EDI*8+ECX+40],當(dāng)二維數(shù)組的數(shù)組元素大小為2/4/8字節(jié),且數(shù)組起始地址不為0時,適于用這種尋址方式進行數(shù)組檢索操作。,(11)帶位移的基址加比例變址尋址,2-66,2.4.2尋址方式,3.存儲器尋址時的段約定,2-67,4.應(yīng)用舉例,例2.1已知80486工作在實地址方式下,其中一些寄存器的內(nèi)容和一些存儲單元的內(nèi)容如圖所示,試指出下列各條指令執(zhí)行后,AX中的內(nèi)容。,⑴MOVAX,2010H,⑵MOVAX,BX,⑶MOVAX,[1200H],⑷MOVAX,[BX],⑸MOVAX,1100H[BX],⑹MOVAX,[BX][SI],⑺MOVAX,1100H[BX+SI],⑻LEAAX,[SI],2.4.2尋址方式,2-68,2.4.2尋址方式,例2.2假定80486工作在實模式下,已知:(DS)=1000H,(SS)=2000H,(SI)=007FH,(BX)=0040H,(BP)=0016H,變量TABLE的偏移地址為0100H。請指出下列指令的源操作數(shù)字段是什么尋址方式?它的有效地址(EA)和物理地址(PA)分別是多少?,⑴MOVAX,[1234H]⑵MOVAX,TABLE⑶MOVAX,[BX+100H]⑷MOVAX,TABLE[BP][SI],2-69,Pentium的指令系統(tǒng)是在80X86系列指令系統(tǒng)的基礎(chǔ)上逐步發(fā)展而形成的,在代碼級具有向上兼容性。它增加了指令的種類,增強了一些指令的功能,提供了32位尋址方式和32位操作方式,并且包含全部浮點運算指令。Pentium指令的操作數(shù)可以是0~3個,根據(jù)尋址方式不同,可直接包含在指令中,也可存于寄存器或存儲器中。每條指令的長度因指令而異,平均指令長度為3.2字節(jié)。指令的操作數(shù)寬度可以是8位、16位、32位,尋址寬度可以是16位或32位。Pentium指令系統(tǒng)的突出特點是:功能強、靈活性高,給編譯程序和匯編語言程序的設(shè)計人提供了很寬的選擇余地。,2.4.3Pentium指令系統(tǒng)概貌,2-70,,1.指令格式,2.4.3Pentium指令系統(tǒng)概貌,2-71,Pentium指令系統(tǒng)分為:,整數(shù)指令--最常用部分浮點數(shù)指令操作系統(tǒng)型指令,,2.指令分類,2.4.3Pentium指令系統(tǒng)概貌,2-72,數(shù)據(jù)傳送是計算機中最基本、最常用、最重要的一類操作。如:,這類指令尋址方式最豐富,除POPF外,均不影響標(biāo)志寄存器的標(biāo)志位。,在實際程序中,它的使用頻率最高。,●各種初始化操作●取操作數(shù)●保存結(jié)果,2.4.4數(shù)據(jù)傳送類指令,2-73,通用數(shù)據(jù)傳送指令。如數(shù)據(jù)傳送指令(MOV)、裝入有效地址指令(LEA)、段裝入指令、交換類指令(XCHG和BSWAP)、查表轉(zhuǎn)換指令(XLAT)等。堆棧指令。如PUSH類/POP類指令等。數(shù)據(jù)類型變換指令。如數(shù)據(jù)寬度變換指令,帶符號數(shù)符號位擴展/無符號數(shù)位擴展指令等。I/O指令。如IN類/OUT類指令等。標(biāo)志寄存器傳送指令,2.4.4數(shù)據(jù)傳送類指令,數(shù)據(jù)傳送指令主要包括:,2-74,1.傳送指令MOV,指令操作:(源操作數(shù))→目的操作數(shù),指令格式:MOV目的操作數(shù),源操作數(shù),尋址規(guī)定:REG/MEM/SREG,REGREG/MEM,SREGREG/SREG,MEMREG/MEM,IMM,2.4.4數(shù)據(jù)傳送類指令,2-75,,2.3.4數(shù)據(jù)傳送類指令,2-76,MOV指令使用說明:,源操作數(shù)和目的操作數(shù)的類型必須一致。目的操作數(shù)不能為立即數(shù)。CS和(E)IP均不能用作指令的目的寄存器。段寄存器間不能直接傳送,也不能直接將立即數(shù)送給段寄存器。源操作數(shù)為立即數(shù),而目的操作數(shù)類型不確定時,要給目的操作數(shù)加類型說明。,源操作數(shù)和目的操作數(shù)不能同為存儲器操作數(shù)。,2.4.4數(shù)據(jù)傳送類指令,目的操作數(shù),源操作數(shù)REG/MEM/SREG,REGREG/MEM,SREGREG/SREG,MEMREG/MEM,IMM,2-77,⑴MOVDS,100,⑵MOV[1000H],23H,錯。源、目的操作數(shù)不能同為存儲器尋址。,⑶MOV[1000H],[2000H],錯。立即數(shù)不能直接賦給段寄存器。,錯。目的操作數(shù)長度不確定。,⑷MOVDATA,1133H,⑸MOVCS,AX,依賴于DATA的定義,錯。不能用傳送指令改變代碼段寄存器。,⑹MOVAX,[0100H+BX+BP],錯。地址寄存器不能同為基址寄存器。,例2.3識別下列指令的正確性,對錯誤的指令,說明錯誤的原因。,MOVAX,100MOVDS,AX,MOVWORDPTR[1000H],23H,MOVAX,[2000H]MOV[1000H],AX,2.3.4數(shù)據(jù)傳送類指令,2-78,2.交換指令,操作:(目的操作數(shù))?(源操作數(shù)),格式:XCHG目的操作數(shù),源操作數(shù)REG/MEM,REGREG,MEM,說明:⑴基本用法同MOV指令;⑵當(dāng)源或目的操作數(shù)為MEM操作數(shù)時,會自動激活LOCK信號,該特性常用于多機、多任務(wù)或多用戶系統(tǒng)中的臨界段(共享資源)訪問。,2.4.4數(shù)據(jù)傳送類指令,2-79,例2.4臨界段訪問(測試與置位操作),TEST_SET:MOVAL,0FFHXCHGAL,SEMAPHORE;讀信號燈并置位ANDAL,AL;產(chǎn)生條件碼JNZTEST_SET;忙時等待…(臨界段程序)MOVAL,0MOVSEMAPHORE,AL;清信號燈,2.4.4數(shù)據(jù)傳送類指令,2-80,說明:XLAT是一條隱含尋址的指令。隱含兩個操作數(shù):DS:(E)BX存放表基址,AL存放查表參數(shù)。使用前要給隱含操作數(shù)賦初值。,3.查表指令,格式:XLAT操作:((EBX)+(AL))→AL((BX)+(AL))→AL,2.4.4數(shù)據(jù)傳送類指令,2-81,例2.5內(nèi)存中自TABLE開始的16個單元連續(xù)存放著自然數(shù)0到15的平方值(構(gòu)成一個平方表),任給一整數(shù)M在XX單元中(該數(shù)為0≤M≤15),查表求M的平方值,并將結(jié)果存入YY單元中。,解:LEABX,TABLEMOVAL,XXXLATMOVYY,AL,2.4.4數(shù)據(jù)傳送類指令,2-82,4.堆棧指令PUSH/POP,格式:PUSH源操作數(shù)REG16/MEM16/IMM16REG32/MEM32/IMM32操作:((E)SP)-2/4→(E)SP(源操作數(shù))→(SS:(E)SP),(1)壓棧指令,2.4.4數(shù)據(jù)傳送類指令,2-83,格式:POP目的操作數(shù)MEM16/MEM32/REG16/REG32操作:([SS:(E)SP])→目的操作數(shù)((E)SP)+2/4→(E)SP,(2)彈棧指令,2.4.4數(shù)據(jù)傳送類指令,2-84,堆棧指令的操作數(shù)只能為字或雙字。PUSH和POP要成對出現(xiàn),以保持堆棧平衡堆棧指令也隱含了一個目的/源操作數(shù)—堆棧。壓棧順序是先壓高字節(jié)后壓低字節(jié),彈棧則是先彈低字節(jié)后彈高字節(jié)。,(3)堆棧指令使用說明:,2.4.4數(shù)據(jù)傳送類指令,2-85,例2.6用堆棧操作指令將BX和CX中的兩個16位數(shù)(其中BX是高16位)組成32位數(shù)傳送到EAX寄存器中。,PUSHBX;先壓高16位PUSHCX;后壓低16位POPEAX,解:,2.4.4數(shù)據(jù)傳送類指令,2-86,?說明:I/O端口有兩種尋址方式●直接尋址,尋址范圍為0~255;●間接尋址,尋址范圍為0~216-1。,(1)輸入指令?格式:IN累加器,端口AL/AX/EAX,IMM8AL/AX/EAX,DX?操作:AL/AX/EAX←(I/O端口),直接尋址:指令給出的立即數(shù)是I/O端口地址,間接尋址:DX寄存器給出的是I/O端口地址,5.I/O指令,2.4.4數(shù)據(jù)傳送類指令,2-87,(2)輸出指令,格式:OUT端口,累加器IMM8,AL/AX/EAXDX,AL/AX/EAX操作:(AL/AX/EAX)→I/O端口,2.4.4數(shù)據(jù)傳送類指令,2-88,例2.7設(shè)程序在數(shù)據(jù)段中定義的數(shù)組如下:NAMESDBTOM..DB20DBROSEDB30DBKATE.DB25請指出下列指令是否正確,如正確,A累加器中的結(jié)果是多少?,6.傳送指令應(yīng)用舉例,2.4.4數(shù)據(jù)傳送類指令,2-89,1.MOVBX,OFFSETNAMESMOVAL,[BX+5],(AL)=[NAMES+5]=20,2.MOVAX,NAMES,錯,源與目的操作數(shù)類型不一致,3.MOVAX,WORDPTRNAMES+1,(AX)=[NAMES+1]=‘MO’=4D4FH,4.MOVBX,6MOVSI,5MOVAX,NAMES[BX][SI],前兩條指令正確,第三條錯,源與目的操作數(shù)類型不一致,2.4.4數(shù)據(jù)傳送類指令,2-90,5.MOVBX,6*2MOVSI,5MOVAX,OFFSETNAMES[BX][SI]INC[AX],6.MOVBX,6MOVSI,5LEADI,NAMES[BX][SI]MOVAL,[DI],(DI)=NAMES偏移地址+(BX)+(SI)=NAMES偏移地址+11(AL)=[NAMES+11]=‘K’=4BH,前兩條指令正確,第三條錯,OFFSET只能取直接變量的偏移地址;第四條錯,非法尋址。,2.4.4數(shù)據(jù)傳送類指令,2-91,例2.880486工作在實地址方式時,(DS)=091DH,(BX)=0024H,有關(guān)存儲器的內(nèi)容如圖所示。求指令LESDI,32H[BX]執(zhí)行后的結(jié)果。,,,LESDI,32H[BX],2.4.4數(shù)據(jù)傳送類指令,2-92,這類指令支持加、減、乘、除四種基本算術(shù)運算,其操作對象可以是字節(jié)、字、雙字的無符號和有符號的二進制整數(shù);也可以是無符號的壓縮/非壓縮BCD碼數(shù);還支持符號擴展指令和十進制調(diào)整指令。它的操作結(jié)果一般會影響標(biāo)志寄存器中的狀態(tài)標(biāo)志位,如ZF、CF、SF、OF、AF、PF等。,2.4.5算術(shù)運算類指令,2-93,算術(shù)運算指令有:,雙操作數(shù)指令,如加、減、比較等。,單操作數(shù)指令,如增/減、整數(shù)變反、乘除法指令等。,無操作數(shù)指令,如十進制運算調(diào)整和符號位擴展等。,三操作數(shù)指令,如有符號整數(shù)乘法指令I(lǐng)MUL等。,2.4.5算術(shù)運算類指令,2-94,1.加法/減法指令,操作:ADD:(目的)+(源)→目的SUB:(目的)-(源)→目的ADC:(目的)+(源)+CF→目的SBB:(目的)-(源)-CF→目的,2.4.5算術(shù)運算類指令,2-95,加法/減法指令使用說明:,ADD/SUB指令用于單個字節(jié)/字/雙字?jǐn)?shù)的加/減法運算;ADC/SBB指令則常用于多精度或多字節(jié)/多字/多雙字?jǐn)?shù)的加/減法運算。INC/DECREG/MEM與ADD/SUBREG/MEM,1指令的異同:兩者都執(zhí)行加1/減1操作,但前者不影響進位,而后者影響。,2-96,,解:⑴用8086指令MOVAX,YSUBX,AX;低16位字?jǐn)?shù)據(jù)相減MOVAX,2[Y]SBB2[X],AX;高16位字?jǐn)?shù)據(jù)相減,⑵用80386/486指令MOVEAX,DWORDPTRYSUBDWORDPTRX,EAX,兩個32位雙字?jǐn)?shù)據(jù)X、Y定義如下:XDW1234H,5678HYDW3FEAH,A033H請編寫計算X=X-Y的程序段(低位在前),例2.9,2.4.5算術(shù)運算類指令,2-97,2.整數(shù)變反指令(求補),格式:NEG目的操作數(shù)REG/MEM操作:0-(目的操作數(shù))→目的操作數(shù)應(yīng)用:常用于求負(fù)數(shù)的絕對值。,解:TESTAX,8000H;測試符號位JZNEXTNEGAXNEXT:HLT,例2.10求AX中存放的有符號數(shù)的絕對值。,2.4.5算術(shù)運算類指令,2-98,3.比較指令,格式:CMP目的操作數(shù),源操作數(shù)REG,REG/MEM/IMMMEM,REG/IMM,CMP與SUB指令都執(zhí)行減法操作,但前者不因操作結(jié)果改變目標(biāo)操作數(shù)值,而后者改變。,操作:(目的操作數(shù))-(源操作數(shù)),根據(jù)操作結(jié)果修改狀態(tài)標(biāo)志,但不改變目標(biāo)操作數(shù)值。,2.4.5算術(shù)運算類指令,2-99,乘法指令分為有符號數(shù)和無符號數(shù)乘法指令(IMUL/MUL)。?無符號數(shù)乘法指令只有單操作數(shù)格式一種;?有符號數(shù)乘法指令則有單操作數(shù)、雙操作數(shù)和三操作數(shù)三種格式。,4.乘法指令,2.4.5算術(shù)運算類指令,2-100,1)單操作數(shù)乘法指令,格式:MUL/IMUL源操作數(shù)REG/MEM,操作:MUL和IMUL分別為有符號數(shù)和無符號數(shù)乘法指令,兩種指令除操作數(shù)類型不同外,操作完全相同:,字:(AX)(源操作數(shù))→DX:AX,雙字:(EAX)(源操作數(shù))→EDX:EAX,2.4.5算術(shù)運算類指令,2-101,單操作數(shù)乘法指令的被乘數(shù)是隱含的(在AL/AX/EAX中),而結(jié)果長度一定是被乘數(shù)/乘數(shù)的二倍(在AX/DX:AX/EDX:EAX中)。源操作數(shù)不能為立即數(shù)。源操作數(shù)為存儲器操作數(shù),且類型不能確定時,要顯式說明操作數(shù)類型。要根據(jù)是有符號數(shù)還是無符號數(shù),分別選用IMUL或MUL指令指令執(zhí)行影響CF和OF標(biāo)志,若指令執(zhí)行后,結(jié)果的高一半是有效數(shù)值位,則CF=OF=1,否則CF=OF=0。,乘法指令使用說明:,2.4.5算術(shù)運算類指令,2-102,例2.11,解:⑴MULBL指令完成AL和BL中的兩個無符號數(shù)相乘:,AH含有效數(shù)字,∴OF=1、CF=1。,(AX)=0A8CH,12C,+96,,若(AL)=96H,(BL)=12H,求分別執(zhí)行MULBL和IMULBL指令后的結(jié)果及OF、CF狀態(tài)。,2.4.5算術(shù)運算類指令,2-103,AH含有效數(shù)字,∴OF=1、CF=1。,解:⑵IMUL執(zhí)行有符號數(shù)乘法,此時AL中的數(shù)是負(fù)數(shù),真值為-6AH,即:,用補碼表示:(AX)=F88CH,(AX)=-774H,D4,+6A,,2.4.5算術(shù)運算類指令,2-104,格式:IMUL目的操作數(shù),源操作數(shù)REG,REG/MEM/IMM操作:(目的操作數(shù))(源操作數(shù))→目的操作數(shù),3)三操作數(shù)乘法指令格式:IMUL目的操作數(shù),源操作數(shù),立即數(shù)REG,REG/MEM,IMM操作:(源操作數(shù))(立即數(shù))→目的操作數(shù),2)雙操作數(shù)乘法指令,2.4.5算術(shù)運算類指令,2-105,5.除法指令,格式:DIV∕IDIV源操作數(shù)REG/MEM操作:按源操作數(shù)類型:,字節(jié):(AX)/(源),商存于AL中,余數(shù)存于AH,字:(DX:AX)/(源),商存于AX中,余數(shù)存于DX,雙字:(EDX:EAX)/(源),商在EAX中,余數(shù)在EDX,,2.4.5算術(shù)運算類指令,2-106,說明:除法指令的被除數(shù)是隱含的,且長度一定是除數(shù)的二倍(在AX/DX:AX/EDX:EAX中)。所以,使用除法指令常要擴展被除數(shù)長度。擴展時無符號數(shù)一般用:MOVZXAX,ALMOVDX,0MOVEDX,0有符號數(shù)一般用:CBW/CWD/CDQ,2.4.5算術(shù)運算類指令,2-107,MOVAX,a①;ab在CX:BX中②③MOVAX,c④;c在DX:AX中⑤;ab+c在DX:AX中⑥⑦;(ab+c)/a,商存入S⑧,,,,,,,,,IMULb,MOVCX,DX,MOVBX,AX,CWD,ADDAX,BX,ADCDX,CX,IDIVa,MOVS,AX,例2.12下列程序段完成S=(ab+c)/a的運算,其中變量a、b、c和S均為帶符號的字?jǐn)?shù)據(jù),結(jié)果的商存入S,余數(shù)則不計,填空完成下列程序。,2.4.5算術(shù)運算類指令,2-108,6.BCD調(diào)整指令,?格式:AAA∕AAS∕AAM∕AAD∕DAA∕DAS,?功能:,AAA/AAS:未組合BCD加法/減法調(diào)整指令,隱含操作數(shù)為AL。,AAM:未組合BCD乘法調(diào)整指令,隱含操作數(shù)AX、AH、AL。將AX中乘積調(diào)整為兩個未組合BCD數(shù)存于AH和AL。,DAA/DAS:組合BCD加法/減法調(diào)整指令,隱含操作數(shù)為AL。,AAD:調(diào)整除法運算前AX中的被除數(shù)內(nèi)容。操作:(AH)10+(AL)→AX,2.4.5算術(shù)運算類指令,2-109,◆BCD調(diào)整指令說明:,⑴DAA/DAS、AAA/AAS隱含的操作寄存器是AL,所以BCD碼加法/減法只能用累加器AL為目的操作數(shù)的加法/減法指令,且加法/減法指令后要跟調(diào)整指令。,⑵多字節(jié)、字和雙字BCD加法/減法只能用帶進位/借位的字節(jié)加法/減法指令實現(xiàn)。,⑶ASCII碼數(shù)的運算與非壓縮BCD碼數(shù)的運算基本相同,但要保持結(jié)果仍為ASCII碼,則需轉(zhuǎn)換。,⑷AAM隱含的操作寄存器是AX,要跟在MUL指令之后,⑸AAD指令的功能不是將除法后的結(jié)果調(diào)整為BCD碼,而是在除法前將AX保存的兩位非壓縮BCD數(shù)調(diào)整為二進制數(shù)。該指令要放在DIV指令之前。,2.4.5算術(shù)運算類指令,2-110,例2.13,解:MOVAL,BYTEPTRXADDAL,BYTEPTRY;低位相加DAA;BCD碼調(diào)整MOVBYTEPTRX,AL;保存低位結(jié)果MOVAL,BYTEPTRX[1];取字變量的高字節(jié)ADCAL,BYTEPTRY[1];高位相加DAAMOVBYTEPTRX[1],AL,兩個4位壓縮BCD碼定義如下:XDW3526HYDW1234H請編寫計算X+Y的程序段。,2.4.5算術(shù)運算類指令,2-111,程序段MOVAX,405HMOVBL,06HAADDIVBL執(zhí)行后AX的內(nèi)容為。A.307HB.703HC.4231HD.806H,A,例2.14,2.4.5算術(shù)運算類指令,2-112,功能:分別按位進行邏輯“與”、“或”、“異或”、“測試”和“非”。,◆格式:ANDORXORTEST,目標(biāo)操作數(shù),源操作數(shù)REG,REG/MEM/IMMMEM,REG/IMM,,NOT目標(biāo)操作數(shù)REG/MEM,4.4.6邏輯運算與移位指令,1.邏輯運算指令,2-113,使用說明:,②編程時要根據(jù)操作合理選用指令,一般:●對某些二進制位‘清零’用邏輯‘與’指令A(yù)ND;●對某些二進制位‘置位’用邏輯‘或’指令OR;●對某些二進制位‘求反’用邏輯‘異或’指令XOR,全部位‘求反’用邏輯‘非’指令NOT。,①邏輯運算指令除NOT指令外,都影響標(biāo)志寄存器的狀態(tài)標(biāo)志位,且邏輯運算后進位標(biāo)志CF一定為0,所以邏輯運算指令常用于清0和清進位。,4.4.6邏輯運算與移位指令,2-114,③AND指令與TEST指令的相同之處是都執(zhí)行按位“與”操作,兩者執(zhí)行后對標(biāo)志寄存器中狀態(tài)標(biāo)志位的影響相同,不同之處是前者改變目標(biāo)操作數(shù)的值,而后者并不改變目標(biāo)操作數(shù)的值。所以TEST指令與CMP指令的用法類似,用于產(chǎn)生按位測試的條件碼。,例2.15,寫出一條能完成下述操作的指令:⑴將AX的高字節(jié)清零,低字節(jié)不變;⑵將BX的低字節(jié)置成全‘1’,高字節(jié)不變;⑶將CX的高字節(jié)變反,低字節(jié)不變。,4.4.6邏輯運算與移位指令,2-115,例2.16已知寄存器DX:AX的內(nèi)容為32位帶符號數(shù),編寫一段程序使DX:AX的內(nèi)容成為原來數(shù)據(jù)的絕對值。,解:TESTDX,8000H;測試符號位,產(chǎn)生狀態(tài)JZEXIT;符號位=0,結(jié)束NEGDX;求絕對值NEGAXSBBDX,0EXIT:HLT,4.4.6邏輯運算與移位指令,2-116,2.移位指令,移位指令包括:算術(shù)移位指令(SAL/SAR)邏輯移位指令(SHL/SHR)循環(huán)移位指令(ROR/ROL/RCR/RCL)雙精度移位指令(SHLD/SHRD),4.4.6邏輯運算與移位指令,2-117,使用說明:,移位指令的源操作數(shù)采用立即數(shù)尋址時,8086指令只能為1,80386/486以上則為8位,實際使用低5位。移位指令常用于二進制數(shù)的倍乘和倍除,即算術(shù)/邏輯移n位,相當(dāng)于把二進制數(shù)乘以或除以2n。要注意算術(shù)右移(SAR)與邏輯右移(SHR)的區(qū)別:前者在符號位和數(shù)值位依次右移的同時,用符號位充填符號位,而后者用0充填符號位。所以,有符號和無符號數(shù)倍乘用SHL/SAL均可,但倍除時,有符號數(shù)用SAR和無符號數(shù)用SHR。移位指令也常用于循環(huán)控制,如邏輯尺控制循環(huán)。,4.4.6邏輯運算與移位指令,2-118,例2.17試編寫用移位和加法指令完成計算:(EAX)9/4的程序段。,解:(EAX)9/4=[(EAX)8+(EAX)]/4,MOVEBX,EAX;保存EAXSAL/SHLEAX,3;(EAX)8→EAXADDEAX,EBX;(EAX)8+(EAX)→EAXSAR/SHREAX,2;(EAX)9/4→EAX,4.4.6邏輯運算與移位指令,2-119,2.4.7串操作類指令,串傳送指令MOVSB/MOVSW/MOVSD串裝入指令LODSB/LODSW/LODSD串存儲指令STOSB/STOSW/STOSD串比較指令CMPSB/CMPSW/CMPSD串掃描指令SCASB/SCASW/SCASD串輸入指令I(lǐng)NSB/INSW/INSD串輸出指令OUTSB/OUTSW/OUTSD,串操作指令是指用于對存儲器中字節(jié)串、字串和雙字串進行操作的指令,包括:,2-120,串操作約定:,●用DS:(E)SI尋址源串,允許段超越;●用ES:(E)DI尋址目的串,但ES段不能超越;●由DF標(biāo)志位決定(E)SI,(E)DI指針增減:DF=0,遞增;DF=1,遞減;●由串長度決定指針增/減量大小;●帶重復(fù)前綴時,用(E)CX作重復(fù)計數(shù)器。,2.4.7串操作類指令,2-121,1.串傳送指令,格式:MOVSB/MOVSW/MOVSDMOVS目的串,源串MEM,MEM,操作:將DS:[(E)SI]所指的源串中的一個字節(jié)、字或雙字傳送到ES:[(E)DI]指的目的串中,然后,按DF指示和操作數(shù)長度修改(E)SI,(E)DI指針,即:,[ES:(E)DI]←([DS:(E)SI])(E)SI←((E)SI)1/2/4;修改源指針(E)DI←((E)DI)1/2/4;修改目的指針,2.4.7串操作類指令,2-122,說明:,應(yīng)用:用于數(shù)據(jù)塊傳送,該指令允許加重復(fù)前綴REP。即:REPMOVSB/MOVSW/MOVSD此時,由(E)CX控制串傳送指令MOVS的執(zhí)行次數(shù)。相當(dāng)于指令序列:AGAIN:MOVSB/MOVSW/MOVSDLOOPAGAIN,2.4.7串操作類指令,2-123,例2.18編寫將數(shù)據(jù)段中自AREA1開始的100個字?jǐn)?shù)據(jù)搬到附加段中以AREA2開始的數(shù)據(jù)區(qū)中的程序段。,解:①用MOV指令LEASI,AREA1LEADI,AREA2MOVCX,100DONE:MOVAX,[SI]MOVES:[DI],AXADDSI,2ADDDI,2LOOPDONE,2.4.7串操作類指令,2-124,②用基本串傳送指令LEASI,AREA1LEADI,AREA2MOVCX,100CLDDONE:MOVSWLOOPDONE,③用重復(fù)串傳送指令LEASI,AREA1LEADI,AREA2MOVCX,100CLDREPMOVSW,2.4.7串操作類指令,2-125,格式:LODSB/LODSW/LODSDLODS源串MEM,說明:允許加重復(fù)前綴REP。,操作:([DS:(E)SI])→AL/AX/EAX按DF指示和操作數(shù)長度修改(E)SI指針,應(yīng)用:用于取數(shù)據(jù)塊中元素值,2.串裝入指令,2.4.7串操作類指令,2-126,3.串存儲器指令,格式:STOSB/STOSW/STOSDSTOS目的串MEM,說明:允許加重復(fù)前綴REP。,操作:AL/AX/EAX→([ES:(E)DI])按DF指示和操作數(shù)長度修改(E)DI指針,應(yīng)用:用于數(shù)據(jù)塊初始化。LODS和STOS結(jié)合常用于數(shù)據(jù)塊傳送。,2.4.7串操作類指令,2-127,4.串掃描指令,格式:SCASB/SCASW/SCASDSCAS目的串MEM,說明:允許加重復(fù)前綴REPE或REPNE。掃描次數(shù)由(E)CX指定。重復(fù)條件:REPE:IF((E)CX)≠0ANDZF=1THEN重復(fù)串掃描REPNE:IF((E)CX)≠- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 微處理器 指令系統(tǒng)
鏈接地址:http://m.zhongcaozhi.com.cn/p-3266964.html