版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章微處理器和指令系統(tǒng)參考書(shū)目:1、《計(jì)算機(jī)組成技術(shù)》李東,黃慶成等主編電子工業(yè)出版社2、《計(jì)算機(jī)組成原理》唐朔飛主編高等教育出版社12第二章微處理器和指令系統(tǒng)2.18086微處理器的內(nèi)部結(jié)構(gòu)2.2 尋址方式2.3處理器的指令系統(tǒng)2.4 流水線技術(shù)2.5
RISC3微處理器概述:
從外觀上看處理器:矩形或正方形的塊狀物,通過(guò)眾多引腳(也稱(chēng)管腳)與主板相連。
片內(nèi)總線:處理器內(nèi)部,分為片內(nèi)控制總線和片內(nèi)數(shù)據(jù)總線。片外總線:處理器與主存儲(chǔ)器和輸入/輸出設(shè)備之間信號(hào)傳輸?shù)木€路,簡(jiǎn)稱(chēng)總線。2.18086微處理器的內(nèi)部結(jié)構(gòu)48086是全16位微處理器(內(nèi)外數(shù)據(jù)總線都為16位)8088是準(zhǔn)16位微處理器(內(nèi)數(shù)據(jù)總線為16位,外數(shù)據(jù)總線為8位)8086/8088除了外數(shù)據(jù)總線位數(shù)及與此相關(guān)的部分邏輯稍有差別外,內(nèi)部結(jié)構(gòu)和基本性能相同,指令系統(tǒng)完全兼容。
58086的引腳圖14023933843753663573483393210311130122913281427152616251724182319222021地AD14AD13AD12AD11AD10AD9AD8AD7AD6AD5AD4AD3AD2AD1AD0NMIINTRCLK地Vcc(5V)AD15A16/S3A17/S4A18/S5A19/S6BHE/S7MN/MXRDHOLD(RQ/GT0)HLDA(RQ/GT1)WR(LOCK)M/IO(S2)DT/R(S1)DEN(S0)ALE(QS0)INTA(QS1)TESTREADYRESETADi表示地址總線與數(shù)據(jù)總線復(fù)用同一個(gè)引腳Ai/Si表示地址總線與控制總線復(fù)用同一個(gè)引腳。這叫做總線分時(shí)復(fù)用。68088的引腳圖14023933843753663573483393210311130122913281427152616251724182319222021地A14A13A12A11A10A9A8AD7AD6AD5AD4AD3AD2AD1AD0NMIINTRCLK地Vcc(5V)A15A16/S3A17/S4A18/S5A19/S6SS(HIGH)MN/MXRDHOLD(RQ/GT0)HLDA(RQ/GT1)WR(LOCK)M/IO(S2)DT/R(S1)DEN(S0)ALE(QS0)INTA(QS1)TESTREADYRESET8位的數(shù)據(jù)總線NMI非屏蔽中斷請(qǐng)求信號(hào)輸入INTR可屏蔽中斷請(qǐng)求信號(hào)輸入INTA中斷響應(yīng)信號(hào)輸出地址鎖存信號(hào)輸出7電源引腳(Vcc),接地引腳(GND)按照傳輸信號(hào)類(lèi)別的不同,這些引腳可以分為數(shù)據(jù)總線引腳、地址總線引腳和控制總線引腳數(shù)據(jù)總線引腳:若數(shù)據(jù)總線的寬度是8位,則數(shù)據(jù)總線引腳將被命名為D0,D1,…,D7;若數(shù)據(jù)總線的寬度是16位,則數(shù)據(jù)總線引腳將被命名為D0,D1,…,D15。8地址總線引腳:若處理器的訪存地址寬度是10位,則地址總線引腳將被命名為A0,A1,…,A9;若處理器的訪存地址寬度是20位,則地址總線引腳將被命名為A0,A1,…,A19控制總線引腳:時(shí)鐘CLK、復(fù)位RESET、總線請(qǐng)求HRQ、總線允許HLDA、中斷請(qǐng)求INTR、中斷響應(yīng)INTA、讀RD、寫(xiě)WR等。
9在8086/8088的設(shè)計(jì)中,引入了兩個(gè)重要的結(jié)構(gòu)概念:1、指令流水線2、存儲(chǔ)器分段管理這兩個(gè)概念在以后升級(jí)的Intel系列微處理器中一直被沿用和發(fā)展。正是這兩個(gè)概念的引入,使8086/8088比原來(lái)的8位MPU在運(yùn)行速度、處理能力和對(duì)存儲(chǔ)空間的訪問(wèn)等性能方面有很大提高。108086/8088在結(jié)構(gòu)上分為:總線接口部件(BusInterfaceUnit,BIU)執(zhí)行部件(ExecutingUnit,EU)總線接口部件負(fù)責(zé)取指令,執(zhí)行部件負(fù)責(zé)執(zhí)行指令,從而構(gòu)成了一個(gè)“兩段的流水線”。取指令1執(zhí)行指令1時(shí)間TEUBIU取指令2執(zhí)行指令2取指令3執(zhí)行指令31、指令流水線結(jié)構(gòu)11654321通用寄存器組AXBXCXDX外部總線內(nèi)部暫存器IPESSSDSCS運(yùn)算寄存器ALU標(biāo)志輸入輸出控制電路∑執(zhí)行部分控制電路執(zhí)行部件(EU)總線接口部件(BIU)內(nèi)部總線地址加法器16位16位20位16位(1)執(zhí)行部件EU
執(zhí)行部件的功能就是負(fù)責(zé)從指令隊(duì)列取指令并執(zhí)行。從結(jié)構(gòu)圖可見(jiàn),執(zhí)行部件由下列幾個(gè)部分組成:
(1)算術(shù)邏輯單元ALU
(2)標(biāo)志寄存器FLAG;(3)數(shù)據(jù)暫存寄存器;
(4)通用寄存器組:包括4個(gè)16位位數(shù)據(jù)寄存器AX、BX、CX、DX;4個(gè)16位地址指針與變址寄存器SP,BP,SI,DI。
(5)EU控制電路
(2)總線接口部件(BIU)
總線接口部件根據(jù)執(zhí)行部件的請(qǐng)求,負(fù)責(zé)與存儲(chǔ)器、I/O端口傳送數(shù)據(jù)。由下列各部分組成:(1)4個(gè)段地址寄存器;
CS——16位的代碼段寄存器;
DS——16位的數(shù)據(jù)段寄存器;
ES——16位的擴(kuò)展段寄存器;
SS——16位的堆棧段寄存器;(2)16位的指令指針寄存器IP;(3)20位的地址加法器;(4)6字節(jié)的指令隊(duì)列緩沖器。(3)“流水線”結(jié)構(gòu)
每當(dāng)8086的指令隊(duì)列中有1個(gè)或2個(gè)空字節(jié),BIU就會(huì)自動(dòng)把指令取到指令隊(duì)列中。而同時(shí)EU從指令隊(duì)列取出一條指令,并用幾個(gè)時(shí)鐘周期去分析、執(zhí)行指令。當(dāng)指令隊(duì)列已滿(mǎn),而且EU對(duì)BIU又無(wú)總線訪問(wèn)請(qǐng)求時(shí),BIU便進(jìn)入空閑狀態(tài)。在執(zhí)行轉(zhuǎn)移、調(diào)用和返回指令時(shí),指令隊(duì)列中的原有內(nèi)容被自動(dòng)清除,并要求BIU從新的地址重新開(kāi)始取指令,新取的第一條指令將直接經(jīng)指令隊(duì)列送到EU去執(zhí)行,隨后取來(lái)的指令將填入指令隊(duì)列緩沖器。
寄存器用來(lái)暫時(shí)存放參加運(yùn)算的操作數(shù)和運(yùn)算過(guò)程中的中間結(jié)果,使得在程序執(zhí)行的過(guò)程中不必每時(shí)每刻都要到存儲(chǔ)器中存取數(shù)據(jù)。8086CPU中可供編程使用的有14個(gè)16位寄存器,按其用途可分為3類(lèi):通用寄存器、段寄存器、指針和標(biāo)志寄存器。8086/8088的寄存器組結(jié)構(gòu)16DISIBPSPDLDHCLCHBLBHALAHFRIPESSSDSCS數(shù)據(jù)寄存器指針寄存器和變址寄存器段寄存器指令指針標(biāo)志寄存器AXBXCXDX作為累加器用,在加法運(yùn)算中參與運(yùn)算,結(jié)果存于累加器中;所有的I/O指令都隱含地使用AX與外部設(shè)備傳送信息。作為通用寄存器使用在采用基址尋址方式時(shí),用作基址寄存器作為通用寄存器使用;常用來(lái)保存計(jì)數(shù)值,如在移位指令、循環(huán)指令和串處理指令中用作隱含的計(jì)數(shù)器。作為通用寄存器使用;在一些指令中,通常用它來(lái)存放數(shù)據(jù),所以又稱(chēng)為數(shù)據(jù)寄存器;在做雙字長(zhǎng)運(yùn)算時(shí),將DX和AX組合在一起存放雙字長(zhǎng)數(shù),用DX存放高位字。當(dāng)前代碼段的段地址,指令就是從這段取出當(dāng)前代碼段的偏移地址。又稱(chēng)為程序計(jì)數(shù)器,控制程序中指令執(zhí)行的順序基址指針寄存器,指示一組數(shù)據(jù)的起始地址源變址寄存器目的變址寄存器用于確定數(shù)據(jù)段中某一存儲(chǔ)單元的地址指向數(shù)據(jù)段,程序變量存于此段指向附加段,這個(gè)段用來(lái)存放經(jīng)過(guò)處理的中間數(shù)據(jù)堆棧指針寄存器,指示堆棧棧頂?shù)钠频刂分赶蚨褩6危褩2僮魇褂眠@段存儲(chǔ)空間17
8086/8088的標(biāo)志寄存器(FR):
(1)狀態(tài)標(biāo)志:狀態(tài)標(biāo)志表示前面操作執(zhí)行后,算術(shù)邏輯單元所處的狀態(tài),這些狀態(tài)常作為后繼指令執(zhí)行的條件。狀態(tài)標(biāo)志有6個(gè):符號(hào)標(biāo)志(SF)、零標(biāo)志(ZF)、奇偶標(biāo)志(PF)、進(jìn)位標(biāo)志(CF)、輔助進(jìn)位標(biāo)志(AF)和溢出標(biāo)志(OF)。(2)控制標(biāo)志:是人為設(shè)置的,每一個(gè)控制標(biāo)志負(fù)責(zé)控制某一種特殊的功能。控制標(biāo)志有3個(gè):方向標(biāo)志(DF)、中斷標(biāo)志(IF)和陷阱標(biāo)志(TF)18狀態(tài)標(biāo)志(1)符號(hào)標(biāo)志SF。與計(jì)算結(jié)果的最高位相同,表示計(jì)算結(jié)果的正/負(fù)。0表示正,1表示負(fù)。(2)零標(biāo)志ZF。若計(jì)算結(jié)果為零,則ZF=1,否則=0。(3)奇偶標(biāo)志PF。若計(jì)算結(jié)果的低8位中1的個(gè)數(shù)為偶數(shù),則PF=1,否則=0。(4)進(jìn)位標(biāo)志CF。若執(zhí)行的加法運(yùn)算在最高位產(chǎn)生進(jìn)位,或者執(zhí)行的減法運(yùn)算引起最高位產(chǎn)生借位,則CF=1,否則=0。此外,帶進(jìn)位的循環(huán)移位也可能會(huì)改變CF??梢杂弥噶頢TC將CF置1,用指令CLC將CF清0,用指令CMC將CF取反。19狀態(tài)標(biāo)志(5)輔助進(jìn)位標(biāo)志AF。若執(zhí)行加法運(yùn)算時(shí)第3位向第4位進(jìn)位(即低半字節(jié)向高半字節(jié)),或者執(zhí)行減法運(yùn)算時(shí)第3位從第4位借位,則AF=1,否則=0。(6)溢出標(biāo)志OF。若計(jì)算過(guò)程產(chǎn)生溢出,則OF=1,否則=0。溢出是指字節(jié)運(yùn)算的結(jié)果超出了–128~+127的范圍,或者字運(yùn)算的結(jié)果超出了–32768~+32767的范圍。在進(jìn)行加法運(yùn)算時(shí),每當(dāng)次高位向最高位有進(jìn)位而最高位沒(méi)有向前進(jìn)位,或者最高位向前進(jìn)位而次高位沒(méi)有向最高位進(jìn)位,則ALU置OF為1。20控制標(biāo)志(1)方向標(biāo)志DF。這是控制串操作指令的標(biāo)志。若DF=0,則串操作過(guò)程中地址將不斷增值,否則不斷減值。可用指令STD將DF置1,用指令CLD將DF清0。(2)中斷標(biāo)志IF。這是控制可屏蔽中斷的標(biāo)志。如果IF=0,則8086/8088對(duì)可屏蔽中斷請(qǐng)求不能做出響應(yīng),否則可以響應(yīng)可屏蔽中斷請(qǐng)求??捎弥噶頢TI將IF置1,用指令CLI將IF清0?!皩F置1”稱(chēng)為“開(kāi)中斷”,“將IF清0”稱(chēng)為“關(guān)中斷”。21控制標(biāo)志(3)陷阱標(biāo)志TF。這是控制8086/8088是否進(jìn)入單步執(zhí)行狀態(tài)的標(biāo)志。若TF=1,則8086/8088進(jìn)入單步執(zhí)行狀態(tài)或跟蹤方式執(zhí)行指令狀態(tài),即每條指令執(zhí)行完后,微處理器暫停(進(jìn)入陷阱),顯示處理器內(nèi)部各寄存器的值。進(jìn)入單步執(zhí)行狀態(tài)便于程序的調(diào)試。如果TF=0,則連續(xù)執(zhí)行指令。
222、存儲(chǔ)器分段管理結(jié)構(gòu)存儲(chǔ)器為什么要分段呢?16位微處理器,常規(guī)上管理216=64KB的存儲(chǔ)空間這樣的存儲(chǔ)空間滿(mǎn)足不了應(yīng)用的要求。用什么方法來(lái)擴(kuò)大呢?將正常管理的64KB存儲(chǔ)空間定義為一個(gè)段讓微處理器能夠管理多個(gè)這樣的段通過(guò)分段存儲(chǔ)結(jié)構(gòu),8086/8088能夠管理1MB的存儲(chǔ)空間23存儲(chǔ)器分段后如何來(lái)管理呢?每個(gè)段的起始地址稱(chēng)為:段基址或段地址每個(gè)段內(nèi)的地址稱(chēng)為:段內(nèi)偏移地址一個(gè)物理存儲(chǔ)單元就可以通過(guò)“段地址:偏移地址”來(lái)唯一確定了如何管理“段地址”和“偏移地址”呢?設(shè)置多個(gè)段基址寄存器設(shè)置多個(gè)偏移地址寄存器都有哪些“段基址寄存器”和“偏移地址寄存器”呢?24依照用途的不同,可分為如下段代碼段(CodeSegment,CS)數(shù)據(jù)段(Data
Segment,DS)堆棧段(StackSegment,SS)附加數(shù)據(jù)段(ExtendedData
Segment,ES)存儲(chǔ)程序(指令)代碼。其段基址存放于CS寄存器,段內(nèi)偏移地址存放于IP寄存器存儲(chǔ)程序定義的變量。段基址存放于DS寄存器,段內(nèi)偏移地址存放于SI、DI或BX寄存器管理系統(tǒng)堆棧。段基址存放于SS寄存器,段內(nèi)偏移地址存放于SP或BP寄存器存儲(chǔ)經(jīng)過(guò)處理的中間變量。段基址存放于ES寄存器,段內(nèi)偏移地址存放于SI、DI或BX寄存器存儲(chǔ)器分段管理結(jié)構(gòu)25邏輯地址:由段基址和相對(duì)于該段的偏移地址共同描述的地址00000H----FFFFFH例如:52000H例如:5000H:2000H段基址偏移地址段基址寄存器管理程序設(shè)計(jì)中使用的,方便程序設(shè)計(jì)物理地址:20根地址線所表示的地址
260000段地址如何根據(jù)16位的段地址和16位的段內(nèi)偏移地址來(lái)計(jì)算20位的物理地址呢?
19…43…0段地址左移四位偏移地址151413……210∑20位的物理地址27物理地址的計(jì)算方法段地址左移四位,再加上偏移地址,就得到20位的物理地址。5000H:2000H邏輯地址52000H物理地址計(jì)算尋址內(nèi)存…………..00000HFFFFFH282.2尋址方式
所謂尋址方式(Addressing)指的是指令按照何種方式尋找或訪問(wèn)到所需的操作數(shù)或信息。尋址方式分為指令尋址和數(shù)據(jù)尋址。指令尋址是為了找到下一條指令;數(shù)據(jù)尋址是為了找到本條指令所需的操作數(shù)。
29順序(PC)+1PC跳躍由轉(zhuǎn)移指令指出LDA1000ADD1001DEC1200JMP7LDA2000SUB2001INCSTA2500LDA1100...0123456789PC+1指令地址尋址方式指令地址指令順序?qū)ぶ?順序?qū)ぶ?順序?qū)ぶ?跳躍尋址7順序?qū)ぶ?2.2尋址方式
1.指令尋址
302.2尋址方式
(1)立即數(shù)尋址(2)直接尋址(3)間接尋址(4)寄存器尋址
1.指令尋址
2.數(shù)據(jù)尋址
(5)寄存器間接尋址(6)基址尋址(7)變址尋址(8)堆棧尋址31形式地址指令字中的地址有效地址操作數(shù)的真實(shí)地址約定
指令字長(zhǎng)=存儲(chǔ)字長(zhǎng)=機(jī)器字長(zhǎng)1.立即尋址指令執(zhí)行階段不訪存
A的位數(shù)限制了立即數(shù)的范圍形式地址A操作碼尋址特征OP
#
A立即尋址特征立即數(shù)可正可負(fù)補(bǔ)碼形式地址A就是操作數(shù)立即數(shù)尋址MOVAX,4567H;將立即數(shù)4567H送到AXMOVBL,78H;將立即數(shù)78H送到BL32332.直接尋址EA=A操作數(shù)主存尋址特征LDAAAACC
執(zhí)行階段訪問(wèn)一次存儲(chǔ)器
A的位數(shù)決定了該指令操作數(shù)的尋址范圍操作數(shù)的地址不易修改(必須修改A)有效地址由形式地址直接給出直接尋址MOVAX,DS:[3000H]34353.間接尋址EA=(A)有效地址由形式地址間接提供OPA尋址特征AEA主存EAA1EA
A1主存
EA10執(zhí)行指令階段2次訪存可擴(kuò)大尋址范圍便于編制程序OPA尋址特征A一次間址多次間址操作數(shù)操作數(shù)多次訪存364.寄存器尋址EA=Ri執(zhí)行階段不訪存,只訪問(wèn)寄存器,執(zhí)行速度快OPRi尋址特征寄存器個(gè)數(shù)有限,可縮短指令字長(zhǎng)操作數(shù)………………R0RiRn寄存器有效地址即為寄存器編號(hào)MOVEAX,EDXINCCLMOVEAX,EDXINCCL37EA=(Ri
)5.寄存器間接尋址
有效地址在寄存器中,操作數(shù)在存儲(chǔ)器中,執(zhí)行階段訪存操作數(shù)主存OPRi尋址特征
便于編制循環(huán)程序地址………………R0RiRn寄存器有效地址在寄存器中寄存器間接尋址MOVAX,[BP]38396.基址尋址(1)采用專(zhuān)用寄存器作基址寄存器EA=(BR)+ABR為基址寄存器OPA操作數(shù)主存尋址特征ALUBR
可擴(kuò)大尋址范圍
便于程序搬家
BR內(nèi)容由操作系統(tǒng)或管理程序確定
在程序的執(zhí)行過(guò)程中BR內(nèi)容不變,形式地址A可變40(2)
采用通用寄存器作基址寄存器操作數(shù)主存尋址特征ALUOPR0AR0
作基址寄存器由用戶(hù)指定哪個(gè)通用寄存器作為基址寄存器通用寄存器R0Rn-1R1…基址寄存器的內(nèi)容由操作系統(tǒng)確定在程序的執(zhí)行過(guò)程中R0內(nèi)容不變,形式地址A可變41MOVDX,[AX+15]427.變址尋址EA=(IX)+AOPA操作數(shù)主存尋址特征ALUIX可擴(kuò)大尋址范圍便于處理數(shù)組問(wèn)題
IX的內(nèi)容由用戶(hù)給定IX為變址寄存器(專(zhuān)用)在程序的執(zhí)行過(guò)程中IX內(nèi)容可變,形式地址A不變通用寄存器也可以作為變址寄存器43MOVAX,[DI+MASK]448.堆棧尋址(1)堆棧的特點(diǎn)堆棧硬堆棧軟堆棧多個(gè)寄存器指定的存儲(chǔ)空間先進(jìn)后出(一個(gè)入出口)棧頂?shù)刂?/p>
由SP
指出–11FFFH+12000H進(jìn)棧(SP)–1SP出棧(SP)+1SP棧頂棧底2000HSP2000H……1FFFHSP1FFFH棧頂棧底進(jìn)棧出棧1FFFH棧頂2000H棧頂45(2)堆棧尋址舉例15200HACCSPX棧頂200H棧底主存151FFHACCSP15棧頂200H棧底主存X1FFHPUSHA前PUSHA后POPA前POPA后Y1FFHACCSPX棧頂200H棧底主存151FFH15200HACCSP棧頂200H棧底主存X1546例:假定8086工作在實(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.3.1指令的操作碼與操作數(shù)指令操作碼(OperationCode)指令操作數(shù)(Operand)馮·諾依曼型計(jì)算機(jī)機(jī)器指令的邏輯格式規(guī)定了指令所具有的功能。課程中主要用匯編語(yǔ)言助記符表示。指令所要處理的數(shù)據(jù)。常以數(shù)據(jù)所在存儲(chǔ)單元的地址形式給出。也稱(chēng)“指令地址碼”。2.3處理器的指令系統(tǒng)
2.3.1指令的操作碼與操作數(shù)一條指令中,操作數(shù)可能有一個(gè)、兩個(gè)或三個(gè),甚至更多。當(dāng)然,操作數(shù)的個(gè)數(shù)也可以是零,即指令沒(méi)有操作數(shù),如停機(jī)指令。在這些操作數(shù)中,作為處理單元輸入的叫源操作數(shù)(SourceOperand),用于存放處理結(jié)果的叫目的操作數(shù)(DestinationOperand)。2.3處理器的指令系統(tǒng)
2.3.1指令的操作碼與操作數(shù) “數(shù)據(jù)表示”:指令中所能表示的操作數(shù)數(shù)據(jù)類(lèi)型,即能夠被計(jì)算機(jī)硬件直接辨識(shí)的操作數(shù)數(shù)據(jù)類(lèi)型。 常用的“數(shù)據(jù)表示”有定點(diǎn)數(shù)(含有符號(hào)數(shù)和無(wú)符號(hào)數(shù))、浮點(diǎn)數(shù)(含單精度浮點(diǎn)數(shù)和雙精度浮點(diǎn)數(shù))、字符、邏輯數(shù)(又稱(chēng)布爾型數(shù)據(jù)),可以由硬件直接提供。2.3處理器的指令系統(tǒng)
2.3.1指令的操作碼與操作數(shù)
“數(shù)據(jù)結(jié)構(gòu)”:程序員在程序中所能夠使用的數(shù)據(jù)類(lèi)型及其之間的結(jié)構(gòu)關(guān)系。比如:數(shù)組、字符串、結(jié)構(gòu)體、隊(duì)列、鏈表、樹(shù)、圖、堆棧等。在硬件的基礎(chǔ)上由軟件實(shí)現(xiàn)“數(shù)據(jù)表示”是數(shù)據(jù)結(jié)構(gòu)的組成元素,是數(shù)據(jù)結(jié)構(gòu)的子集。2.3處理器的指令系統(tǒng)
512.3處理器的指令系統(tǒng)
通用計(jì)算機(jī)系統(tǒng)的指令集可分為5類(lèi)基本指令:(1)算術(shù)/邏輯/移位指令(簡(jiǎn)稱(chēng)算邏指令)(2)數(shù)據(jù)傳送指令(簡(jiǎn)稱(chēng)數(shù)傳指令)(3)控制轉(zhuǎn)移指令(4)輸入/輸出指令(5)處理器控制及調(diào)試指令2.3.2指令的基本功能
52(1)算邏指令定點(diǎn)加法指令A(yù)DD定點(diǎn)減法指令SUB定點(diǎn)乘法指令MUL定點(diǎn)除法指令DIV加1指令I(lǐng)NC減1指令DEC比較指令CMP浮點(diǎn)加法指令A(yù)DDF浮點(diǎn)減法指令SUBF浮點(diǎn)乘法指令MULF浮點(diǎn)除法指令DIVF十進(jìn)制數(shù)算術(shù)運(yùn)算指令使用這些指令時(shí),要注意它們對(duì)處理器中狀態(tài)標(biāo)志位的影響算術(shù)指令2.3.2指令的基本功能
53(1)算邏指令“與”運(yùn)算指令A(yù)ND“或”運(yùn)算指令OR“非”運(yùn)算指令NOT“異或”運(yùn)算指令XOR位測(cè)試位清除位求反
算術(shù)左移指令算術(shù)右移指令邏輯左移指令邏輯右移指令帶進(jìn)位循環(huán)左移指令不帶進(jìn)位循環(huán)左移指令帶進(jìn)位循環(huán)右移指令不帶進(jìn)位循環(huán)右移指令邏輯指令移位指令2.3.2指令的基本功能
54(2)數(shù)傳指令根據(jù)數(shù)據(jù)的流向分:寄存器與寄存器之間的數(shù)據(jù)傳送寄存器與主存儲(chǔ)器單元之間的數(shù)據(jù)傳送寄存器與堆棧之間的數(shù)據(jù)傳送堆棧與主存儲(chǔ)器單元之間的數(shù)據(jù)傳送內(nèi)存單元與內(nèi)存單元之間的數(shù)據(jù)傳送2.3.2指令的基本功能
55(2)數(shù)傳指令根據(jù)傳輸?shù)墓δ芊郑阂话銈魉椭噶顚?shí)現(xiàn)數(shù)據(jù)復(fù)制功能,即把源操作數(shù)的內(nèi)容寫(xiě)入目的操作數(shù)。其匯編語(yǔ)言助記符通常為MOV。在有些計(jì)算機(jī)上,將主存儲(chǔ)器單元的內(nèi)容寫(xiě)入寄存器的數(shù)據(jù)傳送指令,其匯編語(yǔ)言助記符為L(zhǎng)OAD;將寄存器內(nèi)容寫(xiě)入主存儲(chǔ)器單元的數(shù)據(jù)傳送指令,其匯編語(yǔ)言助記符為STORE。2.3.2指令的基本功能
56(2)數(shù)傳指令根據(jù)傳輸?shù)墓δ芊郑憾褩2僮髦噶顗喝霔m擯USH彈出棧頂POPPUSH的源操作數(shù)和POP指令的目的操作數(shù),一般是寄存器號(hào),但也可能是主存儲(chǔ)器單元地址2.3.2指令的基本功能
57(2)數(shù)傳指令上述兩類(lèi)數(shù)據(jù)指令的數(shù)據(jù)流動(dòng)是單方向的。要實(shí)現(xiàn)兩個(gè)數(shù)據(jù)的交換,需要編寫(xiě)三條指令并額外占用一個(gè)存儲(chǔ)單元。因此大多數(shù)計(jì)算機(jī)都提供“數(shù)據(jù)交換指令”來(lái)簡(jiǎn)化雙向數(shù)據(jù)流動(dòng)的實(shí)現(xiàn),如Intel80x86中的XCHG指令。這類(lèi)指令的源操作數(shù)和目的操作數(shù)一般都是寄存器,至多允許源操作數(shù)是主存儲(chǔ)器單元。數(shù)據(jù)交換指令的執(zhí)行時(shí)間一般較長(zhǎng)。2.3.2指令的基本功能
58(3)控制轉(zhuǎn)移指令跳轉(zhuǎn)指令JUMP分支指令子程序調(diào)用CALL/返回指令RET循環(huán)控制指令LOOP中斷系統(tǒng)指令
2.3.2指令的基本功能
將指令操作數(shù)的內(nèi)容寫(xiě)入PC之中,強(qiáng)制改變指令執(zhí)行的順序。也稱(chēng)無(wú)條件轉(zhuǎn)移指令59(3)控制轉(zhuǎn)移指令跳轉(zhuǎn)指令JUMP分支指令根據(jù)特定條件(往往是上一條指令的執(zhí)行結(jié)果),決定程序是順序執(zhí)行還是轉(zhuǎn)移到一個(gè)新的位置執(zhí)行,即有條件地改變指令執(zhí)行的順序。也稱(chēng)條件轉(zhuǎn)移指令。條件轉(zhuǎn)移指令可能依據(jù)的條件有:
為零、為正/負(fù)數(shù)、發(fā)生進(jìn)位/借位、為奇數(shù)/偶數(shù)、發(fā)生溢出或以上條件的組合。
2.3.2指令的基本功能
60(3)控制轉(zhuǎn)移指令分支指令條件轉(zhuǎn)移指令又分為“絕對(duì)轉(zhuǎn)移”和“相對(duì)轉(zhuǎn)移”兩種。對(duì)于“絕對(duì)轉(zhuǎn)移”,當(dāng)條件滿(mǎn)足時(shí),計(jì)算機(jī)將把該指令中所含操作數(shù)的內(nèi)容直接寫(xiě)入PC中。對(duì)于“相對(duì)轉(zhuǎn)移”,當(dāng)條件滿(mǎn)足時(shí),計(jì)算機(jī)將把該指令中所含操作數(shù)的內(nèi)容與PC中的內(nèi)容相加后,把結(jié)果寫(xiě)入PC中。
2.3.2指令的基本功能
61常見(jiàn)的條件轉(zhuǎn)移指令有:等于零轉(zhuǎn)移BEQ不等于零轉(zhuǎn)移BNEQ小于轉(zhuǎn)移BLS大于轉(zhuǎn)移BGT小于等于轉(zhuǎn)移/不大于轉(zhuǎn)移BLEQ大于等于轉(zhuǎn)移/不小于轉(zhuǎn)移BGEQ不帶符號(hào)小于轉(zhuǎn)移BLSU不帶符號(hào)大于轉(zhuǎn)移BGTU不帶符號(hào)小于等于轉(zhuǎn)移/不帶符號(hào)不大于轉(zhuǎn)移BLEQU不帶符號(hào)大于等于轉(zhuǎn)移/不帶符號(hào)不小于轉(zhuǎn)移BGEQU沒(méi)有進(jìn)位轉(zhuǎn)移BCC有進(jìn)位轉(zhuǎn)移BCS沒(méi)有溢出轉(zhuǎn)移BVC有溢出轉(zhuǎn)移BVS2.3.2指令的基本功能
62(3)控制轉(zhuǎn)移指令子程序調(diào)用CALL/返回指令RET在程序中,有一些具有特定功能的程序段會(huì)被反復(fù)使用。為了提高程序的可讀性、可重用性和可維護(hù)性,人們將這樣的程序段獨(dú)立出來(lái),將其定義成一個(gè)子程序。這樣,在需要執(zhí)行特定功能時(shí),主程序中不再需要編寫(xiě)一個(gè)程序段,而只需要編寫(xiě)一條調(diào)用子程序的指令即可。
2.3.2指令的基本功能
63(3)控制轉(zhuǎn)移指令子程序調(diào)用CALL/返回指令RET調(diào)用子程序的指令格式:CALLSubprogram_Name。功能是,首先把當(dāng)前程序的斷點(diǎn)(也稱(chēng)主調(diào)程序的返回地址,即當(dāng)前程序計(jì)數(shù)器PC中的值)保存到系統(tǒng)堆棧中,然后由子程序名Subprogram_Name求得子程序的入口地址,最后把子程序的入口地址寫(xiě)入PC,從而將程序控制轉(zhuǎn)移至被調(diào)子程序。返回指令:RET指令的功能是把保存在堆棧中的程序斷點(diǎn)彈回到PC之中。64子程序調(diào)用和返回CALLSUB1.........CALLSUB2…...CALLSUB2…RETURNRETURN......主程序地址200021002101子程序SUB1240025002501256025612700主存空間分配程序執(zhí)行流程子程序SUB265(1)算邏指令(2)數(shù)傳指令(3)控制轉(zhuǎn)移指令(4)輸入/輸出指令包括:啟動(dòng)輸入/輸出設(shè)備、停止輸入/輸出設(shè)備、測(cè)試輸入/輸出設(shè)備及數(shù)據(jù)的輸入或輸出等指令。例如,Intel80x86中的輸入指令為IN指令,輸出指令為OUT指令。
2.3.2指令的基本功能
66(5)處理器控制及調(diào)試指令包括各種設(shè)置/清除標(biāo)志位(如陷阱標(biāo)志、中斷允許標(biāo)志、處理器工作狀態(tài)標(biāo)志位)指令、特權(quán)指令、進(jìn)程同步指令、調(diào)試指令、停機(jī)指令(HALT)等。調(diào)試指令用于硬件或軟件的調(diào)試。硬件調(diào)試指令包括鑰匙位置、開(kāi)關(guān)狀態(tài)的讀取指令,重要寄存器和主存儲(chǔ)器單元內(nèi)容的顯示等。軟件調(diào)試指令包括斷點(diǎn)的設(shè)置及跟蹤指令,自陷阱指令等。2.3.2指令的基本功能
672.3.3指令的格式
涉及指令的操作碼長(zhǎng)度、指令“地址制”及采用的尋址方式、指令長(zhǎng)度等三方面的問(wèn)題。
68指令操作碼的長(zhǎng)度有定長(zhǎng)和不定長(zhǎng)兩種選擇。定長(zhǎng)的操作碼:可以簡(jiǎn)化指令譯碼器的設(shè)計(jì)與實(shí)現(xiàn);不定長(zhǎng)操作碼(也稱(chēng)擴(kuò)展操作碼):可使常用指令擁有較短的操作碼而不常用指令擁有較長(zhǎng)的操作碼,從而壓縮程序所占的存儲(chǔ)空間。在一條指令中出現(xiàn)幾個(gè)操作數(shù)地址,這是指令的“地址制”所要解決的問(wèn)題。一般情況下,指令中地址的個(gè)數(shù),可以取4,3,2,1,0個(gè)。2.3.3指令的格式
69擴(kuò)展操作碼技術(shù)操作碼的位數(shù)隨地址數(shù)的減少而增加OPA1A2A3000000011110…A1A1A1…A2A2A2…A3A3A3…A2A2A2…A3A3A3…111111111111…000000011110…111111111111…111111111111…111111111111…000000011111…111111111111…111111111111…A3A3A3…000000011110…4位操作碼8位操作碼12位操作碼16位操作碼15條三地址指令15條二地址指令15條一地址指令16條零地址指令70地址制(1)四地址(2)三地址OPA1A2A3A486666A1
第一操作數(shù)地址A2
第二操作數(shù)地址A3
結(jié)果的地址A4
下一條指令地址若PC代替A4(A1)OP(A2)A38888OPA1A2A3(A1)OP(A2)A34次訪存4次訪存尋址范圍26=64尋址范圍28=256若A3用A1或A2代替設(shè)指令字長(zhǎng)為32位操作碼固定為8位71(3)二地址OPA1A281212(A1)OP(A2)A1(A1)OP(A2)A2或4次訪存若ACC代替A1(或A2)若結(jié)果存于ACC(4)一地址(5)零地址OPA1824無(wú)地址碼(ACC)OP(A1)ACC2次訪存尋址范圍212=4K尋址范圍224=16M3次訪存72“地址制”設(shè)計(jì)或改進(jìn)的目的是為了壓縮指令長(zhǎng)度,縮短指令的執(zhí)行時(shí)間。在相同的指令長(zhǎng)度內(nèi),減少地址個(gè)數(shù)可以擴(kuò)大所能表示指令的條數(shù)或操作數(shù)的尋址范圍。同一條指令中不同操作數(shù)所采用的尋址方式可以相同或不同。一條指令中的操作數(shù)可以都存放在寄存器里,也可以把一個(gè)操作數(shù)存放在寄存器里,而另一個(gè)操作數(shù)存放在主存里,還可以把所有的操作數(shù)都存放在主存里。存放在主存里的操作數(shù)可以按基址尋址、變址尋址或間接尋址。2.3.3指令的格式
73指令字長(zhǎng)指令字長(zhǎng)決定于操作碼的長(zhǎng)度指令字長(zhǎng)=存儲(chǔ)字長(zhǎng)2.指令字長(zhǎng)可變操作數(shù)地址的長(zhǎng)度操作數(shù)地址的個(gè)數(shù)1.指令字長(zhǎng)固定按字節(jié)的倍數(shù)變化74固定長(zhǎng)度的指令便于指令的存取和譯碼,但會(huì)限制操作數(shù)個(gè)數(shù)的增加和復(fù)雜尋址方式的使用;變化長(zhǎng)度的指令的特點(diǎn)正好相反例如,IBMSystem370指令采用定長(zhǎng)的8位操作碼,有單地址、兩地址和三地址三種地址制,不同的操作數(shù)可以采用不同的尋址方式,指令字長(zhǎng)有16位、32位和48位三種。Intel公司8086/8088微處理器的指令格式2.3.3指令的格式
752.3.4幾類(lèi)常用8086指令詳解數(shù)據(jù)傳送指令算術(shù)運(yùn)算指令邏輯運(yùn)算與移位指令控制轉(zhuǎn)移指令76重點(diǎn)關(guān)注:指令的匯編格式指令的基本功能指令支持的尋址方式指令的執(zhí)行對(duì)標(biāo)志位的影響指令的特殊要求772.3.4.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送是計(jì)算機(jī)中最基本、最常用的一類(lèi)操作。?使用頻率最高?不影響標(biāo)志位?尋址方式最豐富特點(diǎn):78傳送指令(MOV)交換指令(XCHG)I/O指令(IN/OUT)裝入有效地址指令(LEA)裝入段寄存器指令(LDS、LES)壓棧/彈棧指令(PUSH/POP/)791.傳送指令指令操作:(源操作數(shù))→目的操作數(shù)
指令格式:MOV目的操作數(shù),源操作數(shù)
尋址規(guī)定: REG/MEM/SREG,REGREG/MEM,SREG REG/SREG,MEMREG/MEM,IMM8/16位通用寄存器8/16位存儲(chǔ)器段寄存器8/16位立即數(shù)80通用寄存器(AX、BX、CX、DX、BP、SP、SI、DI)立即數(shù)CS存儲(chǔ)器段寄存器(SS、DS、ES)MOV指令允許的傳送關(guān)系81使用說(shuō)明:源操作數(shù)和目的操作數(shù)的類(lèi)型必須一致。目的操作數(shù)不能為立即數(shù)。CS和IP均不能用作指令的目的寄存器。段寄存器間不能直接傳送,也不能直接將立即數(shù)送給段寄存器。源操作數(shù)為立即數(shù),而目的操作數(shù)類(lèi)型不確定時(shí),要給目的操作數(shù)加類(lèi)型說(shuō)明。源操作數(shù)和目的操作數(shù)不能同為存儲(chǔ)器操作數(shù)。82⑴MOVDS,100
[例2.3]識(shí)別下列指令的正確性,對(duì)錯(cuò)誤的指令,說(shuō)明錯(cuò)誤的原因。⑵MOV[1000H],23H錯(cuò)。源、目的操作數(shù)不能同為存儲(chǔ)器尋址。⑶MOV[1000H],[2000H]錯(cuò)。立即數(shù)不能直接賦給段寄存器。錯(cuò)。目的操作數(shù)長(zhǎng)度不確定。⑷MOVDATA,1133H⑸MOVCS,AX依賴(lài)于DATA的定義錯(cuò)。不能用傳送指令改變代碼段寄存器。⑹MOVAX,[0100H+BX+BP]錯(cuò)。地址寄存器不能同為基址寄存器。832.交換指令操作:(目的操作數(shù))(源操作數(shù))格式:XCHG目的操作數(shù),源操作數(shù)
REG/MEM, REG REG,MEM說(shuō)明:
(1)基本用法同MOV指令;(2)該指令不影響標(biāo)志位;
(3)不允許使用段寄存器。84[例]FIRST,SECOND已定義為字節(jié)變量,寫(xiě)出將變量FIRST和SECOND中內(nèi)容交換的指令序列。
解:⑴用交換指令
XCHG AL,F(xiàn)IRST XCHG SECOND,AL XCHG AL,F(xiàn)IRST
⑵用MOV指令
MOV AL,F(xiàn)IRST MOV BL,SECOND MOV FIRST,BL MOV SECOND,AL85⑴輸入指令格式:IN累加器,端口 AL/AX,IMM8AL/AX,DX操作:(I/O端口)→AL/AX⒊I/O指令直接尋址:指令給出的立即數(shù)是I/O端口地址間接尋址:
DX寄存器給出的是I/O端口地址86⑵輸出指令格式:OUT端口, 累加器
IMM8,AL/AXDX,AL/AX操作:(AL/AX/EAX)→I/O端口說(shuō)明:I/O端口有兩種尋址方式
使用立即數(shù)的直接尋址,尋址范圍為0~255;
使用DX寄存器的間接尋址,尋址范圍為0~216-1。87格式:LEAr16,mem;r16<--mem的有效地址EA把源操作數(shù)的地址偏移量->目的操作數(shù)寄存器例LEAAX,[BP][DI]說(shuō)明LEA指令處理變量的地址(EA)而不是變量的內(nèi)容
LEA和MOV指令的比較
MOVBX,OFFSETVAL;將VAL的有效地址=>BXMOVBX,VAL;將VAL的值=>BXLEABX,VAL;將VAL的有效地址=>BX4.地址-目標(biāo)傳送指令88MOV指令用OFFSET操作不能直接取數(shù)組中任意元素的位移量,只能取數(shù)組的第一個(gè)元素的位移量,而LEA可以傳送任意數(shù)組元素的位移量。如LEADX,BETA[BX][SI]LEA的源操作數(shù)必須是存儲(chǔ)器操作數(shù)LEA不影響F標(biāo)志896.壓棧/彈棧指令格式:PUSH 源操作數(shù)
REG16/MEM16/IMM16
操作:(SP)-2→SP (源操作數(shù))→(SS:SP)90格式:POP目的操作數(shù)
MEM16/REG16
操作:([SS:[SP])→目的操作數(shù) (SP)+2→SP彈棧指令91堆棧指令的操作數(shù)只能為字。PUSH和POP要成對(duì)出現(xiàn),以保持堆棧平衡。堆棧指令也隱含了一個(gè)目的/源操作數(shù)——堆棧。壓棧順序是先壓高字節(jié)后壓低字節(jié),彈棧則是先彈低字節(jié)后彈高字節(jié)。(先進(jìn)后出)使用說(shuō)明:注意:(1)指令執(zhí)行后不影響標(biāo)志位;(2)不能用立即尋址方式;(3)目標(biāo)操作數(shù)不能是CS。92[例]用堆棧操作指令將BX和CX中的兩個(gè)16位數(shù)分別壓入堆棧然后再?gòu)棾?。解?/p>
PUSH BX
;先壓BX
PUSH CX
;后壓CX
POP CX POP BX932.3.4.2算術(shù)運(yùn)算指令包括:加/減法指令(ADD/ADC/SUB/SBB)加1/減1指令(INC/DEC)求補(bǔ)指令(NEG)數(shù)據(jù)寬度變換指令(CBW/CWD)比較指令(CMP)乘/除法指令(MUL/IMUL/DIV/IDIV)BCD調(diào)整指令(AAA/AAS/AAM/AAD/DAA/DAS)94⒈加法/減法指令
操作: ADD:(目的)+(源)→目的
SUB:(目的)-(源)→目的
ADC:(目的)+(源)+CF→目的
SBB:(目的)-(源)-CF→目的目的操作數(shù),源操作數(shù)REG,REG/MEM/IMMMEM,REG/IMM格式:ADDSUBADCSBB95使用說(shuō)明:ADD/SUB指令用于單個(gè)字節(jié)/字的加/減法運(yùn)算;ADC/SBB指令則常用于多精度或多字節(jié)/多字的加/減法運(yùn)算。INC/DECREG/MEM指令與ADD/SUBREG/MEM,1的異同:兩者都執(zhí)行加1/減1操作,但前者不影響進(jìn)位,而后者影響。96加法指令對(duì)條件標(biāo)志位的影響:SF=1;
結(jié)果為負(fù)0;
否則ZF=1;
結(jié)果為00;
否則CF=1;
和的最高有效位有向高位的進(jìn)位0;
否則OF=1;
2個(gè)操作數(shù)符號(hào)相同,而結(jié)果符號(hào)與之相反0;
否則表示無(wú)符號(hào)數(shù)相加的溢出表示帶符號(hào)數(shù)相加的溢出97減法指令對(duì)條件標(biāo)志位的影響:CF=1;
減法轉(zhuǎn)換為加法運(yùn)算時(shí)無(wú)進(jìn)位0;
否則OF=1;
2個(gè)操作數(shù)符號(hào)相反,而結(jié)果符號(hào)與減數(shù)相同0;
否則表示無(wú)符號(hào)數(shù)相減的溢出表示帶符號(hào)數(shù)相減的溢出CF=1;
被減數(shù)最高有效位有向高位的借位0;
否則98
[例]兩個(gè)32位雙字?jǐn)?shù)據(jù)X、Y定義如下:
XDW 1234H,5678HYDW3FEAH,A033H請(qǐng)編寫(xiě)計(jì)算X=X-Y的程序段(低位在前)。解:
MOV AX,YSUB X,AX ;低16位字?jǐn)?shù)據(jù)相減
MOV AX,2[Y] SBB 2[X],AX ;高16位字?jǐn)?shù)據(jù)相減
992.整數(shù)變反指令(求補(bǔ))格式:NEG目的操作數(shù)
REG/MEM操作:0-(OP1)→OP1應(yīng)用:常用于求絕對(duì)值。解:TESTAX,8000HJZNEXTNEGAXNEXT:HLT[例]:求AX中存放的有符號(hào)數(shù)的絕對(duì)值。1003.比較指令操作:(OP1)-(OP2),根據(jù)操作結(jié)果修改狀態(tài)標(biāo)志,但不改變目標(biāo)操作數(shù)值。說(shuō)明:⑴CMP指令常用于比較兩個(gè)數(shù),然后根據(jù)指令產(chǎn)生的狀態(tài)標(biāo)志進(jìn)行程序轉(zhuǎn)移。 ⑵CMP與SUB指令都執(zhí)行減法操作,但前者不因操作結(jié)果改變目標(biāo)操作數(shù)值,而后者改變。格式:CMP 目的操作數(shù),源操作數(shù)
REG,REG/MEM/IMM MEM,REG/IMM1014.乘法指令
乘法指令分為有符號(hào)數(shù)和無(wú)符號(hào)數(shù)乘法指令(IMUL/MUL)。
?無(wú)符號(hào)數(shù)乘法指令和有符號(hào)數(shù)乘法指令都是單操作數(shù)格式。102◆單操作數(shù)乘法指令格式:MUL/IMUL
源操作數(shù)
REG/MEM操作:MUL和IMUL分別為有符號(hào)數(shù)和無(wú)符號(hào)數(shù)乘法指令,兩種指令除操作數(shù)類(lèi)型不同外,操作完全相同:字:(AX)×(源操作數(shù))→DX:AX字節(jié):(AL)×(源操作數(shù))→AX源操作數(shù)103說(shuō)明:●單操作數(shù)乘法指令的被乘數(shù)是隱含的(在AL/AX中),而結(jié)果長(zhǎng)度一定是被乘數(shù)/乘數(shù)的二倍(在AX/DX:AX中)?!裨床僮鲾?shù)不能為立即數(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。104
[例]若(AL)=96H,(BL)=12H,求分別執(zhí)行MULBL和IMULBL指令后的結(jié)果及OF、CF狀態(tài)。
解:MULBL完成AL和BL中的兩個(gè)無(wú)符號(hào)數(shù)相乘,即:(AX)=(AL)×(BL)=96H×12H=0A8CH
IMULBL完成AL和BL中的兩個(gè)有符號(hào)數(shù)相乘,此時(shí)AL中的數(shù)是負(fù)數(shù),真值為-6AH,即:-6AH×12H=-774H
用補(bǔ)碼表示:(AX)=F88CH
AH含有效數(shù)字,∴OF=1、CF=1。AH含有效數(shù)字,∴OF=1、CF=1。1055.除法指令格式:DIV∕IDIV源操作數(shù)
REG/MEM操作:按源操作數(shù)類(lèi)型:●字節(jié):(AX)/(源),商存于AL中,余數(shù)存于AH?!褡?(DX:AX)/(源),商存于AX中,余數(shù)存于DX。106除法指令的被除數(shù)是隱含的,且長(zhǎng)度一定是除數(shù)的二倍(在AX/DX:AX中)。所以,使用除法指令常要擴(kuò)展被除數(shù)長(zhǎng)度。有符號(hào)數(shù)一般用:CBW/CWD源操作數(shù)不能為立即數(shù)對(duì)所有條件標(biāo)志位均無(wú)定義說(shuō)明:107
MOVAX,a①;a×b在CX:BX中②③
MOVAX,c④;c在DX:AX中⑤;a×b+c在DX:AX中⑥⑦;商存入S⑧IMULbMOVCX,DXMOVBX,AXCWDADDAX,BXMOVDX,CXIDIVaMOVS,AX[例]下列程序段完成S=(a×b+c)/a的運(yùn)算,其中變量a、b、c和S均為帶符號(hào)的字?jǐn)?shù)據(jù),結(jié)果的商存入S,余數(shù)則不計(jì),請(qǐng)?jiān)谙铝锌崭裰刑钊牒线m的指令。 1082.3.4.3邏輯運(yùn)算和移位指令
1.邏輯運(yùn)算指令邏輯運(yùn)算指令包括AND、OR、XOR、NOT和TEST指令,所有指令都對(duì)其操作數(shù)按位進(jìn)行邏輯運(yùn)算。操作數(shù)可以是字節(jié)、字。109功能:分別按位進(jìn)行邏輯“與”、“或”、“異或”、“測(cè)試”和“非”?!舾袷剑篈ND ORXORTEST
目標(biāo)操作數(shù),源操作數(shù)
REG,REG/MEM/IMMMEM,REG/IMM
NOT目標(biāo)操作數(shù)
REG/MEM邏輯運(yùn)算指令110使用說(shuō)明:①邏輯運(yùn)算指令除NOT指令外,都影響標(biāo)志寄存器的狀態(tài)標(biāo)志位,且邏輯運(yùn)算后進(jìn)位標(biāo)志CF一定為0,所以邏輯運(yùn)算指令常用于清0和清進(jìn)位位。②編程時(shí)要根據(jù)操作合理選用指令,一般:●對(duì)某些二進(jìn)制位‘清零’用邏輯‘與’指令A(yù)ND;
●對(duì)某些二進(jìn)制位‘置位’用邏輯‘或’指令OR;
●對(duì)某些二進(jìn)制位‘求反’用邏輯‘異或’指令XOR,全部位‘求反’用邏輯‘非’指令NOT。111
③AND指令與TEST指令的相同之處是都執(zhí)行按位“與”操作,兩者執(zhí)行后對(duì)標(biāo)志寄存器中狀態(tài)標(biāo)志位的影響相同,不同之處是前者改變目標(biāo)操作數(shù)的值,而后者并不改變目標(biāo)操作數(shù)的值。所以TEST指令與CMP指令的用法類(lèi)似,用于產(chǎn)生按位測(cè)試的條件碼。112[例]寫(xiě)出一條能完成下述操作的指令:
⑴將AX的高字節(jié)清零,低字節(jié)不變;
⑵將BX的低字節(jié)置成全‘1’,高字節(jié)不變;
⑶將CX的高字節(jié)變反,低字節(jié)不變。
1132.移位指令
移位指令包括:算術(shù)移位指令(SAL/SAR)邏輯移位指令(SHL/SHR)循環(huán)移位指令(ROR/ROL/RCR/RCL)114算術(shù)/邏輯左移指令(SAL/SHL)CF0算術(shù)右移指令(SAR)CF邏輯右移指令(SHR)CF0115循環(huán)左移指令(ROL)循環(huán)右移指令(ROR)CFCF帶進(jìn)位位循環(huán)左移指令(RCL)CF帶進(jìn)位位循環(huán)右移指令(RCR)CF116使用說(shuō)明移位指令的源操作數(shù)采用立即數(shù)尋址時(shí),8086指令只能為1。移位指令常用于二進(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)。1172.3.4.4控制轉(zhuǎn)移指令
控制轉(zhuǎn)移指令包括:無(wú)條件轉(zhuǎn)移指令(JMP)調(diào)用/返回指令(CALL/RET)條件轉(zhuǎn)移指令(JCC)循環(huán)控制指令(LOOP)中斷指令(INT)五類(lèi)??刂妻D(zhuǎn)移指令的共同特點(diǎn)是可以改變CS:IP的內(nèi)容,從而改變程序執(zhí)行順序。1182.3.5關(guān)于指令系統(tǒng)的說(shuō)明正確使用指令系統(tǒng),關(guān)鍵要弄清楚:▲指令的各種類(lèi)型▲每條指令的功能及格式▲每條指令對(duì)操作數(shù)的要求▲指令執(zhí)行后對(duì)標(biāo)志寄存器的影響源/目的操作數(shù)及其尋址方式操作數(shù)長(zhǎng)度顯式還是隱式▲指令運(yùn)用的多樣性與優(yōu)化1191.應(yīng)把指令格式(句法)與尋址方式聯(lián)系起來(lái)理解、掌握。
每條指令的顯式操作數(shù),無(wú)論是OP1、OP2,都無(wú)非是立即數(shù)、寄存器數(shù)或存儲(chǔ)器數(shù),其對(duì)應(yīng)的尋址方式可能是前面所講的尋址方式之一。1202.使用指令時(shí),要特別注意弄清楚指令隱含的操作寄存器例如:乘、除法指令的單操作數(shù)格式下,只顯式指出了源操作數(shù)的乘數(shù)或除數(shù),但應(yīng)注意目的操作數(shù)和源操作數(shù)的被乘數(shù)/被除數(shù)必須存放在A累加器或DX:AX中。1213.對(duì)帶符號(hào)和無(wú)符號(hào)數(shù),許多同種操作卻要使用不同的指令。例如:指令名稱(chēng)對(duì)帶符號(hào)數(shù)對(duì)無(wú)符號(hào)數(shù)乘法指令I(lǐng)MULMUL除法指令I(lǐng)DIVDIV移位指令*
SAL/SARSHL/SHR*算術(shù)/邏輯左移相同,但右移過(guò)程不同。例如:設(shè)AX=8520HSHRAX,1后,結(jié)果是AX=4290HSARAX,1后,結(jié)果是AX=C290H1224.要嚴(yán)格區(qū)分指令是對(duì)地址還是對(duì)地址中的內(nèi)容(數(shù)據(jù))進(jìn)行操作例如:LEABX,TABLE;TABLE的偏移地址→BXMOVBX,TABLE*
;字變量TABLE中的內(nèi)容→BXMOVBX,OFFSETTABLE;TABLE的偏移地址→BXXCHGAX,BX;BX中的內(nèi)容與AX中的內(nèi)容變換XCHGAX,[BX];BX所指示的地址(內(nèi)存單元)中;的內(nèi)容與AX中的內(nèi)容變換*當(dāng)將TABLE作為一個(gè)變量用數(shù)據(jù)定義偽指令定義過(guò)時(shí),它是一個(gè)符號(hào)地址;當(dāng)將它作為一個(gè)數(shù)用EQU或等號(hào)"="定義過(guò)時(shí),它是一個(gè)立即數(shù)。1232.4.1如何提高機(jī)器速度1.提高訪存速度2.提高I/O和主機(jī)之間的傳送速度提高整機(jī)處理能力高速芯片Cache多體并行多總線DMAI/O處理機(jī)通道高速器件改進(jìn)系統(tǒng)結(jié)構(gòu),開(kāi)發(fā)系統(tǒng)的并行性中斷3.提高運(yùn)算器速度高速芯片改進(jìn)算法快速進(jìn)位鏈2.4流水線技術(shù)1242.4.2系統(tǒng)的并行性時(shí)間上互相重疊2.并行性的等級(jí)指令級(jí)(指令之間)過(guò)程級(jí)(程序、進(jìn)程)兩個(gè)或兩個(gè)以上事件在同一時(shí)刻
發(fā)生兩個(gè)或兩個(gè)以上事件在同一時(shí)間段
發(fā)生并行1.并行的概念粗粒度軟件實(shí)現(xiàn)細(xì)粒度硬件實(shí)現(xiàn)并發(fā)同時(shí)125取指令3執(zhí)行指令32.4.3指令流水原理2.指令的二級(jí)流水1.指令的串行執(zhí)行取指令
取指令部件
完成總有一個(gè)部件空閑指令預(yù)取若取指
和執(zhí)行
階段時(shí)間上完全重疊指令周期減半速度提高1倍…執(zhí)行指令
執(zhí)行指令部件
完成取指令1執(zhí)行指令1取指令2執(zhí)行指令2取指令3執(zhí)行指令3取指令2執(zhí)行指令2取指令1執(zhí)行指令1126必須等上條
指令執(zhí)行結(jié)束,才能確定下條
指令的地址造成時(shí)間損失3.影響指令流水效率加倍的因素(1)執(zhí)行時(shí)間>取指時(shí)間
(2)條件轉(zhuǎn)移指令
對(duì)指令流水的影響
解決辦法
?取指令部件指令部件緩沖區(qū)執(zhí)行指令部件猜測(cè)法1274.指令的六級(jí)流水六級(jí)流水14個(gè)時(shí)間單位串行執(zhí)行6×9=
54
時(shí)間單位完成一條指令6個(gè)時(shí)間單位COFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFI指令1指令2指令3指令4指令5指令6指令7指令8指令91234567891011121314t取指譯碼地址取數(shù)執(zhí)行寫(xiě)結(jié)果128指令1與指令4沖突指令2與指令5沖突指令1、指令3、指令6沖突……COFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFICOFOEIWODIFI指令1指令2指令3指令4指令5指令6指令7指令8指令91234567891011121314t2.4.4影響指令流水性能的因素1.訪存沖突解決辦法?指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分開(kāi)?指令預(yù)取技術(shù)(適用于訪存周期短的情況)取指譯碼地址取數(shù)執(zhí)行寫(xiě)結(jié)果1292.相關(guān)問(wèn)題程序的相近指令之間出現(xiàn)某種關(guān)聯(lián)使指令流水出現(xiàn)停頓影響流水線效率(1)控制相關(guān)WOEIFOCODIWOEIFODIFIFIDIFICOFIFOCODIFIWOEIFOCODIFIDIFOEIWOEIFOCOFIDICOWODIFICOFI指令1指令2指令3指令4指令5指令6指令7指令15指令161234567891
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版?zhèn)€人住宅小產(chǎn)權(quán)轉(zhuǎn)讓協(xié)議樣式版B版
- 2025年度新型建筑材料貨物質(zhì)押擔(dān)保合同模板3篇
- 2024水電裝修合同范本老舊小區(qū)改造工程3篇
- 培育小思考家
- 農(nóng)場(chǎng)全維度運(yùn)營(yíng)解析
- 復(fù)式公寓租賃協(xié)議(2篇)
- 2025年度金融機(jī)構(gòu)財(cái)產(chǎn)保全擔(dān)保業(yè)務(wù)操作細(xì)則合同3篇
- 《離婚父母探望權(quán)實(shí)施細(xì)則補(bǔ)充合同》(2024版)版B版
- 貴陽(yáng)八中小賣(mài)部場(chǎng)地租賃經(jīng)營(yíng)合同
- 2024污水處理廠節(jié)能減排技術(shù)改造合同2篇
- 2022年江蘇省南京市中考?xì)v史試題(含答案)
- 商務(wù)溝通第二版第6章管理溝通
- 培訓(xùn)課件-核電質(zhì)保要求
- 過(guò)敏原檢測(cè)方法分析
- TSG_R0004-2009固定式壓力容器安全技術(shù)監(jiān)察規(guī)程
- 室外給水排水和燃?xì)鉄崃こ炭拐鹪O(shè)計(jì)規(guī)范
- 【個(gè)人獨(dú)資】企業(yè)有限公司章程(模板)
- 《三國(guó)演義》整本書(shū)閱讀任務(wù)單
- 外觀GRR考核表
- 大型平板車(chē)安全管理規(guī)定.doc
- 企業(yè)信用管理制度
評(píng)論
0/150
提交評(píng)論