第2章-微處理器與指令系統(tǒng)課件_第1頁(yè)
第2章-微處理器與指令系統(tǒng)課件_第2頁(yè)
第2章-微處理器與指令系統(tǒng)課件_第3頁(yè)
第2章-微處理器與指令系統(tǒng)課件_第4頁(yè)
第2章-微處理器與指令系統(tǒng)課件_第5頁(yè)
已閱讀5頁(yè),還剩159頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第二章 微處理器和指令系統(tǒng)2-12.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-22.1.1 8086/8088 微處理器 8086是1978年推出的全16位微處理器, 8088是1978年推出的準(zhǔn)16位微處理器。二者除外數(shù)據(jù)總線位數(shù)(8086為16位,8088為8位)及與此相關(guān)的部分邏輯稍有差別外,內(nèi)部結(jié)構(gòu)和基本性能相同,指令系

2、統(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ǔ)空間的訪問(wèn)等性能方面有很大提高。2-32.1 8086/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-41.內(nèi)部結(jié)構(gòu)2.1.1 8086/8088微處理器20位ABEU控制電路總線控制電路通用寄

3、存器累加器基址寄存器計(jì)數(shù)寄存器數(shù)據(jù)寄存器堆棧指針基址指針目的變址源變址指針寄存器變址寄存器地址加法器運(yùn)算暫存器ALU標(biāo)志寄存器指令指針內(nèi)部暫存器指令隊(duì)列總線接口單元(BIU)執(zhí)行單元(EU)外部總線8086/8088DB8088:8位8086:16位CSDSSSESIP1 2 3 4 5 68位80888086AX AH ALBX BH BLCX CH CLDX DH DL SPBPDISIALU DB16位2-5 8086 CPU內(nèi)部指令執(zhí)行流程段寄存器CS 程序指針寄存器IP 內(nèi)容經(jīng)過(guò)地址加法器形成20 位地址;由CPU內(nèi)部地址總線AB , 經(jīng)過(guò)總線地址控制電路, 向外部總線發(fā)讀取指令的的

4、控制信號(hào), 外部總線開(kāi)始總線操作;讀取指令送入到指令隊(duì)列中, 等待執(zhí)行;EU單元從隊(duì)列中去一條指令到EU控制電路,譯碼指令需要做的系列操作,包括寄存器的內(nèi)容送累加器;操作結(jié)果經(jīng)過(guò)內(nèi)部數(shù)據(jù)總線, 存放到寄存器或內(nèi)部暫存器,同時(shí)置FR;根據(jù)DS寄存器的內(nèi)容,及指令尋址方式產(chǎn)生的偏移量,經(jīng)過(guò)地址加法器,形成數(shù)據(jù)保存地址,并送到外部總線。CPU 發(fā)寫總線操作命令,將暫存器的內(nèi)容, 通過(guò)總線, 寫到指定內(nèi)存單元。2-62.指令流水線 指令隊(duì)列的存在使EU和BIU并行工作,取指令和分析、執(zhí)行指令操作可重疊進(jìn)行,形成了兩級(jí)指令流水線結(jié)構(gòu),減少了CPU等待時(shí)間,提高了CPU的利用率,加快了整機(jī)運(yùn)行速度,降低了

5、對(duì)存儲(chǔ)器存取速度的要求。BIUEU 8086/8088的指令“流水”操作取指令1取指令2譯碼1取數(shù)據(jù)1執(zhí)行1取指令3譯碼2存結(jié)果1執(zhí)行2取指令4譯碼3取指令5等待2-73.存儲(chǔ)器分段8086物理地址(1M=220)2-8 將1MB的物理存儲(chǔ)空間分成若干個(gè)邏輯段,每段大小為64KB。 64KB30000H(段基址) 段的起始單元地址叫段基址,存放在段寄存器中。通過(guò)4個(gè)段寄存器,CPU每次可同時(shí)對(duì)4個(gè)段進(jìn)行尋址。內(nèi)存 00000H00001H00002H00003HFFFFFH2-9 分段方式不唯一,各段之間可以連續(xù)、分離、部分重疊或完全重疊,這主要取決于對(duì)各個(gè)段寄存器的預(yù)置內(nèi)容。1000H200

6、0H3100H3100H代碼段(64KB)堆棧段(64KB)數(shù)據(jù)段與附加數(shù)據(jù)段重疊(64KB)CS10000H20000H31000HSSDSES1FFFFH2FFFFH40FFFH 存儲(chǔ)器分段結(jié)構(gòu)示例2-102-112-12 物理地址是1MB存儲(chǔ)空間中的某一單元地址,用20位地址碼表示,CPU訪問(wèn)存儲(chǔ)器時(shí),地址總線上送出的就是物理地址。 邏輯地址在編程時(shí)采用,由段基址和偏移地址組成,兩者均為16位。內(nèi)存20000H20A00H0A00H物理地址20A00H邏輯地址2000 物理地址和邏輯地址2-13邏輯地址與20位物理地址的變換關(guān)系: 物理地址=段基址16+偏移地址偏移地址段基址段基址 00

7、0020位物理地址邏輯地址15 0 15 0 左移四位19 0地址加法器 邏輯地址與物理地址的變換2-14【例】 若數(shù)據(jù)段寄存器DS2100H,試確定該存儲(chǔ)區(qū)段物理地址的范圍。 一個(gè)邏輯段的最大容量為64KB; 第一個(gè)存儲(chǔ)單元的偏移地址為0; 最后一個(gè)存儲(chǔ)單元的偏移地址為FFFFH。 該數(shù)據(jù)區(qū)段由低至高相應(yīng)存儲(chǔ)單元的偏移地址為: 0000H FFFFH。 存儲(chǔ)區(qū)的首地址 DS16偏移地址 2100H160000H21000H存儲(chǔ)區(qū)的末地址DS16偏移地址 2100H16FFFFH 30FFFH2-15 2.2 Pentium微處理器2.2.1 內(nèi)部結(jié)構(gòu)與外部引腳2.2.2 內(nèi)部寄存器2.2.3

8、 Pentium的四種工作方式2-16 Pentium在結(jié)構(gòu)上由如下功能部件組成: 整數(shù)執(zhí)行單元 浮點(diǎn)單元 指令Cache和數(shù)據(jù)Cache 指令預(yù)取單元 指令譯碼單元 地址轉(zhuǎn)換與管理單元 總線接口單元 控制單元 這些功能部件除地址轉(zhuǎn)換與管理單元與80386/80486保持兼容外,其他都進(jìn)行了重新設(shè)計(jì)。 2.2.1 內(nèi)部結(jié)構(gòu)和外部引腳2-171. 內(nèi)部結(jié)構(gòu)地址轉(zhuǎn)換與存儲(chǔ)管理單元APICDP邏輯控制ROM浮點(diǎn)單元8KB指令高速緩存TLB預(yù)取地址指令預(yù)取單元指令譯碼單元總線單元8KB數(shù)據(jù)高速緩存TLB控制單元地址生成U流水線地址生成V流水線整數(shù)寄存器組ALUU流水線ALUV流水線控制寄存器組加法除法

9、乘法桶形移位器控制指令指針?lè)种z驗(yàn)與目標(biāo)地址32位地址總線323232326464位數(shù)據(jù)總線數(shù)據(jù)控制控制64位數(shù)據(jù)總線32位地址總線分支目標(biāo)緩沖器32323280802-18基本寄存器系統(tǒng)級(jí)寄存器調(diào)試和模型專用寄存器浮點(diǎn)寄存器Pentium的內(nèi)部寄存器,按功能可分為4類:2.2.2 Pentium內(nèi)部寄存器2-19標(biāo)志寄存器指令指針寄存器EFLAGSFLAGSEIPIP31 15 031 15 031 16 15 7 0通 用 寄 存 器EAX AH AX ALEBX BH BX BLECX CH CX CLEDX DH DX DLEDI DIESI SIEBP BPESP SP1. 基本寄存

10、器選擇器CSSSDSESFSGS15 0 63 0描述符高速緩存器段 寄 存 器 EIP用于保存下一條待預(yù)取指令相對(duì)于代碼基址的偏移量。它的低16位也可單獨(dú)訪問(wèn),稱之為IP。2-20 標(biāo)志寄存器位定義CFEFLAGSFLAGS31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0ACVMRF0NTIOPLOFDFIFTFSFZF0AF0P F0X 對(duì)準(zhǔn)檢查標(biāo)志X 虛擬86模式標(biāo)志X 恢復(fù)標(biāo)志X 嵌套標(biāo)志X 特權(quán)級(jí)標(biāo)志S 溢出標(biāo)志C 方向標(biāo)志X 中斷允許標(biāo)志X 自陷標(biāo)志S 符號(hào)標(biāo)志

11、S 零標(biāo)志S 輔助進(jìn)位標(biāo)志S 奇偶標(biāo)志S 進(jìn)位標(biāo)志注:S表示狀態(tài)標(biāo)志,X表示系統(tǒng)標(biāo)志,C表示控制標(biāo)志X 虛擬中斷標(biāo)志X ID標(biāo)志X 虛擬中斷掛起0 0 0 0 0 0 0 0 0 0VIFVIPID2-21選擇器描述符高速緩存器CSSSDSESFSGS15 0 63 0段寄存器 段寄存器Pentium有6個(gè)段寄存器:CS-指明當(dāng)前的代碼段SS-指明當(dāng)前的堆棧段DSESFS GS決定程序使用存儲(chǔ)器區(qū)域塊指明當(dāng)前的4個(gè)數(shù)據(jù)段編程者可直接訪問(wèn)的編程者不能訪問(wèn)的段選擇符段描述符2-22實(shí)地址方式和虛擬8086方式下相同,段的長(zhǎng)度固定為64KB,段選擇器就是段寄存器,它保存的是邏輯段基址的高16位,將它

12、的內(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-23 段的選擇符 為了說(shuō)明一個(gè)段的描述符在哪個(gè)表中,表的序號(hào)是多少以及特權(quán)的高低,為每個(gè)段定義了一個(gè)16位的選擇符,存于段選擇器中,其格式為:描述符索引段描述符iLDTGDT0 1INDEX TI RPLb15 b3 b2 b1 b0表指示符描述符i(

13、08911)段描述符0描述符000 特權(quán)級(jí)001 特權(quán)級(jí)110 特權(quán)級(jí)211 特權(quán)級(jí)3請(qǐng)求特權(quán)級(jí)2-242.2.3 Pentium的四種工作方式實(shí)地址工作模式最基本的工作方式。 8086/8088的實(shí)地址模式保持兼容。 微處Pentium理器的實(shí)地址模式具有更強(qiáng)的功能,增 加了寄存器,擴(kuò)充了指令,可進(jìn)行32位操作。 實(shí)模式操作方式只允許微處理器尋址第一個(gè)1MB存儲(chǔ)器空間; 當(dāng)微處Pentium理器工作于實(shí)地址模式時(shí),存儲(chǔ)器的管理方式與8086微處理器存儲(chǔ)器的管理方式完全相同。2-252.保護(hù)虛擬方式 通常在程序運(yùn)行過(guò)程中,應(yīng)防止以下情況的發(fā)生: 應(yīng)用程序破壞系統(tǒng)程序。 某一應(yīng)用程序破壞了其他應(yīng)

14、用程序。 錯(cuò)誤地把數(shù)據(jù)當(dāng)作程序運(yùn)行。 為了避免出現(xiàn)以上情形的發(fā)生,所采取的措施稱作“保護(hù)”。 2-26CPU復(fù)位RSM復(fù)位或RSMVM=0VM=1復(fù)位復(fù)位或PE=0使CR0的PE=1系統(tǒng)管理方式保護(hù)方式虛擬8086方式RSMSMI實(shí)地址方式SMISMI實(shí)地址方式實(shí)地址方式:工作原理與8086基本相同,主要區(qū)別是借助操作數(shù)長(zhǎng)度前綴能處理32位數(shù)據(jù),運(yùn)行速度也更高,且可使用4個(gè)數(shù)據(jù)段。保護(hù)方式保護(hù)方式:CPU可訪問(wèn)的物理存儲(chǔ)空間為232= 4GB;程序可用的虛擬地址空間為246=64TB。段長(zhǎng)度在啟動(dòng)頁(yè)功能時(shí)是4GB,不啟動(dòng)頁(yè)功能時(shí)是1MB??芍С侄嘤脩艉蛦斡脩舻亩嗳蝿?wù)操作,并對(duì)各任務(wù)提供了多方面

15、的保護(hù)機(jī)制。虛擬8086方式虛擬8086方式:既有保護(hù)功能又能執(zhí)行8086代碼的工作方式,是保護(hù)方式的一種子方式。CPU的工作原理與保護(hù)虛地址方式下相同,但程序指定的邏輯地址解釋與8086相同。系統(tǒng)管理方式系統(tǒng)管理方式:使設(shè)計(jì)者實(shí)現(xiàn)高級(jí)管理功能,如對(duì)電源的管理以及為操作系統(tǒng)和正在運(yùn)行的程序提供安全性。2-272.3 Pentium微處理器指令系統(tǒng)2.3.1 基本數(shù)據(jù)類型2.3.2 操作數(shù)尋址方式2.3.3 Pentium指令系統(tǒng)概貌2.3.4 數(shù)據(jù)傳送類指令2.3.5 算術(shù)運(yùn)算類指令2.3.6 邏輯運(yùn)算和移位指令2.3.7 串操作類指令2.3.8 控制轉(zhuǎn)移類指令2-28 Pentium在其內(nèi)部

16、定點(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.3.1 基本數(shù)據(jù)類型2-29 這類數(shù)不帶任何符號(hào)信息,只含有量值域,僅CPU支持。分為三類: 字節(jié): 字: 雙字: 任何邏輯地址上的8位相鄰位串。任何字節(jié)地址開(kāi)始的2個(gè)相鄰字節(jié)。低字節(jié)地址為該字地址。任何字節(jié)地址開(kāi)始的2個(gè)相鄰字,即4個(gè)相鄰字節(jié)。最小字節(jié)地址為雙字的地址。1.無(wú)符號(hào)二進(jìn)制數(shù)(序數(shù))2-30 這類數(shù)均以補(bǔ)碼表示,有8位數(shù)(字節(jié))、16位數(shù)(字)、32位數(shù)(雙字)、64位數(shù)(4字)四種。CP

17、U支持前3種,F(xiàn)PU支持后3種。2.帶符號(hào)的二進(jìn)制定點(diǎn)整數(shù)(整數(shù))2-31關(guān)于數(shù)據(jù)類型的兩點(diǎn)說(shuō)明:(1)各類型數(shù)據(jù)中,基本的數(shù)據(jù)類型仍是字節(jié)、字和雙字 盡可能將字操作對(duì)準(zhǔn)于偶地址,將雙字操作對(duì)準(zhǔn)于4的整數(shù)倍地址。 對(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-322.3.2 操作數(shù)尋址方式1. 尋

18、址方式和有效地址概念2. 11種尋址方式3. 存儲(chǔ)器尋址時(shí)的段約定4. 應(yīng)用舉例2-33 尋址方式就是尋找指令中操作數(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-34 在Pentium系列MPU中,內(nèi)存實(shí)際地址(PA): PA = 段基地址

19、 + 段內(nèi)偏移地址(EA ) 為了適應(yīng)處理各種數(shù)據(jù)結(jié)構(gòu)的需要,段內(nèi)偏移地址可由以下幾部分組合而成: 基址寄存器內(nèi)容 變址寄存器內(nèi)容 比例因子(僅與32位方式相關(guān)) 位移量 這四個(gè)基本部分稱為偏移地址四元素,一般又將由這四種元素組合形成的偏移地址稱為有效地址EA。EA=基址+(變址比例因子)+位移量 有效地址EA2-35有效地址元素16位尋址32位尋址基址寄存器 BX,BP 任何32位通用寄存器變址寄存器 SI,DI 除ESP外的任何32位通用寄存器比例因子 無(wú)(或1) 1,2,4,8位移量 0,8,16位 0,8,32位 指令尋址字段規(guī)定了操作數(shù)的來(lái)源部件和如何計(jì) 算EA的方法。 實(shí)地址與保護(hù)

20、方式的PA 方法不同.無(wú)AX 、CX 、DX、SP、IP寄存器2-36 保護(hù)方式下的尋址過(guò)程(地址轉(zhuǎn)換過(guò)程) - 虛擬存儲(chǔ)有效地址計(jì)算變址位移基址比例因子+32位有效地址31 0BE7BE0A31A332 位32 位13位描述符檢索段寄存器選擇符TIRPL15 3 2 1 0分段部件線性地址物理存儲(chǔ)器4G分頁(yè)部件(可選)物理地址邏輯地址(虛擬)(CS,DS,ES,SS, FS,GS)不分頁(yè)邏輯地址 = 段選擇符 :有效地址2-37 偏移地址四元素可優(yōu)化組合出9種存儲(chǔ)器尋址方式,加上立即數(shù)尋址和寄存器尋址,Pentium共有11種尋址方式:(1) 立即數(shù)尋址(2) 寄存器尋址(3) 直接尋址(4

21、) 寄存器間接尋址(5) 基址尋址(6) 變址尋址(7) 比例變址尋址(8) 基址加變址尋址(9) 基址加比例變址尋址(10)帶位移的基址加變址尋址(11)帶位移的基址加比例變址尋址2. 11種尋址方式2-38 在這種尋址方式下,操作數(shù)作為立即數(shù)直接存在指令中,可為8位、16位或32位。例:MOV AX,4567HMOV BL,78HMOV ECX,12345678H(1)立即數(shù)尋址2-3978563412順序存放在指令后面2-40 在這種方式下,操作數(shù)包含在指令規(guī)定的8位、16位或32位寄存器中。例:MOV EAX,EDXINC CLMOV DS,AX 這種尋址方式指令編碼短,無(wú)需從存儲(chǔ)器取

22、操作數(shù),故執(zhí)行速度快。(2)寄存器尋址(寄存器直接尋址)2-41 指令中的操作數(shù)部分直接給出操作數(shù)有效地址EA。 與操作碼一起放在存儲(chǔ)器代碼段中,可以是16位或32位整數(shù)。 操作數(shù)一般在數(shù)據(jù)段DS中。(3)直接尋址(存儲(chǔ)器直接尋址)2-422-43 實(shí)際中對(duì)于直接尋址,如操作數(shù)在DS段中,則可直接寫成:MOV AX,3000H 如操作數(shù)在DS之外的其他段(CS,SS,ES,FS,GS)中,指令中則必須用段寄存器名前綴(稱為段超越前綴)予以指明。例如:MOV AX,FS:3000H 直接尋址主要用于單個(gè)操作數(shù)的相對(duì)尋址場(chǎng)合(如簡(jiǎn)單的標(biāo)量操作數(shù)尋址和靜態(tài)分配數(shù)組的起始地址尋址等)。2-44 操作數(shù)

23、放在存儲(chǔ)器中,但其有效地址EA在寄存器中,即: EA = 寄存器 寄存器的使用規(guī)定在16位尋址和32位尋址時(shí)不一樣。 16位: BX , BP ,SI ,DI 32位: EAX EBX,ECX,EDX ESI.EDI.EBP,ESP(4)寄存器間接尋址8個(gè)通用寄存器2-45 16位尋址時(shí),偏移地址放在SI、DI、BP或BX中。這時(shí)又有兩種段默認(rèn)情況:若以SI、DI、BX間接尋址,則默認(rèn)操作數(shù)在DS段中。 例如: MOV AX,SI ;默認(rèn)DS為段基址若以BP間接尋址,則默認(rèn)操作數(shù)在SS段中。 例如: MOV AX,BP ;默認(rèn)SS為段基址 如果操作數(shù)不在上述規(guī)定的默認(rèn)段,而是在其他段,則必須在

24、指令中相應(yīng)的操作數(shù)前加上段超越前綴。例如:MOV AX,ES:SIMOV AX,DS:BP2-462-47 32位尋址時(shí),8個(gè)32位通用寄存器均可作寄存器間接尋址。 例如:MOV EBX,EAX ;默認(rèn)DS為段基址,傳送雙字給EBXMOV DX,EBX ;默認(rèn)DS為段基址,傳送字給DXMOV CH,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-48 在這種方式下, EA=基址寄存器+位移量。 其中位移量一定

25、要為常數(shù),且跟隨在操作碼之后,與操作碼一起存放在代碼段中。16位尋址情況下,BX和BP作為基址寄存器。 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位。例如: MOV EAX,BX+24 ;也可寫成MOV EAX,24BXMOV ECX,EBP+50 ;也可寫成MOV ECX,50EBPMOV DX,EAX+1500H;也可寫成MOV DX,1500HEAX(5)基址尋址與32位寄存器間接尋址方式

26、相同2-492-50 EA=變址寄存器+位移量 指令書寫格式和尋址執(zhí)行過(guò)程與基址尋址相同; 區(qū)別僅在于將基址寄存器改成變址寄存器。(6)變址尋址 16位尋址時(shí),僅SI、DI可作變址寄存器,且 默認(rèn)DS作為段基址寄存器。如:MOV AX,COUNTSI 32位尋址時(shí), 除ESP外的任何通用寄存器均可作變址寄存器。 默認(rèn)EBP以SS作段基址寄存器, 其余均以DS作段基址寄存器。 2-51MOV EAX,5EBPMOV ECX,DATAEAX 基址、變址尋址適于對(duì)一維數(shù)組的數(shù)組元素進(jìn)行檢索操作。位移量表示數(shù)組起始地址偏移量;基址/變址表示數(shù)組元素的下標(biāo),可變。MOV ECX,DATAESP 是什么尋

27、址方式? 答案:基址尋址方式。默認(rèn)段寄存器SS 變址尋址不能使用ESP2-52在這種方式下:EA=變址寄存器比例因子+位移量這種尋址方式只適于32位尋址一種情況。例如:MOV EAX,TABLEESI*4 ;TABLE是位移量,4是比例因子(7)比例變址尋址2-532-54 比例變址尋址和基址/變址尋址的作用相似,也適用于對(duì)一維數(shù)組元素的檢索。但當(dāng)數(shù)組元素大小為2/4/8字節(jié)時(shí),用它更方便、更高效。2-55在這種尋址方式下,EA=基址寄存器+變址寄存器例如: MOV AX,BX+SI ;或?qū)懗?MOV AX,BXSI MOV AX,BPSI 它有16位尋址和32位尋址兩種情況,每種情況下基址、

28、變址寄存器的使用規(guī)定和段寄存器的默認(rèn)規(guī)定與前面所述相同。 基址寄存器與變址寄存器默認(rèn)的段寄存器不相同時(shí),一般規(guī)定由基址寄存器來(lái)決定默認(rèn)哪一個(gè)段寄存器作段基址指針。 基址加變址尋址主要用于二維數(shù)組元素的檢索和二重循環(huán)等。(8)基址加變址尋址2-562-57在這種方式下,EA= 基址寄存器 +變址寄存器比例因子它只有32位尋址一種情況。格式舉例:MOV ECX,EDX*8EAX ;或MOV ECX,EDX*8+EAXMOV AX,EBX*4ESI ;或MOV AX,EBX*4+ESI 這種方式主要用于數(shù)組元素大小為2/4/8字節(jié)時(shí)的二維數(shù)組檢索操作等場(chǎng)合。(9)基址加比例變址尋址2-58在這種方式

29、下:EA=變址寄存器+基址寄存器+位移量 這種方式也分16位尋址和32位尋址兩種情況。變址、基址寄存器的使用約定和對(duì)段寄存器的默認(rèn)約定與前面所述相同。格式舉例:MOV AX,BX+DI+MASK 或 MOVAX,MASKBXDIADD EDX,ESIEBP+0FFFF000H 或ADD EDX,0FFFF000HESIEBP 這種尋址方式也是主要用于二維數(shù)組操作,位移量即為數(shù)組起始地址。(10)帶位移的基址加變址尋址2-592-60這種方式將偏移地址四元素都用上了,即:EA=變址寄存器比例因子+基址寄存器+位移量 它只有32位尋址一種情況。各種約定和默認(rèn)情況同前所述。格式舉例:INC EDI*

30、8ECX+40 ;或INC EDI*8+ECX+40 當(dāng)二維數(shù)組的數(shù)組元素大小為2/4/8字節(jié),且數(shù)組起始地址不為0時(shí),適于用這種尋址方式進(jìn)行數(shù)組檢索操作。(11)帶位移的基址加比例變址尋址2-613.存儲(chǔ)器尋址時(shí)的段約定訪存操作類型 默認(rèn)段寄存器 允許超越的段寄存器 偏移地址寄存器堆棧操作 SS 無(wú) (E)SP取指令代碼 CS 無(wú) (E)IP源串?dāng)?shù)據(jù)訪問(wèn) DS CS、SS、ES、FS、GS (E)SI目的串?dāng)?shù)據(jù)訪問(wèn) ES 無(wú) (E)DI通用數(shù)據(jù)訪問(wèn) DS CS、SS、ES、FS、GS 偏移地址SSCS、DS、ES、FS、GS偏移地址以(E)BP、(E)SP間接尋址的指令2-624.應(yīng)用舉例

31、CPUBX 0100HSI 0002HDS 3000H30100H 12H30101H 34H30102H 56H30103H 78H31200H 2AH31201H 4CH31202H B7H31203H 65HM 例2.1 已知80486工作在實(shí)地址方式下,其中一些寄存器的內(nèi)容和一些存儲(chǔ)單元的內(nèi)容如圖所示,試指出下列各條指令執(zhí)行后,AX中的內(nèi)容。 MOV AX,2010H MOV AX,BX MOV AX,1200H MOV AX,BX MOV AX,1100HBX MOV AX,BXSI MOV AX,1100HBX+SIAX = 2010AX = 0100HAX = 4C2AHAX =

32、 3412AX = 4C2AHAX = 7856AX = 65B7H2-63數(shù)據(jù)傳送是計(jì)算機(jī)中最基本、最常用、最重要的一類操作。如:這類指令尋址方式最豐富,除POPF外,均不影響標(biāo)志寄存器的標(biāo)志位。在實(shí)際程序中,它的使用頻率最高。 各種初始化操作 取操作數(shù) 保存結(jié)果2.3.4.1數(shù)據(jù)傳送類指令2.3.4 通用整數(shù)指令及應(yīng)用2-641. 傳送指令MOV指令操作:(源操作數(shù))目的操作數(shù) 指令格式:MOV 目的操作數(shù),源操作數(shù)尋址規(guī)定: REG/MEM/SREG,REG REG/MEM, SREG REG/SREG, MEM REG/MEM, IMM2-65立即數(shù)通用寄存器(EAX、EBX、ECX、

33、EDX、 EBP、ESP、ESI、EDI)CS存儲(chǔ)器段寄存器(SS、DS、ES、FS、GS)MOV指令允許的傳送關(guān)系2-66 MOV指令使用說(shuō)明:源操作數(shù)和目的操作數(shù)的類型必須一致。目的操作數(shù)不能為立即數(shù)。CS和(E)IP均不能用作指令的目的寄存器。段寄存器間不能直接傳送,也不能直接將立即數(shù)送給段寄存器。源操作數(shù)為立即數(shù),而目的操作數(shù)類型不確定時(shí),要給目的操作數(shù)加類型說(shuō)明。源操作數(shù)和目的操作數(shù)不能同為存儲(chǔ)器操作數(shù)。 目的操作數(shù), 源操作數(shù) REG/MEM/SREG,REG REG/MEM, SREG REG/SREG, MEM REG/MEM, IMM2-67 MOV DS,100 MOV 1

34、000H,23H錯(cuò)。源、目的操作數(shù)不能同為存儲(chǔ)器尋址。 MOV 1000H,2000H錯(cuò)。立即數(shù)不能直接賦給段寄存器。錯(cuò)。目的操作數(shù)長(zhǎng)度不確定。 MOV CS,AX 錯(cuò)。不能用傳送指令改變代碼段寄存器。 MOV AX,0100H+BX+BP錯(cuò)。地址寄存器不能同為基址寄存器。 例 識(shí)別下列指令的正確性,對(duì)錯(cuò)誤的指令,說(shuō)明錯(cuò)誤的原因。MOV AX,100MOV DS,AXMOV WORD PTR 1000H,23HMOV AX,2000HMOV 1000H,AX2-682. 交換指令操作: (目的操作數(shù)) (源操作數(shù))格式:XCHG 目的操作數(shù),源操作數(shù)REG/MEM, REG REG, MEM

35、XCHG AX , CX 等價(jià)如下指令: MOV BX , AX MOV AX , CX MOV CX , BX 2-69 MOVSX ECX , AL ; (AL)= F8H ; (ECX)F= FFFF FFF8 MOVZX ECX , AX ; (AX) = FFF8H ; (ECX) = 0000 FFF8H3. 擴(kuò)展傳送指令(非8086指令) 格式: MOVSX 目的操作數(shù),源操作數(shù) MOVZX 目的操作數(shù),源操作數(shù) 操作: MOVSX:帶符號(hào)擴(kuò)展指令 MOVZX: 零擴(kuò)展指令 特點(diǎn):擴(kuò)展后數(shù)的真值不變。2-70說(shuō)明: XLAT是一條隱含尋址的指令。隱含兩個(gè)操作數(shù):DS:(E)BX存

36、放表基址,AL存放查表參數(shù)。使用前要給隱含操作數(shù)賦初值。4. 查表指令 格式: XLAT 操作: (EBX)+(AL)AL (BX)+(AL)AL2-71 例2.5 內(nèi)存中自TABLE開(kāi)始的16個(gè)單元連續(xù)存放著自然數(shù)0到15的平方值(構(gòu)成一個(gè)平方表),任給一整數(shù)M在XX單元中(該數(shù)為0M15),查表求M的平方值,并將結(jié)果存入YY單元中。解:LEA BX,TABLEMOV AL,XX XLAT MOV YY,AL TABLE 0+1 1+2 4+3 9+15 225XX 52-725. 堆棧指令PUSH/POP格式:PUSH源操作數(shù)REG16/MEM16REG32/MEM32操作: (E)SP)

37、-2/4(E)SP (源操作數(shù))(SS:(E)SP)注:286以上可以有立即數(shù)方式。(1) 壓棧指令2-73先調(diào)整指針, 然后存儲(chǔ)數(shù)據(jù);先壓高字節(jié)后壓低字節(jié)2-74格式:POP 目的操作數(shù) MEM16/MEM32/REG16/REG32操作:(SS:(E)SP)目的操作數(shù) (E)SP)+ 2/4(E)SP(2) 彈棧指令2-75先傳數(shù)據(jù), 后調(diào)整指針先彈低字節(jié)后彈高字節(jié)。2-76堆棧指令的操作數(shù)只能為字或雙字。8086只有字操作指令操作數(shù)是存儲(chǔ)器尋址時(shí),操作數(shù)長(zhǎng)度不確定時(shí), 要用PTR運(yùn)算符。PUSH和POP要成對(duì)出現(xiàn),以保持堆棧平衡堆棧指令也隱含了一個(gè)目的/源操作數(shù)堆棧。壓棧順序是先壓高字節(jié)

38、后壓低字節(jié),彈棧則是先彈低字節(jié)后彈高字節(jié)。(3)堆棧指令使用說(shuō)明:2-77 例 用堆棧操作指令將BX和CX中的兩個(gè)16位數(shù)(其中BX是高16位)組成32位數(shù)傳送到EAX寄存器中。 PUSH BX ;PUSH CX ; POP EAX EAX = BX :CX解:SP1 SP2 BHBLCHCLSP2 SS 2-78【例】 分析下列程序段的執(zhí)行情況。MOV CX , 3000HMOV SP, CX ; 設(shè)置堆棧的底 部,MOV AX, 1234H ; 設(shè)置AX初始值,MOV BX, 5678H ; 設(shè)置BX初值,PUSH AXPUSH BX ; 將AX, BX內(nèi)容 壓入堆棧POP AX POP

39、BX ; 由堆棧彈出數(shù)據(jù) 送入AX, BX中實(shí)現(xiàn)AX,BX寄存器內(nèi)容交換POP : 先傳數(shù)據(jù) , 后調(diào)整指針 ; 先彈低字節(jié)后彈高字節(jié)。PUSH: 先調(diào)整指針, 然后存儲(chǔ)數(shù)據(jù);先壓高字節(jié)后壓低字節(jié)2-796. 地址傳送指令格式:LEA 目的操作數(shù),源操作數(shù) REG16/REG32 MEM操作: REG16/REG32 EA 裝入有效地址注意: 寄存器、立即數(shù)和段寄存器都不能作為源操作數(shù)。 2-802-81說(shuō)明:I/O端口有兩種尋址方式 直接尋址,尋址范圍為0255; 間接尋址,尋址范圍為0216-1。(1) 輸入指令 格式:IN 累加器, 端口 AL/AX/EAX,IMM8 AL/AX/EAX

40、,DX 操作: AL/AX/EAX(I/O端口)7. I/O指令2-82(2) 輸出指令格式:OUT 端口, 累加器 IMM8, AL/AX/EAX DX , AL/AX/EAX操作:(AL/AX/EAX)I/O端口2-832-842-85 T+1 O+2 M+3 .+4 .+5 20+6 R+7 O+8 S+9 E+10 30+11 K+12 A+13 T+14 E+15 .+16 25NAMESDS 例 設(shè)程序在數(shù)據(jù)段中定義的數(shù)組如下: NAMES DB TOM. DB 20 DB ROSE DB 30 DB KATE. DB 25 請(qǐng)指出下列指令是否正確,如正確,A累加器中的結(jié)果是多少?

41、8. 傳送指令應(yīng)用舉例2-861. MOV BX, OFFSET NAMES MOV AL,BX+5(AL)=NAMES+5=202. MOV AX, WORD PTR NAMES+1 (AX)=NAMES+1=MO=4D4FH T+1 O+2 M+3 .+4 .+5 20+6 R+7 O+8 S+9 E+10 30+11 K+12 A+13 T+14 E+15 .+16 25NAMESDS3. MOV BX, 6 MOV SI,5 LEA DI,NAMESBXSI MOV AL,DI (DI)=NAMES偏移地址+(BX)+(SI) =NAMES偏移地址+11(AL)=NAMES+11=K=

42、4BH2-87 它的操作結(jié)果一般會(huì)影響標(biāo)志寄存器中的狀態(tài)標(biāo)志位,如ZF、CF、SF、OF、AF、PF等。2.3.4.2 算術(shù)運(yùn)算類指令2-881. 加法/減法指令 操作: ADD:(目的)+(源) 目的 SUB: (目的)-(源) 目的 ADC:(目的)+(源)+CF目的 SBB: (目的)-(源)-CF目的目的操作數(shù),源操作數(shù)REG, REG/MEM/IMMMEM, REG/IMM 格式: ADD SUB ADC SBB2-89列3.12 已知 AL = 0C1H , BL = 7FH. SUB AL , BL 人工計(jì)算: 1100 0001 (AL) - 0111 1111 (BL) =

43、0100 0010 42H AL = 42 H ,ZF= 0 , SF=0, CF = 0,AF = 1 ,PF= 1 , OF =1 負(fù)-正 = 正 ,或 C2=0 , C1=1 對(duì)于無(wú)符號(hào)數(shù), CF = 0 ,無(wú)溢出; 對(duì)于有符號(hào)數(shù), OF = 1 ,溢出。 1100 0001 + 1000 0001 ;補(bǔ)碼 ,BL 求反加1 = 1 0100 0010 ; 42H 根據(jù)補(bǔ)碼溢出判斷標(biāo)準(zhǔn),C2=1,C1=0 ,溢出; AL = 42 H ,ZF= 0 , SF=0, CF = 0,AF = 1 ,PF= 1 , OF=1 用補(bǔ)碼加法實(shí)現(xiàn)減法時(shí), CF , AF 相反。2-90特殊加減法指令

44、INC: (目的操作數(shù)) +1 目的操作數(shù)DEC: (目的操作數(shù) ) +1 目的操作數(shù) 目的操作數(shù):寄存器或存儲(chǔ)器影響狀態(tài)標(biāo)志:OF ,SF,ZF,ZF,PF。不影響CFINC SI INC WORD PTR SI INC BYTE PTR BX SIDEC ECX2-91加法/減法指令使用說(shuō)明:ADD/SUB指令用于單個(gè)字節(jié)/字/雙字?jǐn)?shù)的加/減法運(yùn)算;ADC/SBB指令則常用于多精度或多字節(jié)/多字/多雙字?jǐn)?shù)的加/減法運(yùn)算。INC/DEC REG/MEM ADD/SUB REG/MEM,1 兩者都執(zhí)行加1/減1操作,但前者不影響進(jìn)位,而后者影響。指令的異同:2-92X 34H+1 12H+2

45、78H+3 56HY EAH+1 3FH+2 33H+3 A0H解: 用8086指令 MOV AX,Y SUB X,AX ;低16位字?jǐn)?shù)據(jù)相減 MOV AX,2Y SBB 2X,AX ;高16位字?jǐn)?shù)據(jù)相減 用80386/486指令 MOV EAX,DWORD PTR Y SUB DWORD PTR X,EAX 兩個(gè)32位雙字?jǐn)?shù)據(jù)X、Y定義如下: X DW 1234H,5678H Y DW 3FEAH,A033H請(qǐng)編寫計(jì)算X=XY的程序段(低位在前)例2-932. 整數(shù)變反指令(求補(bǔ))格式: NEG 目的操作數(shù) REG/MEM操作: 0-(目的操作數(shù)) 目的操作數(shù)標(biāo)志: OF ,SF,ZF,ZF

46、,PF,CF應(yīng)用: 常用于求負(fù)數(shù)的絕對(duì)值。解: TEST AX,8000H ;測(cè)試符號(hào)位 JZ NEXT NEG AX NEXT:HLT 例 求AX中存放的有符號(hào)數(shù)的絕對(duì)值。2-943. 比較指令格式: 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-95 【例】 CMP AL, CL 指令執(zhí)行前,AL68H,CL9AH。 指令執(zhí)行: AL68H, CL9AH, CF1, ZF0, SF1

47、, AF1, OF1, PF0。 作為無(wú)符號(hào)數(shù)比較,被減數(shù)小于減數(shù),不夠減,有借位,CF1。 作為有符號(hào)數(shù)時(shí), C2C1=10,結(jié)果已超出有符號(hào)數(shù)所能表示的范圍,因此OF1,有溢出。 2-962-97單操作數(shù)乘法指令格式:MUL/IMUL 源操作數(shù) REG/MEM操作:MUL和IMUL分別為無(wú)符號(hào)數(shù)和有符號(hào)數(shù)乘法指令,兩種指令除操作數(shù)類型不同外,操作完全相同:字: (AX)(源操作數(shù))DX:AX雙字:(EAX)(源操作數(shù))EDX:EAX字節(jié):(AL)(源操作數(shù))AX源操作數(shù)4. 乘法指令2-98單操作數(shù)乘法指令的被乘數(shù)是隱含的(在AL / AX / EAX中),而結(jié)果長(zhǎng)度一定是被乘數(shù)/乘數(shù)的二

48、倍(在 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-99例2.11 解: MUL BL指令完成AL和BL中的兩個(gè)無(wú)符號(hào)數(shù)相乘:AH含有效數(shù)字, OF=1、CF=1。(AX)=0A8CH (AL) 96H(BL) 12H12C+ 96 若(AL)=96H,(BL)=12H,求分別執(zhí)行MUL BL和IMUL BL指令后的結(jié)果及O

49、F、CF狀態(tài)。2-100AH含有效數(shù)字, OF=1、CF=1。解: IMUL 執(zhí)行有符號(hào)數(shù)乘法,此時(shí)AL=96H中的數(shù)是負(fù)數(shù),真值為-6AH,即:用補(bǔ)碼表示: (AX)= F88CH(AX)= -774H (AL) 6AH(BL) 12HD4+ 6A2-1015. 除法指令格式:DIVIDIV 源操作數(shù)(除數(shù)) REG/MEM操作:按源操作數(shù)類型:狀態(tài)標(biāo)志不確定字節(jié): (AX)/(源),商存于AL中,余數(shù)存于AH字: (DX:AX)/(源),商存于AX中,余數(shù)存于DX雙字:(EDX:EAX)/(源),商在EAX中,余數(shù)在EDX2-102說(shuō)明: 除法指令的被除數(shù)是隱含的,且長(zhǎng)度一定是除數(shù)的二倍(

50、在AX,DX:AX ,EDX:EAX中)。使用除法指令常要擴(kuò)展被除數(shù)長(zhǎng)度。 擴(kuò)展時(shí)無(wú)符號(hào)數(shù)一般用: MOVZX AX,AL MOV DX,0 MOV EDX,0 有符號(hào)數(shù)一般用:CBW/CWD/CDQ。 CBW : 等價(jià)指令 MOVSX AX , AL CWD : AX 帶符號(hào)擴(kuò)展 DX:AX 源操作數(shù)無(wú)立即數(shù)。2-103 MOV AX,a ; ; ab在CX:BX中 MOV AX,c ;c在DX:AX中 ;ab+c在DX:AX中 ;(ab+c)/a,商存入S IMUL bMOV CX,DXMOV BX,AXCWDADD AX,BXADC DX,CXIDIV aMOV S,AX 例2.12 下

51、列程序段完成S=(ab+c)/a的運(yùn)算,其中變量a、b、c和S均為帶符號(hào)的字?jǐn)?shù)據(jù),結(jié)果的商存入S,余數(shù)則不計(jì),填空完成下列程序。2-104 格式: AAAAASAAMAADDAADAS 功能:AAA/AAS: 未組合BCD加法/減法調(diào)整指令, 隱含操作 數(shù)為AL。DAA/DAS: 組合BCD加法/減法調(diào)整指令, 隱含操作數(shù)為AL。6. BCD調(diào)整指令2-105例解: MOV AL,BYTE PTR X ADD AL,BYTE PTR Y ; 低位相加 DAA ; BCD碼調(diào)整 MOV BYTE PTR X,AL ; 保存低位結(jié)果 MOV AL ,BYTE PTR X1 ; 取字變量的高字節(jié) A

52、DC AL ,BYTE PTR Y1 ; 高位相加 DAA MOV BYTE PTR X1,AL ; X = 7412兩個(gè)4位壓縮BCD碼定義如下: X DW 3578H Y DW 3834H 請(qǐng)編寫計(jì)算X+Y的程序段。 多字節(jié)BCD加法/減法只能用帶進(jìn)位/借位的 字節(jié)加法/減法指令實(shí)現(xiàn)。2-106 AAM : 未組合BCD乘法調(diào)整指令, 隱含操作數(shù)AX。 將AX中乘積調(diào)整為兩個(gè)未組合BCD數(shù)存于AH 和AL。AAD : 調(diào)整除法運(yùn)算前AX中的被除數(shù)內(nèi)容。 操作:(AH)10+(AL)AX【例】 設(shè)AL , BL 是未壓縮BCD碼 MUL BL ;AL * BL - AX AAM指令執(zhí)行前,A

53、L07H, BL09H。執(zhí)行MUL后,AL3FH=63。 執(zhí)行AAM后,AH06H, AL03H。2-107 程序段MOVAX,405HMOVBL,06HAADDIVBL 執(zhí)行后AX的內(nèi)容為 。 A.307H B.703H C.4231H D.806H A例2-108 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é)

54、果仍為ASCII碼,則需轉(zhuǎn)換。 AAD指令的功能不是將除法后的結(jié)果調(diào)整為BCD碼,而是 在除法前將AX保存的兩位非壓縮BCD數(shù)調(diào)整為二進(jìn)制 數(shù)。該指令要放在DIV指令之前。2-109 2-110功能:分別按位進(jìn)行邏輯“與”、“或”、“異或”、“測(cè)試”和“非”。格式:AND OR XOR TEST 目標(biāo)操作數(shù),源操作數(shù) REG, REG/MEM/IMM MEM, REG/IMM NOT 目標(biāo)操作數(shù) REG/MEM2.3.4.3 邏輯運(yùn)算與移位指令1. 邏輯運(yùn)算指令2-111AND AL , DATAOR AL , DATAXOR AL ,DATANOT DATANEG DATAAND AL ,

55、0FHOR AL , 01HXOR AL , 0FFHTEST AL , 80H設(shè) AL = 0C4H = 1100 0100B ( DATA ) = 5AH = 0101 1010B(AL) = 0100 0000(AL) = 1101 1110(AL) = 1001 1110(DATA)= 1010 0101(DATA)= 1010 0110(AL) = 0000 0100(AL) = 1100 0101(AL) = 0011 1011(AL) = 原值CF=OF=0,ZF=0,SF=1,PF=02-112使用說(shuō)明: 編程時(shí)要根據(jù)操作合理選用指令,一般: 對(duì)某些二進(jìn)制位清零用邏輯與指令A(yù)N

56、D; 對(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)位。2-113 AND指令與TEST指令的區(qū)別: 相同: 都執(zhí)行按位“與”操作, 對(duì)狀態(tài)標(biāo)志位的影響相同, 不同: AND改變目標(biāo)操作數(shù)的值, TEST并不改變目標(biāo)操作數(shù)的值。 所以TEST指令與CMP指令的用法類似,用于產(chǎn)生按位測(cè)試的條件碼。2-114 例 已知寄存器DX:AX的內(nèi)容為32位帶符號(hào)數(shù),編寫一段程序使DX:AX的內(nèi)容成為原來(lái)數(shù)據(jù)的絕對(duì)值

57、。解: TEST DX,8000H ;測(cè)試符號(hào)位,產(chǎn)生狀態(tài) JZ EXIT ;符號(hào)位=0,結(jié)束 NEG DX ;求絕對(duì)值 NEG AX SBB DX,0EXIT:HLT2-1152-1162. 移位指令 移位指令包括:算術(shù)移位指令(SAL/SAR)邏輯移位指令(SHL/SHR)循環(huán)移位指令(ROR/ROL/RCR/RCL)雙精度移位指令(SHLD/SHRD)2-117 算術(shù)移位只對(duì)帶符號(hào)數(shù)進(jìn)行移,在移位過(guò)程中必須保持符號(hào)位不變。 邏輯移位是對(duì)無(wú)符號(hào)數(shù)移位,移位時(shí),總是用0來(lái)填補(bǔ)已空出的數(shù)位。 每左移一位,相當(dāng)于將原數(shù)據(jù)乘以2; 每右移一位,相當(dāng)于將原數(shù)據(jù)除以2。 根據(jù)移位操作的結(jié)果置標(biāo)志寄存器

58、中的狀態(tài)標(biāo)志(AF位除外)。 若移位的次數(shù)是1: SHL ,SAL 移位后的結(jié)果使最高位(符號(hào)位)發(fā)生變化(CFSF ),則 將溢出標(biāo)志OF置1; SAR :OF = 0 ; SHR :OF = 右移動(dòng)前的最高位; 若移次數(shù)大于1時(shí),OF標(biāo)志無(wú)效。邏輯移位算術(shù)移位2-118 ROL和ROR指令在執(zhí)行時(shí),沒(méi)有把CF套在循環(huán)中,常稱為小循環(huán)移位。 RCL和RCR指令在執(zhí)行時(shí),連同CF一起循環(huán)移位,稱為大循環(huán)移位。 以上四條指令僅影響標(biāo)志位CF和OF。 對(duì)OF的影響是: 新的符號(hào)位與原來(lái)的符號(hào)位不同(CFSF) ,則使OF1, 注意:指令RCR溢出測(cè)試在循環(huán)以前進(jìn)行;循環(huán)移位指令2-119使用說(shuō)明:

59、 移位指令常用于二進(jìn)制數(shù)的倍乘和倍除,即算術(shù)/邏輯移n位,相當(dāng)于把二進(jìn)制數(shù)乘以或除以2n。要注意算術(shù)右移(SAR)與邏輯右移(SHR)的區(qū)別: SAR在符號(hào)位和數(shù)值位依次右移的同時(shí),用符號(hào)位充填符號(hào)位; SHR用0充填符號(hào)位。 有符號(hào)和無(wú)符號(hào)數(shù)倍乘用SHL/SAL均可; 有符號(hào)數(shù)用SAR和無(wú)符號(hào)數(shù)用SHR。循環(huán)指令也常用于循環(huán)控制,如邏輯尺控制循環(huán)。2-120 例 試編寫用移位和加法指令完成計(jì)算: (EAX)9/4 的程序段。 解: (EAX)9/4=(EAX)8+(EAX)/4MOV EBX,EAX ;保存EAXSAL/SHL EAX,3 ;(EAX)8EAXADD EAX,EBX ;(EA

60、X)8+(EAX)EAXSAR/SHR EAX,2 ;(EAX)9/4EAX2-121串操作約定: 用DS:(E)SI尋址源串,允許段超越; 用ES:(E)DI尋址目的串,但ES段不能超越; 由DF標(biāo)志位決定(E)SI,(E)DI 指針增減: DF=0,遞增;DF=1,遞減; 指令執(zhí)行完成后, (E)SI,(E)DI 指向下一個(gè)單元。 由串長(zhǎng)度(字節(jié)、字、雙字)決定指針增減量大?。?帶重復(fù)前綴時(shí),用(E)CX作重復(fù)計(jì)數(shù)器。 2.3.3.4 串操作類指令2-1221. 串傳送指令 格式: MOVSB/MOVSW/MOVSD MOVS 目的串,源串 MEM, MEM操作: 將DS:(E)SI所指的

溫馨提示

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

評(píng)論

0/150

提交評(píng)論