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