版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2023/11/3第三章電子工程系1第三章8086指令系統(tǒng)
(2)
指令系統(tǒng)陸堯勝謝軍主講暨南大學(xué)信息科學(xué)技術(shù)學(xué)院電子工程系微機(jī)系統(tǒng)與接口2023/11/3第三章電子工程系2指令系統(tǒng)指令與指令格式8086尋址方式指令系統(tǒng)2023/11/3第三章電子工程系3計(jì)算機(jī)指令指令:使計(jì)算機(jī)執(zhí)行各種操作的命令,是計(jì)算機(jī)的控制信息。一條指令對(duì)應(yīng)著一種基本操作,一臺(tái)計(jì)算機(jī)能執(zhí)行多少種操作,就要有多少條指令。指令系統(tǒng):一臺(tái)計(jì)算機(jī)所能執(zhí)行的全部指令的合集。指令系統(tǒng)的功能強(qiáng)弱在很大程度上決定了這類計(jì)算機(jī)智能的高低,它集中地反映了微處理器的硬件功能和屬性。不同種類的微處理器,因內(nèi)部結(jié)構(gòu)各不相同,具有不同的指令系統(tǒng)。指令系統(tǒng)的內(nèi)容:指令格式、尋址方式、指令種類與指令功能等。2023/11/3第三章電子工程系4機(jī)器指令格式機(jī)器指令:指計(jì)算機(jī)能直接識(shí)別和執(zhí)行的二進(jìn)制編碼表示的指令。機(jī)器指令代碼內(nèi)部可劃分為若干個(gè)字段。一般格式:
操作碼 尋址方式(碼) 形式地址碼
1)操作碼字段用來規(guī)定該指令要執(zhí)行的操作,是指令中惟一不可缺少的核心字段。2)尋址方式碼字段表示該指令的操作數(shù),應(yīng)按哪一種尋址方式來尋找(尋址方式字段有時(shí)可隱含在操作碼中)3)形式地址碼字段,表示操作數(shù)所在單元的形式地址。通常,由尋址方式字段和形式地址字段便可確定操作數(shù)的有效地址EA(偏移地址)。2023/11/3第三章電子工程系5尋址方式尋址方式:在執(zhí)行一條指令過程中,CPU如何找到操作數(shù)的有效地址EA的方法。操作數(shù):包括源操作數(shù)、目的操作數(shù)和結(jié)果操作數(shù)等。操作數(shù)以可存放在計(jì)算機(jī)的不同部件之中。如CPU的寄存器、存儲(chǔ)器或I/O端口中,也可以是指令碼的一部分(稱為立即數(shù))。操作數(shù)地址有寄存器地址、存儲(chǔ)器地址和I/O端口地址之分。由指令中尋址方式字段,提供操作數(shù)來源的部件(區(qū)域)以及如何通過形式地址獲得操作數(shù)有效地址EA的方法。2023/11/3第三章電子工程系6尋址方式
指令尋址方式越多,表示其功能越強(qiáng),指令獲得操作數(shù)的方式越靈活。指令分為:只提供一個(gè)操作數(shù)地址的單操作數(shù)指令;兩個(gè)操作數(shù)地址的雙操作數(shù)指令;不提供操作數(shù)地址的無操作數(shù)指令。2023/11/3第三章電子工程系78086尋址方式操作數(shù)尋址方式立即尋址寄存器尋址直接尋址寄存器間接尋址基址尋址和變址尋址基址變址尋址基址變址相對(duì)尋址隱含尋址轉(zhuǎn)移地址尋址方式段內(nèi)直接尋址段內(nèi)間接尋址段間直接尋址段間間接尋址2023/11/3第三章電子工程系8操作數(shù)尋址之一:立即尋址指令所需操作數(shù)就在指令碼中,操作碼后面一個(gè)(或兩個(gè))字節(jié)就是操作數(shù),即指令中的形式地址字段直接提供的就是操作數(shù)本身。在指令執(zhí)行過程中,立即數(shù)作為指令的一部分直接從BIU的指令序列中取出,不需另外占用總線周期,執(zhí)行速度較快。立即尋址只能用于對(duì)源操作數(shù)的尋址,主要用來給寄存器賦初值。例:MOVAX,1234H
將立即數(shù)1234H傳送給AX
其執(zhí)行過程如圖3-2所示2023/11/3第三章電子工程系9操作數(shù)尋址之二:寄存器尋址操作數(shù)在CPU內(nèi)部寄存器中,指令中形式地址字段提供的是存放操作數(shù)的寄存器編碼。指令所指定的寄存器可以是8位寄存器,也可以是16位寄存器?!纠?】MOVAX,BX
將BX寄存器的內(nèi)容傳送給AX,其執(zhí)行過程如圖3-3所示。由于寄存器的編碼短(只有3位),采用寄存器操作數(shù),不僅可以減少指令的長(zhǎng)度,而且執(zhí)行指令時(shí),全部操作在CPU中完成,不需使用總線操作周期來存取操作數(shù),這就使得指令執(zhí)行速度較快。寄存器尋址方式主要用來存取位于寄存器中的數(shù)據(jù)。2023/11/3第三章電子工程系10操作數(shù)尋址之三:直接尋址操作數(shù)在某存儲(chǔ)單元中,指令中形式地址字段給出的位移量Disp就是該存儲(chǔ)單元的有效地址。操作數(shù)物理地址=(DS)×10H+EA
=(DS)×10H+Disp
例:MOVAX,[2000H]
若(DS)=3000H,則此指令是將數(shù)據(jù)段中物理地址為32000H單元的內(nèi)容傳送到AX寄存器。
從存儲(chǔ)器中尋找操作數(shù)最簡(jiǎn)單的一種尋址方式,EA直接由位移量給出。直接尋址方式主要用于存取位于存儲(chǔ)器中的簡(jiǎn)單變量。其執(zhí)行過程如圖3-4所示。2023/11/3第三章電子工程系11操作數(shù)尋址之四:寄存器間接尋址指令所需操作數(shù)在存儲(chǔ)單元之中。需事先把操作數(shù)的偏移地址存入一個(gè)寄存器中。寄存器間接尋址是把形式地址字段指定寄存器的內(nèi)容作為操作數(shù)的有效地址,由該地址所指定的存儲(chǔ)單元的內(nèi)容作為操作數(shù)。如果指令中指定的寄存器是BX、SI或DI,操作數(shù)在數(shù)據(jù)段,操作數(shù)的物理地址為:(BX)、(DI)(DS)×10H+EA=(DS)×10H+(SI)如果指令中指定的寄存器是BP,操作數(shù)在堆棧段,操作數(shù)的地址為:(SS)×10H+EA=(SS)×10H+(BP)2023/11/3第三章電子工程系12寄存器間接尋址在寄存器間接尋址中,寄存器的內(nèi)容如同一個(gè)地址指針。如果寄存器的內(nèi)容在程序運(yùn)行期間進(jìn)行修改,那么使用這種尋址方式的同一指令可以對(duì)不同存儲(chǔ)單元進(jìn)行操作。寄存器間接尋址方式適用于數(shù)組變量或表格進(jìn)行處理。
【例4】MOVAX,[BP]-----指令執(zhí)行前:(SS)=2000H,[BP]=1000H,操作數(shù)的物理地址=2000×10H+1000H=21000H。-----指令的操作是把21000H字存儲(chǔ)單元的內(nèi)容送AX寄存器。其執(zhí)行過程如圖3-5所示。
2023/11/3第三章電子工程系13操作數(shù)之五:基址尋址和變址尋址指令所需操作數(shù)在某存儲(chǔ)單元之中。以基址寄存器(BX或BP)或變址寄存器(SI或DI)的內(nèi)容為基地址,在這個(gè)基地址的基礎(chǔ)上加上指令形式地址字段的8/16位位移量Disp之和,形成真正操作數(shù)的有效地址。對(duì)于BX、SI或DI寄存器來說,段寄存器用DS,操作數(shù)的物理地址=(DS)×10H+EA
(BX)=(DS)×10H+(SI)+Disp8
(DI)Disp162023/11/3第三章電子工程系14基址尋址和變址尋址對(duì)于BP寄存器來說,段寄存器用SS,
Disp8操作數(shù)的物理地址=(SS)×10H+(BP)+Disp16基址尋址和變址尋址,同樣可以用于數(shù)組變量或表處理。
【例5】MOVAX,[SI+1000]或?qū)懗桑篗OVAX,1000[SI]
其執(zhí)行過程如圖3-6所示。2023/11/3第三章電子工程系15
操作數(shù)尋址之六:基址變址尋址指令所需操作數(shù)在存儲(chǔ)單元中,其有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容之和。基址寄存器和變址寄存器在指令形式地址碼字段中指明。操作數(shù)物理地址為:(SI)
(DS)×10H+EA=(DS)×10H+(BX)+(DI)(SI)操作數(shù)物理地址=(SS)×10H+(BP)+(DI)例:MOVAX,[SI][BX]基址變址尋址可用于訪問兩維數(shù)組元素。2023/11/3第三章電子工程系16操作數(shù)尋址之七:基址變址相對(duì)尋址操作數(shù)在存儲(chǔ)單元中,其有效地址是基址寄存器的內(nèi)容與變址寄存器的內(nèi)容以及指令的8/16位位移量之和。當(dāng)基址寄存器使用BX時(shí),段寄存器用DS;當(dāng)基址寄存器使用BP時(shí),段寄存器用SS。(SI)物理地址=(DS)×10H+(BX)+(DI)+Disp16/8
(SI)物理地址=(SS)×10H+(BP)+(DI)+Disp16/8【例6】MOVAX,0150H[BP][DI]或?qū)懗桑篗OVAX,[BP+DI+0150H]
執(zhí)行過程如圖3-7所示。2023/11/3第三章電子工程系17操作數(shù)尋址之八:隱含尋址
指令碼中不包含指明操作數(shù)地址的部分,而其操作碼本身隱含地指明了操作地址,字符串操作類指令就屬于這種尋址。有效地址EA是由3個(gè)地址分量的某種組合求得的:①位移量(Displacement)。②基地址(Baseaddress)。由基址寄存器BX或基址指針BP提供的內(nèi)容。③變址(Indexaddress)。由源變址寄存器SI或目的變址寄存器DI所提供的內(nèi)容。3個(gè)地址分量的不同組合,產(chǎn)生了存儲(chǔ)器中操作數(shù)的尋址不同的方式。2023/11/3第三章電子工程系18【例7】若(BX)=0158H,(DI)=10A5H,位移量=1B57H,(DS)=2100H,(SS)=1100H,(BP)=0100H。段寄存器按默認(rèn)段寄存器,則相對(duì)于各種尋址方式的有效地址和物理地址將是:①直接尋址:EA=1B57H;物理地址=21000H+1B57H=22B57H②寄存器間接尋址(假設(shè)寄存器為BX):
EA=0158H;物理地址=21000H+0158H=21158H③基址尋址(假設(shè)寄存器為BP):
EA=0100H+1B57H=1C57H;物理地址=11000H+1C57H=12C57H④基址變址尋址(假設(shè)寄存器為BX和DI):
EA=0158H+10A5H=11FDH;物理地址=21000H+11FDH=221FDH⑤基址變址且相對(duì)尋址(假設(shè)寄存器為BP和DI):
EA=0100H+10A5H+1B57H=2CFCH;
物理地址=11000H+2CFCH=13CFCH2023/11/3第三章電子工程系19【例8】指出下列指令中畫線的操作數(shù)的尋址方式。MOVAX, 0A78H ; 立即尋址 MOVBX,
SP
; 寄存器尋址 MOVCX, [BP] ; 寄存器間接尋址 MOVAX, [BP][100H]
; 基址尋址 MOVAX, 100H[BX]
; 基址尋址 MOVBX, [SI+50H]
; 變址尋址 MOVBX, 50H[DI]
; 變址尋址 MOVAL,
[BX+SI+30H]
;基址變址相對(duì)尋MOVAL, 30H[BX+SI]
; 基址變址相對(duì)尋址 MOVAL, 30H[BX][SI];
基址變址相對(duì)尋址 2023/11/3第三章電子工程系20
轉(zhuǎn)移地址尋址程序轉(zhuǎn)移指令:被用來改變程序的執(zhí)行順序,即按需要用轉(zhuǎn)移地址去修改IP與CS的內(nèi)容。程序轉(zhuǎn)移指令的尋址方式涉及如何確定轉(zhuǎn)移的目標(biāo)地址。目標(biāo)地址可以在段內(nèi),也可跨段(稱段時(shí)間轉(zhuǎn)移)。圖3-8表示目標(biāo)地址的各種尋址方式。2023/11/3第三章電子工程系21轉(zhuǎn)移地址尋址之一:段內(nèi)直接尋址段內(nèi)尋址方式轉(zhuǎn)移時(shí)僅修改IP的內(nèi)容,而CS的內(nèi)容不變。采用這種尋址方式時(shí),指令碼中包括一個(gè)8/16位位移量Disp,其轉(zhuǎn)移的有效地址為:圖3-8(a)。
EA=(IP)+Disp8/Disp16IP的當(dāng)前值:指從存儲(chǔ)器中取出轉(zhuǎn)移指令后的IP值(下一條指令的地址)。位移量是相對(duì)于當(dāng)前IP的內(nèi)容來計(jì)算的,又稱為相對(duì)尋址。當(dāng)位移量為8位時(shí),稱為段內(nèi)短程轉(zhuǎn)移;而當(dāng)位移量為16位時(shí),稱為段內(nèi)近程轉(zhuǎn)移。Disp是用補(bǔ)碼表示的有符號(hào)數(shù)。這種尋址方式適用于條件轉(zhuǎn)移或無條件轉(zhuǎn)移,但條件轉(zhuǎn)移只能有8位的位移量。2023/11/3第三章電子工程系22轉(zhuǎn)移地址尋址之二:段內(nèi)間接尋址段內(nèi)間接尋址:要轉(zhuǎn)移到的地址的16位段內(nèi)有效地址在一個(gè)16位寄存器中或在存儲(chǔ)器相鄰兩個(gè)單元中,這個(gè)寄存器或相鄰兩個(gè)單元的第一個(gè)單元的地址,是在指令碼中以某種尋址方式給出的,不過該地址里存放的不是一般操作數(shù)而是轉(zhuǎn)移地址。圖3-8(b)2023/11/3第三章電子工程系23
用于段間轉(zhuǎn)移,轉(zhuǎn)移的目標(biāo)地址的段基值(CS)和偏移量(IP)都由指令碼形式地址字段直接提供,轉(zhuǎn)移時(shí),只需用它們來更新當(dāng)前CS和IP的內(nèi)容即可,圖3-8(c)。轉(zhuǎn)移地址尋址之三:段間直接尋址2023/11/3第三章電子工程系24轉(zhuǎn)移地址尋址之四:段間間接尋址段間間接尋址:用于段間轉(zhuǎn)移,只不過當(dāng)前CS和IP由存儲(chǔ)器中連續(xù)4個(gè)單元提供,圖3-8(d)。為什么要用4個(gè)單元?指令中給出前述某種訪問內(nèi)存單元的尋址方式。用這種尋址方式計(jì)算出的存儲(chǔ)單元地址開始的連續(xù)4個(gè)單元的內(nèi)容就是要轉(zhuǎn)移的地址。前兩個(gè)單元內(nèi)的16位值是有效地址(送入IP),后兩個(gè)單元內(nèi)的16位值是段地址(送入CS)。2023/11/3第三章電子工程系258086指令格式
8086CPU指令的長(zhǎng)度可以在1~6個(gè)字節(jié)的范圍內(nèi)變化,即指令可以由1~6個(gè)字節(jié)組成。8086/8088CPU的典型指令格式:指令的第一字節(jié)為操作碼,由它規(guī)定指令的基本操作類型。第二字節(jié)給出了指令的尋址方式,用于指出指令的兩個(gè)操作數(shù)存放在什么地方、存儲(chǔ)器操作數(shù)的有效地址如何計(jì)算。至于指令的第3字節(jié)到第6字節(jié)可根據(jù)指令尋址方式的需要進(jìn)行選擇。
2023/11/3第三章電子工程系263.38086/8088指令系統(tǒng)按功能可以分為6類:數(shù)據(jù)傳送算術(shù)運(yùn)算邏輯運(yùn)算與移位字符串處理程序控制CPU控制前4種類型指令屬于數(shù)據(jù)操作類指令,用于數(shù)據(jù)傳送和數(shù)據(jù)處理;后兩種類型指令屬于控制類指令,用于改變程序流向與控制CPU的工作狀態(tài)。2023/11/3第三章電子工程系27數(shù)據(jù)傳送指令數(shù)據(jù)傳送是一種最基本、最主要的操作,數(shù)據(jù)傳送指令是應(yīng)用最頻繁、數(shù)量最多的指令,總共有14條指令。數(shù)據(jù)傳送指令在程序中所占的比例極大,數(shù)據(jù)傳送是否靈活、迅速,對(duì)整個(gè)程序的編寫和執(zhí)行都起著很大的作用。數(shù)據(jù)傳送類指令的功能是用于控制數(shù)據(jù)信息在計(jì)算機(jī)各組成部件之間的傳送操作,可實(shí)現(xiàn)寄存器與寄存器之間、寄存器與存儲(chǔ)器之間以及寄存器與I/O端口之間的數(shù)據(jù)傳送操作。數(shù)據(jù)在傳送過程中不發(fā)生改變,沒有產(chǎn)生新的結(jié)果,因此,數(shù)據(jù)傳送指令不會(huì)影響標(biāo)志寄存器F。2023/11/3第三章電子工程系28通用寄存器傳送指令之一:傳送指令符號(hào)指令:MOVDST,SRC[例]MOV[4000H],AX指令功能:把源操作數(shù)SRC的內(nèi)容傳送給目的操作數(shù)DST。執(zhí)行結(jié)果,COPY并覆蓋。MOV指令可以進(jìn)行字節(jié)傳送,也可進(jìn)行字傳送。但源操作數(shù)和目的操作數(shù)不能一個(gè)是字節(jié),另一個(gè)是字。源操作數(shù)可以是通用寄存器、段寄存器、存儲(chǔ)器或立即操作數(shù);目的操作數(shù)可以是通用寄存器、段寄存器(CS除外)或存儲(chǔ)器;立即數(shù)據(jù)不能作為目的操作數(shù);兩者不能同時(shí)為存儲(chǔ)器操作數(shù)。(圖3-11)2023/11/3第三章電子工程系29通用寄存器傳送指令之二:交換指令符號(hào)指令:XCHGDTS,SRC指令功能:將兩個(gè)操作數(shù)進(jìn)行字節(jié)或字?jǐn)?shù)據(jù)交換。操作數(shù)既可以是通用寄存器,也可以是存儲(chǔ)單元,但不能同時(shí)為存儲(chǔ)單元。(圖3-12)【例】:
XCHGAX,BX;(AX)與(BX)
XCHGCX,[DI];(CX)與((DI))
2023/11/3第三章電子工程系30堆棧堆棧之本質(zhì):是在RAM存儲(chǔ)器中開辟(指定)的一個(gè)特定的存儲(chǔ)區(qū)域。在這個(gè)區(qū)域中,信息的存入(推入/壓入)與取出(彈出)按照“先進(jìn)后出”或“后進(jìn)先出”的原則進(jìn)行,稱該“存儲(chǔ)區(qū)”為堆棧。堆棧用途:暫存數(shù)據(jù)和在“過程”調(diào)用或處理中斷時(shí)暫存斷點(diǎn)信息。堆棧的概念應(yīng)用廣泛。堆棧開口朝上的容器(圖3-13),一端是固定的,另一端是浮動(dòng)的。固定端是底部,稱為棧底;浮動(dòng)端可以推入或彈出數(shù)據(jù)堆棧指針SP:指示現(xiàn)在堆棧中存放數(shù)據(jù)的位置,始終指向堆棧頂部。2023/11/3第三章電子工程系31通用寄存器傳送指令之三:堆棧的操作3種基本操作:建棧、進(jìn)棧和出棧。1、建棧:建立堆棧,即規(guī)定堆棧底部在RAM存儲(chǔ)器中的位置:通過數(shù)據(jù)傳送指令將堆棧底部的地址設(shè)置在堆棧指針SP和堆棧寄存器SS中:
MOVAX,3000HMOVSS,AX;初始化SS段寄存器
MOVSP,64H;初始化SP指針空棧:棧中無數(shù)據(jù),堆棧底部與頂部重疊。2、進(jìn)棧:PUSH指令,把數(shù)據(jù)推入堆棧。進(jìn)?;虺鰲2僮鞫际且宰譃閱挝坏?,即每次在堆棧中存取數(shù)據(jù)均是兩個(gè)字節(jié)(先存入高字節(jié),再存入低字節(jié))。2023/11/3第三章電子工程系32堆棧的操作:壓棧符號(hào)指令:PUSHSRC【例20】PUSHAX(圖3-15)指令功能:將16位的源操作數(shù)推入堆棧,而目標(biāo)地址為當(dāng)前棧頂,即由SP指示的單元。源操作數(shù)可以是寄存器、段寄存器或存儲(chǔ)器。第一步先將堆棧指針SP的內(nèi)容減1,即棧頂向低地址方向移動(dòng)一個(gè)單元,指向新棧頂(一個(gè)空單元),然后把高字節(jié)數(shù)據(jù)推入棧頂單元。即:SP(SP)-1;(SP)高字節(jié)數(shù)據(jù)第二步,將堆棧指示器的內(nèi)容再減1,然后把低字節(jié)數(shù)據(jù)推入當(dāng)前的棧頂單元,即:SP(SP)-1;(SP)低字節(jié)數(shù)據(jù)。2023/11/3第三章電子工程系33堆棧的操作:出棧出棧:POP指令,從堆棧頂部彈出一個(gè)字送回通用寄存器、段寄存器或者字存儲(chǔ)單元。符號(hào)指令:POPDTS例:POPAX指令功能:POP指令將SP指示棧頂?shù)膬勺止?jié)數(shù)據(jù)傳送給目的操作數(shù)DTS。(圖3-16)出棧的操作順序與進(jìn)棧相反,也分兩步:第一步操作是先將堆棧中低字節(jié)數(shù)據(jù)退出棧,送寄存器或存儲(chǔ)器,然后把堆棧指示器的地址加1,即棧頂向高地址方向移動(dòng)一個(gè)單元,第二步是將堆棧中高字節(jié)數(shù)據(jù)退出棧,堆棧指示器的內(nèi)容再加1,指向新棧頂。棧平衡:要求PUSH與POP配對(duì)出現(xiàn)?。?!2023/11/3第三章電子工程系34
棧平衡
要求PUSH與POP配對(duì)出現(xiàn)?。。例22]將AX、BX寄存器與CX、DX寄存器的內(nèi)容交換。
PUSHAX;AX入棧
PUSHBX;BX入棧
POPDX;將后進(jìn)棧的BX內(nèi)容彈出至DX寄存器
POPCX;將先進(jìn)棧的AX內(nèi)容彈出至CX寄存器2023/11/3第三章電子工程系35通用寄存器傳送指令之四:字節(jié)翻譯指令符號(hào)指令:XLAT轉(zhuǎn)換表名指令功能:通過查表完成代碼轉(zhuǎn)換功能。它將偏移量為EA=(BX)+(AL)所對(duì)應(yīng)的存儲(chǔ)單元中的一個(gè)字節(jié)的內(nèi)容送入AL,從而實(shí)現(xiàn)AL中一個(gè)字節(jié)的代碼轉(zhuǎn)換,為隱含尋址方式。指令執(zhí)行前,BX指向一張256個(gè)字節(jié)的表的起點(diǎn),AL是表的索引值。2023/11/3第三章電子工程系36【例24】通過查7段顯示碼表,將任一十進(jìn)制數(shù)轉(zhuǎn)換為對(duì)應(yīng)的7段顯示碼。其操作步驟如下:①建立轉(zhuǎn)換表(最大容量為256字節(jié)),將該表定位到某個(gè)邏輯段的一片連續(xù)地址中,并將表起點(diǎn)地址的偏移量送入BX寄存器。②將待轉(zhuǎn)換的十進(jìn)制數(shù)在表中的序號(hào)(又叫索引值)送入AL寄存器。③執(zhí)行XLAT指令。程序如不:MOVBX,OFFSETTABLE;TABLE表起點(diǎn)偏移量MOVAL,05HXLATTABLEHLT;停機(jī)2023/11/3第三章電子工程系37標(biāo)志位傳送指令用于對(duì)標(biāo)志寄存器存取操作的指令,共4條。單字節(jié)指令,指令的操作數(shù)以隱含方式規(guī)定。1)取標(biāo)志寄存器指令符號(hào)指令:LAHF指令功能:把標(biāo)志位寄存器的低8位傳送給AH寄存器,即把SF、ZF、AF、PF、CF標(biāo)志位分別送至AH的第7、6、4、2、0WUG,AH的第4、3、1位是任意的。指令對(duì)標(biāo)志寄存器各位均無影響。2)存儲(chǔ)標(biāo)志寄存器指令符號(hào)指令:SAHF指令功能:將AH寄存器內(nèi)容傳送到標(biāo)志寄存器F的低字節(jié)。2023/11/3第三章電子工程系38標(biāo)志位傳送指令3)標(biāo)志進(jìn)棧指令符號(hào)指令:PUSHF指令功能:將16位標(biāo)志寄存器F的內(nèi)容入棧保護(hù)。其操作過程與前述的PUSH指令類似。4)標(biāo)志出棧指令符號(hào)指令:POPF指令功能:將當(dāng)前棧頂和次棧頂中數(shù)據(jù)字彈出送回到標(biāo)志寄存器F中。PUSH和POPF指令常用于調(diào)用子程序時(shí)保護(hù)和恢復(fù)狀態(tài)標(biāo)志位。2023/11/3第三章電子工程系39地址傳送指令專用于傳送地址碼,可傳送操作數(shù)的段地址或偏移地址,共包含3條指令:LEA、LDS和LES。1)裝入有效地址指令符號(hào)指令:LEADST,SRC【例】LEABX;[SIH]指令功能:把用于指定源操作數(shù)SRC(必須是存儲(chǔ)器操作數(shù))的16位偏移地址(即有效地址)傳送到一個(gè)目的地址DTS指定的16位通用寄存器中。常用來建立字符串或表格操作指令所需要的寄存器指針。2023/11/3第三章電子工程系40輸入/輸出指令功能:用來完成累加器(AX或AL)與I/O端口之間的數(shù)據(jù)傳送功能。I/O端口的尋址只可以采用直接或間接兩種方式:1)直接端口尋址:I/O端口地址以8位立即數(shù)方式在指令中直接給出,所尋址的端口號(hào)只能在0~255范圍內(nèi)。2)間接端口尋址:這類似于寄存器間接尋址,16位的I/O端口地址在DX寄存器中,即通過DX間接尋址,故可尋址的端口號(hào)為0~65535。(1)輸入指令符號(hào)指令:IN累加器,端口指令功能:將指定端口中的內(nèi)容傳送到累加器AX/AL中。端口地址由上述尋址方式確定。2023/11/3第三章電子工程系41輸入/輸出指令(2)輸出指令符號(hào)指令:OUT端口,累加器指令功能:將累加器AX/AL中的內(nèi)容傳送到指定的端口。[例]IN AL,[20H]; AL (端口20H) IN AL,DL ; AL (端口(DX)) OUT AL,AL ; 端口50H (AL) OUT 50H,AX; 端口50H (AX) OUT DX,AL ; 端口(DX) (AL) OUT DX,AX ; 端口(DX) (AX) 2023/11/3第三章電子工程系42地址傳送指令2)裝入地址指針指令符號(hào)指令:LDSDTS,SRC【例】LDSSI,[DIH]指令功能:取某變量的32位地址指針的指令,其功能是從由指令的源操作數(shù)SRC所指定的存儲(chǔ)單元開始,由4個(gè)連續(xù)存儲(chǔ)單元中取出某變量的地址指針(共4個(gè)字節(jié)),將其前兩個(gè)字節(jié)(即變是的偏移地址)傳送到由指令的目的操作數(shù)DTS所指定的某16位通用寄存器,后兩個(gè)字節(jié)(即變量的段基址)傳送到DS段寄存器中。2023/11/3第三章電子工程系433.2.2算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令包括:加、減、乘、除指令,可以對(duì)字節(jié)或字?jǐn)?shù)據(jù)進(jìn)行運(yùn)算。參加運(yùn)算的數(shù)可以是無符號(hào)數(shù),也可以是帶符號(hào)數(shù)。若是帶符號(hào)數(shù),則以補(bǔ)碼表示。運(yùn)算的數(shù)可以是二進(jìn)制數(shù),也可以是十進(jìn)制數(shù)(以BCD碼表示)。所處理的數(shù)據(jù)是定點(diǎn)數(shù),除CBN和CWD指令外,在執(zhí)行指令后均對(duì)標(biāo)志寄存器的標(biāo)志位產(chǎn)生影響。2023/11/3第三章電子工程系44加法指令符號(hào)指令:ADDDTS,SRC指令功能:將源操作數(shù)和目的操作數(shù)相加,結(jié)果保留在目的操作數(shù)中,源操作數(shù);結(jié)果影響標(biāo)志寄存器CF、PF、AF、ZF、SF和OF。ADD指令可以進(jìn)行字節(jié)或字的加法。源操作數(shù)可以是通用寄存器、存儲(chǔ)器或立即數(shù),而且目的操作數(shù)只能是通用寄存器或存儲(chǔ)器,不能是立即數(shù),且兩者不能同時(shí)為存儲(chǔ)器操作數(shù)。
ADDAX,BX(√)ADDAL,BL;(√)
ADDDS,CX(×)ADDDI,0A4H;(√)
ADD[BX],SI(√)ADD[SI],[BP+100H](×)
ADD[BX],AX(√)ADDAX,CL(×)2023/11/3第三章電子工程系45【例31】設(shè)(DL)=2EH,(AL)=6CH,問執(zhí)行指令A(yù)DDAL,DL后的結(jié)果是什么?【解】6CH=01101100B
+)2EH=00101110B
————————————9AH=10011010B結(jié)果(AL)=9AH標(biāo)志寄存器F內(nèi)容見教材P36-37:
SF=D7=1,ZF=0,AF=D3C=1,OF=D7C⊕D6C=0⊕1=1,PF=1,CF=D7C=0,結(jié)果(FL)=86H(標(biāo)志位中,未使用位用0填)?!纠?2】B-DISPLAY2023/11/3第三章電子工程系46帶進(jìn)位加法指令符號(hào)指令:ADCDTS,SRC指令功能:帶進(jìn)位加法指令的操作過程與ADD指令基本相同,惟一的不同是進(jìn)位標(biāo)志位CF的原狀態(tài)一起參與加法運(yùn)算,待運(yùn)算結(jié)束,CF將重新根據(jù)結(jié)果置成新的狀態(tài),即DTS=(DST)+(SRC)+(CF)。用于雙倍精度或多倍精度運(yùn)算?!纠?jī)呻p字長(zhǎng)加法運(yùn)算:12345678H+09ABCDEFHMOVAX,5678H
ADDAX,0CDEFHMOVBX,1234H
ADC
BX,09ABH程序執(zhí)行后,運(yùn)算結(jié)果在BX、AX寄存器中。2023/11/3第三章電子工程系47
減法指令符號(hào)指令:SUBDTS,SRC指令功能:目的操作數(shù)減去源操作數(shù),結(jié)果放在目的操作數(shù)中。源操作數(shù)原有內(nèi)容不變,即DST(DST)-(SRC),并根據(jù)運(yùn)算結(jié)果置標(biāo)志位。SUB指令可以進(jìn)行字節(jié)或字的減法運(yùn)算,源操作數(shù)與目的操作數(shù)的約定與ADD指令相同?!纠縎UBAX,AX;清累加器AX及進(jìn)位CF(累加器自身相減,則結(jié)果為零,此時(shí)進(jìn)位標(biāo)志清零)2023/11/3第三章電子工程系48
【例34】SUBAL,BL;ALAL-BL
設(shè)(AL)=56H,(BL)=0CH,則執(zhí)行指令后,(AL)=4AH,(BL)=0CH。手工計(jì)算 機(jī)器操作 (AL)=01010110B [AL]補(bǔ)=01010110B-(BL)=00001100B +[-BL]補(bǔ)=11110100B ———————————
——————————A=01001010B 101001010B 根據(jù)運(yùn)算結(jié)果,各標(biāo)志分別為:CF=0(因56H大于0CH),ZF=0,SF=0,OF=0PF=0,AF=1(因6H小于0CH)。2023/11/3第三章電子工程系49帶借位減法指令符號(hào)指令:SBBDTS,SRC指令功能:本指令與SUB指令的功能、執(zhí)行過程基本相同,惟一不同的是完成減法運(yùn)算時(shí)還要再減去進(jìn)位標(biāo)志CF的原狀態(tài)。運(yùn)算結(jié)束時(shí),CF將被置成新狀態(tài),加1/減1指令(INC/DEC)符號(hào)指令:INCDST和DECDST指令功能:INC是加1指令,DEC是減1指令。目的操作數(shù)加1或減1后送目的操作數(shù),即DST=(DST)±1。目的操作數(shù)可以是8/16位通用寄存器或存儲(chǔ)器操作數(shù),影響狀態(tài)標(biāo)志ZF、SF、AF、PF和OF,但不影響進(jìn)位標(biāo)志CF。主要用于對(duì)通用寄存器或存儲(chǔ)單元進(jìn)行軟件加1/減1計(jì)數(shù)。2023/11/3第三章電子工程系50【例36】用INCBL指令,使BL寄存器的內(nèi)容加1。BL的內(nèi)容指令執(zhí)行指令后,ZF標(biāo)志的影響 11111101 MOV BL,OFDH 未知 11111110 INC BL 0 11111111 INC BL 0 00000000 INC BL 1 00000001 INC BL 0 請(qǐng)注意:只有當(dāng)BL寄存器的內(nèi)容從0FFH加1變?yōu)?0時(shí),ZF標(biāo)志才被置成1。2023/11/3第三章電子工程系51求補(bǔ)指令符號(hào)指令:NEGDTS指令功能:將目的操作數(shù)取負(fù)后送回目的操作數(shù)。
NEG指令是把目的操作數(shù)當(dāng)成一個(gè)帶符號(hào)數(shù),如果原操作數(shù)是正數(shù),則NEG指令執(zhí)行后將其變成絕對(duì)值相等的負(fù)數(shù)(用補(bǔ)碼表示);如果原操作數(shù)負(fù)數(shù)(用補(bǔ)碼表示),則NEG指令執(zhí)行后將其變成絕對(duì)值相等的正數(shù)。設(shè)(AL)=10100000B,則執(zhí)行NEGAL后,(AL)=01100000B設(shè)(AL)=01010100B,則執(zhí)行NEGAL后,(AL)=10101100B2023/11/3第三章電子工程系52X-Y=(-Y)+X【例38】若求0E3H-0A0H,則下述兩個(gè)方法是等效的:方法1 方法2 MOVAL,0E3H MOV BL,0A0H MOVBL,0A0H NEG BL SUBAL,BL MOV AL,0E3H ADD AL,BL 2023/11/3第三章電子工程系53比較指令符號(hào)指令:CMPDTS,SRC指令功能:將目的操作數(shù)與源操作數(shù)相減,但不送回結(jié)果,只根據(jù)結(jié)果置標(biāo)志位。指令執(zhí)行后,兩個(gè)操作數(shù)均不發(fā)生變化。源操作數(shù)可以是8/16位通用寄存器、存儲(chǔ)器操作數(shù)或立即數(shù);目標(biāo)操作數(shù)只可以是8/16位通用寄存器或存儲(chǔ)器操作數(shù),且不允許兩個(gè)操作數(shù)同時(shí)為存儲(chǔ)器操作數(shù)。利用比較指令來決定程序的流向。例如,在CMP之后,緊跟著一條JG(若大于轉(zhuǎn)移)指令,那么在目的操作數(shù)大于源操作時(shí),程序就轉(zhuǎn)移。2023/11/3第三章電子工程系54乘法指令指令格式:MULSRCIMULSRC指令功能:MUL是無符號(hào)數(shù)乘法指令,IMUL是帶符號(hào)數(shù)乘法指令,兩種乘法指令使用數(shù)據(jù)的類型不同,相乘的結(jié)果也不同,但指令的操作類似。上述乘法運(yùn)算指令可以完成兩個(gè)8/16位二進(jìn)制數(shù)相乘的功能。被乘數(shù)隱含在累加器AL/AX中;指令中由SRC指定的源操作數(shù)作乘數(shù),它可以是8/16位通用寄存器或存儲(chǔ)器操作數(shù)。2023/11/3第三章電子工程系55乘法指令當(dāng)兩個(gè)8位數(shù)相乘時(shí),相乘結(jié)果是16位乘積,存放在AX中,即:AX=(AL)×(SRC),圖3-19(a)當(dāng)兩個(gè)16位數(shù)相乘時(shí),相乘結(jié)果是32位乘積,存放在DX、AX中,其中,DX存放高位字,AX存放低位字。圖3-19(b),表示為DX:AX=(AX)×(SRC)。若乘積的高半部(字節(jié)乘法為AH,字乘法為DX)不為0,則CF和OF置1,表示AH或DX中含有乘積的有效數(shù)字,否則CF和OF置0,而其他狀態(tài)標(biāo)志的內(nèi)容不定。2023/11/3第三章電子工程系56除法指令符號(hào)指令:DIVSRCIDIVSRC指令功能:DIV是無符號(hào)數(shù)除法指令,IDIV是帶符號(hào)數(shù)除法指令。兩種除法指令使用數(shù)據(jù)的類型不同,相除的結(jié)果也不同,但操作類似。除法指令可以完成8/16位除法功能。被除數(shù)隱含在累加器AX(字節(jié)除)或DX、AX(字除)中。指令中由SRC給出的源操作數(shù)作除數(shù),可以是8/16位通用寄存器或存儲(chǔ)器操作數(shù)。圖3-20。除法指令執(zhí)行后,所有的狀態(tài)標(biāo)志是不能確定的,無任何有效的確定狀態(tài)。2023/11/3第三章電子工程系57除法指令【例39】設(shè)(AX)=0400H,0400H為無符號(hào)數(shù),是1024D,為帶符號(hào)數(shù),是+1024D;(BL)=0B4,B4H為無符號(hào)數(shù),是180D,為帶符號(hào)數(shù),是-76D。執(zhí)行DIVBL指令后,余數(shù):(AH)=7CH=124D,商:(AL)=05H=5D。執(zhí)行IDIVBL指令后,余數(shù):(AH)=24H=36D,商:(AL)=0F3H=-3D。在進(jìn)行帶符號(hào)數(shù)除法運(yùn)算時(shí),若被除數(shù)和除數(shù)具有相同位數(shù)(字節(jié)或字),這時(shí)就需要將被除數(shù)擴(kuò)展為字或雙字,而數(shù)的大小和符號(hào)不變。8086/8088指令系統(tǒng)中有兩條用于這種目的的指令:CBW(字節(jié)轉(zhuǎn)換成字)和CWD(字轉(zhuǎn)換成雙字)。2023/11/3第三章電子工程系58符號(hào)擴(kuò)展指令符號(hào)指令:CBW,CWDCBW指令:將AL中的符號(hào)擴(kuò)展到AH中,即將一個(gè)字節(jié)擴(kuò)展成一個(gè)字。若(AL)的D7=0,則(AH)=00;若(AL)的D7=1,則(AH)=0FFH。CWD指令:將AX中的符號(hào)擴(kuò)展到DX中,將一個(gè)字的帶符號(hào)數(shù)擴(kuò)展成雙字。若(AX)的D15=0,則(DX)=0000;若(AX)的D15=1,則(DX)=0FFFFH。兩條指令對(duì)標(biāo)志位均無影響?!纠咳簦ˋL)=85H,(BX)=0345H,下面指令完成這兩個(gè)帶符號(hào)數(shù)的相加:CBW;(AX)=FF85HADDAX,BX;(AX)(AX)+(BX)結(jié)果:(AX)=0FF85H+0345H=02CAH。2023/11/3第三章電子工程系59加法的十進(jìn)制調(diào)整指令符號(hào)指令:DAA,AAADAA指令功能:對(duì)兩個(gè)組合十進(jìn)制數(shù)(一個(gè)字節(jié)中含兩位BCD碼表示的十進(jìn)制數(shù))相加的結(jié)果(在AL中)進(jìn)行調(diào)整,得到一個(gè)兩位有效的組合十進(jìn)制數(shù)的“和”,調(diào)整結(jié)果仍保留在AL中。若AL的低4位大于9,或AF=1,則將AL的內(nèi)容作加06H調(diào)整,并將AF置位;若AL的內(nèi)容大于9FH,或CF=1,則將AL的內(nèi)容作加60H調(diào)整,并將CF置位。通常,DAA指令必須跟在ADD或ADC指令之后配合使用,而不能單獨(dú)使用。AAA指令的功能:對(duì)兩個(gè)分離的BCD數(shù)(一個(gè)字節(jié)中只用低4位表示一位BCD碼)的相加結(jié)果(在AL中)進(jìn)行調(diào)整,其高半字節(jié)被清零,得到一個(gè)有效的、分離的BCD數(shù)的“和”,調(diào)整結(jié)果仍放在AL中。2023/11/3第三章電子工程系60【例41】十進(jìn)制數(shù)加法程序(求59+2)。MOVAL,59HADDAL,02H;(AL)=5BHDAA;(AL)=61HHLAADD指令后,(AL)=59H+02H=5BH,CF=0,AF=0。因?yàn)闄C(jī)器是按二進(jìn)制數(shù)進(jìn)行加法運(yùn)算的,顯然這不是我們所需的結(jié)果。為此,必須執(zhí)行DAA指令,以進(jìn)行十進(jìn)制調(diào)整(作加06修正),這樣才能得到正確的結(jié)果:5BH+06H=61H。應(yīng)該注意:DAA或AAA僅用來對(duì)AL的中間結(jié)果進(jìn)行修正,因而對(duì)多位BCD數(shù)的運(yùn)算必須由低位向高位逐個(gè)對(duì)BCD數(shù)進(jìn)行運(yùn)算和修正。2023/11/3第三章電子工程系61【例42】設(shè)(AX)=6698,(BX)=2877,如果要將這兩個(gè)十進(jìn)制數(shù)相加,結(jié)果保留在AXADDAL,BL;低字節(jié)相加DAA;低字節(jié)調(diào)整MOVCL,AL;暫存中間結(jié)果MOVAL,AHADCAL,BH;高字節(jié)相加DAA;高字節(jié)調(diào)整MOVAH,ALMOVAL,CLHLT2023/11/3第三章電子工程系62減法的十進(jìn)制調(diào)整指令符號(hào)指令:DASAAS指令功能:DAS指令用于對(duì)兩個(gè)組合BCD數(shù)相減的結(jié)果(在AL中)進(jìn)行調(diào)整,得到一個(gè)有效的組合BCD數(shù)“差”調(diào)整后的結(jié)果仍在AL中。AAS指令用于對(duì)兩個(gè)分離的BCD數(shù)相減的結(jié)果(在AL中)進(jìn)行調(diào)整,得到一個(gè)有效的分離BCD數(shù)“差”,結(jié)果仍放在AL中。減法是加法的逆運(yùn)算,對(duì)減法的調(diào)整操作是作減00H、06H、60H或66H運(yùn)算。DAS、AAS指令通常必須跟在SUB或SBB指令之后使用。2023/11/3第三章電子工程系63乘法的十進(jìn)制調(diào)整指令符號(hào)指令:AAM指令功能:AAM指令用于對(duì)兩個(gè)分離的BCD數(shù)的相乘結(jié)果進(jìn)行調(diào)整,以得到有效的分離BCD數(shù)的和。兩個(gè)分離BCD數(shù)的個(gè)位數(shù)相乘的結(jié)果,可能產(chǎn)生兩位分離BCD數(shù)的積。執(zhí)行AAM指令,將其兩位“積”存放在寄存器AX中;AH的低4位積的高位;AL的低4位存放積的低位。AH和AL的高4位為0。其調(diào)整操作是:將AL寄存器中的結(jié)果除以10,所得商數(shù)即為高位十進(jìn)制數(shù),置入AH中,所得余數(shù)即為低位十進(jìn)制數(shù),置入AL中。2023/11/3第三章電子工程系64除法的十進(jìn)制調(diào)整指令符號(hào)指令:AAD指令功能:AAD指令與上述所有調(diào)整指令的操作不同,它是在除法之前進(jìn)行調(diào)整操作。AAD指令的調(diào)整操作是:將累加器AX中的2位分離的十進(jìn)制被除數(shù)調(diào)整為二進(jìn)制數(shù),保留在AL中。其具體做法是將AH中的高位十進(jìn)制數(shù)乘以10,與AL中的低位十進(jìn)制數(shù)相加,并使AH的內(nèi)容清零,結(jié)果保留在AL中。2023/11/3第三章電子工程系65【例44】十進(jìn)制除法程序(求54÷9MOVAX,0504HMOVBL,09HAADDIVBLHLT由于ASCⅡ碼表示的十進(jìn)制數(shù),其高4位都為0011(不影響所表示的數(shù)值),而低4位正好是BCD數(shù),因而十進(jìn)制數(shù)的ASCⅡ碼與分離的BCD數(shù)相當(dāng),故也把上述AAA、AAS、AAM和AAD4條調(diào)整指令稱為ASCⅡ運(yùn)算調(diào)整指令。2023/11/3第三章電子工程系663.3.3邏輯運(yùn)算與移位指令
邏輯運(yùn)算:對(duì)操作數(shù)(邏輯數(shù)或邏輯值)按位進(jìn)行操作的,位與位之間無進(jìn)位或借位,無數(shù)的正負(fù)與數(shù)的數(shù)值大小。邏輯運(yùn)算指令有“與”、“或”、“非”、“異或”、“測(cè)試”5種。除了“非”指令的執(zhí)行結(jié)果對(duì)標(biāo)志位無影響外,其他指令執(zhí)行后,總是使OF=CF=0,SF、ZF和PF根據(jù)運(yùn)算結(jié)果置位或復(fù)位,以反映操作結(jié)果的特征,而AF狀態(tài)不定。2023/11/3第三章電子工程系67邏輯“與”指令(AND)符號(hào)指令:ANDDST,SRC指令功能:目的操作數(shù)和源操作數(shù)按位進(jìn)行“與”運(yùn)算,結(jié)果送回目的操作數(shù),即DST(DST)∧(SRC)?!芭c”指令可用于將字或字節(jié)中的特定位清零。源操作數(shù)可以是8/16?!纠?5】設(shè)(AL)=73H,則執(zhí)行下列指令:
ANDAL,0FH結(jié)果是:(AL)=03H,CF=OF=0,SF=ZF=0,PF=1,其作用是將AL寄存器的高4位清零,即屏蔽高4位。2023/11/3第三章電子工程系68邏輯“或”指令符號(hào)指令:ORDST,SRC指令功能:目的操作數(shù)和源操作數(shù)按位進(jìn)行“或”運(yùn)算,結(jié)果送回目的操作數(shù),即DST(DST)∨(SRC)?!盎颉敝噶钣糜趯⒆只蜃止?jié)中的特定位置位?!纠?6】設(shè)(AL)=73H,則執(zhí)行下列指令:
ORAL,0FH結(jié)果是:(AL)=7FH,CF=OF=0,SF=ZF=0,PF=0。2023/11/3第三章電子工程系69邏輯“異或”指令符號(hào)指令:XORDST,SRC指令功能:目的操作數(shù)和源操作數(shù)進(jìn)行“異或”運(yùn)算,結(jié)果送回目的操作數(shù),即DST=(DST)⊕(SRC)?!爱惢颉敝噶羁捎糜趯⒆止?jié)或字中特定位取反。源操作數(shù)與目的操作數(shù)的約定與AND指令相同?!纠?設(shè)(AL)=35H,則執(zhí)行下列指令:XORAL,0FH結(jié)果:(AL)=3AH,CF=OF=0,SF=ZF=0,PF=1。【例】將累加器AL清零。方法1:MOVAL,00H方法2:XORAL,AL
方法3:SUBAL,AL方法4:ANDAL,00H2023/11/3第三章電子工程系70邏輯“非”指令符號(hào)指令:NOTDST指令功能:目的操作數(shù)的各位求反碼,結(jié)果送回目的操作數(shù)?!纠?9】設(shè)(AL)=5AH,則執(zhí)行下列指令:NOTAL;結(jié)果是:(AL)=0A5H?!纠?0】求存放在AX、BX寄存器中的32位二進(jìn)制數(shù)的補(bǔ)數(shù)。程序如下:
NOTAXNOTBX;取反
ADDBX,01H;加1ADCAX,00H;考慮到CFHLT2023/11/3第三章電子工程系71“測(cè)試”指令符號(hào)指令:TESTDTS,SRC指令功能:執(zhí)行兩個(gè)操作數(shù)(字節(jié)或字)的邏輯與操作。指令執(zhí)行后,兩個(gè)操作數(shù)均不發(fā)生變化,“與”的結(jié)果僅影響標(biāo)志位。用途:利用TEST指令可以改變程序的執(zhí)行方向。若在TEST指令之后,緊接著用一條條件轉(zhuǎn)移指令JNE,則只要在兩個(gè)操作數(shù)中有一對(duì)相應(yīng)位的“與”結(jié)果是1,就發(fā)生程序轉(zhuǎn)移?!纠?1】要檢測(cè)AL中的最低位是否為1:TESTAL,01H執(zhí)行指令后,若ZF=0,則表示AL最低位為1;若ZF=1,則AL最低位為0。2023/11/3第三章電子工程系72移位指令移位指令分為算術(shù)移位和邏輯移位算術(shù)移位是對(duì)帶符號(hào)數(shù)進(jìn)行移位,在移位過程中必須保持符號(hào)位不變;邏輯移位是對(duì)無符號(hào)數(shù)移位,總是用“0”來填補(bǔ)已空出的位。根據(jù)移位操作的結(jié)果置標(biāo)志寄存器中的狀態(tài)標(biāo)志(AF標(biāo)志除外)。若移位位數(shù)是1位,移位結(jié)果使最高位(符號(hào)位)發(fā)生變化,則將溢出標(biāo)志OF置“1”;若移多位,則OF標(biāo)志將無效。2023/11/3第三章電子工程系73邏輯移位符號(hào)指令:SHLDTS,COUNTSHRDTS,COUNTSHL:邏輯左移指令,將目的操作數(shù)中的每一位向左移一位,最高有效位MSB移入進(jìn)位標(biāo)志位中,而CF原有的值丟失,空出的最低位補(bǔ)“0”(圖3-21)。用于無符號(hào)數(shù)乘以2,移入進(jìn)位標(biāo)志位的值可用來檢查是否超位。圖3-21中,MSB是最高有效位,LSB是最低有效位。SHR:邏輯右移指令,將目的操作數(shù)中的每一位向右移一位,操作數(shù)最低有效位LSB移入進(jìn)位標(biāo)志位CF,而CF原有的值丟失,空出的最高位補(bǔ)“0”(圖3-22)。用于無符號(hào)數(shù)除以2,移入進(jìn)位標(biāo)志位的值可用來檢查數(shù)的奇偶性。2023/11/3第三章電子工程系74邏輯移位---例題①SHLBX,1;BX的內(nèi)容邏輯左移1位,相當(dāng)于BX中的無符號(hào)數(shù)乘以2。
SHRAX,1;AX的內(nèi)容邏輯右移1位,相當(dāng)于AX中的無符號(hào)數(shù)除以2。
②MOVCL,6SHRDX,CL;DX的內(nèi)容邏輯右移6位,相當(dāng)于DX內(nèi)容除以26。
【例】已知(AL)=06H,下列指令后(AL)=?①SHLAL,1;(AL)=0CH②SHRAL,1;(AL)=03H2023/11/3第三章電子工程系75算術(shù)移位指令符號(hào)指令:SALDTS,COUNTSARDTS,COUNTSAL:算術(shù)左移位指令,它與邏輯左移指令SHL具有完全相同的操作、完全相同的編碼形式。它們可以互換,是同一條指令的兩個(gè)符號(hào)。SHL/SAL指令不僅適用于無符號(hào)數(shù)乘以2的運(yùn)算,同樣也適用于有符號(hào)數(shù)乘以2的運(yùn)算。SAR:算術(shù)右移位指令,它將目的操作數(shù)中的每一位向右移一位,空出的最高位MSB原來最高位的值,使符號(hào)位保持不變。操作數(shù)最低位LSB移入進(jìn)位標(biāo)志位CF,而CF原來的值丟失。適用于有符號(hào)數(shù)除以2的運(yùn)算。其操作如圖3-23。2023/11/3第三章電子工程系76【例52】①SALAX,1;相當(dāng)于AX中的有符號(hào)數(shù)乘以2②MOVCL,3SALAX,CL;AX的內(nèi)容算術(shù)左移3位,相當(dāng)于AX的內(nèi)容乘以23。
【例55】已知(AL)=0FAH(-6的補(bǔ)碼),求執(zhí)行下列指令后(AL)=?①SALAL,1②SARAL,1【解】①(AL)=0F4H(-12的補(bǔ)碼)②(AL)=0F5H(-3的補(bǔ)碼)注意:若①中AL的內(nèi)容當(dāng)作無符號(hào)數(shù)時(shí),則是240。當(dāng)AL的內(nèi)容算術(shù)左移一位后,應(yīng)為480,結(jié)果超出了8位無符號(hào)數(shù)的范圍。2023/11/3第三章電子工程系77循環(huán)移位指令循環(huán)移位:將目的操作數(shù)一端移出來的位,移至目的操作數(shù)的另一端。循環(huán)移位是一種將目的操作數(shù)首尾相連接的移位,從目的操作數(shù)移出來的位不會(huì)丟失。循環(huán)移位可分為不帶進(jìn)位位與帶進(jìn)位位循環(huán)移位。只影響CF和OF標(biāo)志。CF標(biāo)志總是保持移出的最后一位狀態(tài)。若只循環(huán)移1位,且使最高位發(fā)生變化,則OF標(biāo)志置“1”;若循環(huán)移多位,則OF標(biāo)志無效。2023/11/3第三章電子工程系78不帶進(jìn)位位循環(huán)移位指令符號(hào)指令:ROLDTS,COUNTRORDTS,COUNTROL:循環(huán)左移位指令。它將目的操作數(shù)中的每一位向左移動(dòng)一位,最高位MSB移入最低位LSB,同時(shí)把最高位移入CF,而CF原有值丟失。其執(zhí)行過程如圖3-24所示。ROR:循環(huán)右移位指令。循環(huán)右移與循環(huán)左移位類似,只是將目的操作數(shù)向右移位,最低位移入最高位,同時(shí)把最低位移入CF。而CF原有值丟失。其執(zhí)行過程如圖3-25所示?!纠?6】設(shè)(AL)=12H,則:ROLAL,1;(AL)=24H,CF=0;
RORAL,1(AL)=09H,CF=0。2023/11/3第三章電子工程系79帶進(jìn)位位循環(huán)移位指令符號(hào)指令:RCLDST,COUNTRCRDST,COUNTRCL:帶CF的循環(huán)左移指令。它將目的操作數(shù)連同進(jìn)位標(biāo)志一起循環(huán)左移,CF的值進(jìn)入目的操作數(shù)最低位,而目的操作數(shù)的最高位進(jìn)入CF。其操作過程如圖3-26所示。RCR:帶CF的循環(huán)右移位指令。除了循環(huán)移位方向與RCL指令相反之外,其他功能與RCL類似。其操作過程如圖3-27所示。循環(huán)移位指令經(jīng)常用于檢查進(jìn)位標(biāo)志位CF、某個(gè)寄存器或存儲(chǔ)器單元的內(nèi)容,而又不希望這些內(nèi)容被破壞的場(chǎng)合。2023/11/3第三章電子工程系80【例57】若AH和AL中分別存有分離的BCD數(shù),則用下列3條指令可轉(zhuǎn)換成組合的BCD數(shù),并存于AL中:MOVCL,4SHLAL,CLSHRAX,CL反過來,若AL中存有組合的BCD數(shù)BCD2和BCD1,則下列指令將AL中的組合BCD數(shù)轉(zhuǎn)換為分離的BCD數(shù),BCD2存于AH,而BCD1存于AL中:MOVAH,0MOVCL,4SHLAX,CLSHRAL,CL2023/11/3第三章電子工程系81【例58】存在AX與BX寄存器中的32位二進(jìn)制數(shù)算術(shù)右移一位SARAX,1RCRBX,1執(zhí)行算術(shù)右移指令將AX的最低位移入CF,再執(zhí)行帶進(jìn)位循環(huán)右移指令,又把CF的值移入到BX的最高位,通過CF實(shí)現(xiàn)32位二進(jìn)制數(shù)算術(shù)右移一位,如圖3-28所示。【例59】設(shè)AL中存有8位有符號(hào)數(shù),現(xiàn)需要將其乘8(即23),結(jié)果存于AX中,則可用以下指令完成。CBW;符號(hào)擴(kuò)展MOVCL,3SALAX,CL2023/11/3第三章電子工程系82字符串處理類指令字符串:8086把位于存儲(chǔ)器中的由字節(jié)或字組成的一組數(shù)據(jù)或字符序列。8086指令系統(tǒng),對(duì)字符串操作提供了一條重復(fù)前綴指令和5條用于字符串操作的基本指令。字符串指令可以對(duì)字節(jié)串或字串進(jìn)行操作,每次處理一個(gè)元素(一個(gè)字節(jié)或一個(gè)字)。這些指令可以處理長(zhǎng)達(dá)64KB的字符串。為縮短指令長(zhǎng)度,串操作指令均采用隱含尋址方式。2023/11/3第三章電子工程系83串操作指令的隱含尋址方式源字符串一般在當(dāng)前數(shù)據(jù)段中:DS:SI由DS段寄存器提供段基址,其偏移地址必須由源變址寄存器SI提供;(若源操作數(shù)不在當(dāng)前數(shù)據(jù)段內(nèi),必須在源字符串前冠以相應(yīng)的段前綴)。目標(biāo)串必須在附加段中:ES:DI
由ES段寄存器提供段基址,其偏移地址必須由目標(biāo)變址寄存器DI提供。若要在同一段內(nèi)進(jìn)行字符串操作,須使DS和ES指向同一段。串長(zhǎng)度必須存放在CX寄存器中。在串指令執(zhí)行之前,必須對(duì)SI、DI和CX進(jìn)行預(yù)置,即將源串和目標(biāo)串的首元素或末元素的偏移地址分別置入SI和DI中,將串長(zhǎng)度置入CX中。這樣,在CPU每處理完一個(gè)串元素時(shí),就自動(dòng)修改SI和DI寄存器的內(nèi)容,使之指向下一個(gè)元素。2023/11/3第三章電子工程系84串操作指令對(duì)SI和DI寄存器的修改1)和被處理的串是字節(jié)串還是字串有關(guān);2)是和當(dāng)前的方向標(biāo)志DF的狀態(tài)有關(guān)。當(dāng)DF=0,表示串操作由低地址向高地址進(jìn)行,SI和DI的內(nèi)容應(yīng)自動(dòng)遞增,其初值應(yīng)該是源串和目標(biāo)串的首地址;當(dāng)DF=1時(shí),則情況正好相反。為了加快字符串操作的執(zhí)行,對(duì)任何一個(gè)基本操作指令,可以用加一個(gè)重復(fù)單字節(jié)前綴指令來指示該操作要重復(fù)執(zhí)行,所需重復(fù)的次數(shù)由CX中的初值來確定。重復(fù)的字符串處理過程可被中斷。CPU是在處理字符串的下一個(gè)元素之前識(shí)別中斷并轉(zhuǎn)入中斷服務(wù)程序,從中斷返回之后,重復(fù)過程從斷點(diǎn)繼續(xù)執(zhí)行下去。2023/11/3第三章電子工程系85字符串傳送指令符號(hào)指令:MOVS目的串,源串可用無操作數(shù)指令替代:
MOVSB;字節(jié)串比較指令
MOVSW;字串比較指令指令功能:將由源變址寄存器SI尋址的源串中的一個(gè)元素傳送到目的變址寄存器DI尋址的目的串中,同時(shí),CPU自動(dòng)修改SI和DI,以指向下一個(gè)元素。指令所處理的元素是字節(jié)還是字,由操作數(shù)(目的串或源串)的屬性規(guī)定。該指令不影響標(biāo)志位。2023/11/3第三章電子工程系86字符串比較指令符號(hào)指令:CMPS源串,目的串可用無操作數(shù)指令替代:CMPSB;字節(jié)串比較指令CMPSW;字串比較指令指令功能:將由源變址寄存器SI尋址的源串中的一個(gè)元素減去目的變址寄存器DI尋址的目的串中相對(duì)應(yīng)的一個(gè)元素,指令執(zhí)行后,兩個(gè)操作數(shù)的值均不發(fā)生變化,比較結(jié)果僅影響標(biāo)志位。同時(shí),CPU自動(dòng)修改SI和DI,以指向下一元素,即:((SI))-((DI));SI(SI)±2/1;DI(DI)±2/1;CX(CX)-1。2023/11/3第三章電子工程系87取串指令符號(hào)指令:LODS源串可用無操作數(shù)指令替代:
LODSB;取字節(jié)串指令
LODSW;取字串指令指令功能:將AX/AL寄存器中的一個(gè)字或一個(gè)字節(jié)存入目的串中由DI所指向的元素中,同時(shí),CPU自動(dòng)修改DI,以指向下一元素。即(DI)(AX)/(AL);DI(DI)±2/1。該指令不影響標(biāo)志位。2023/11/3第三章電子工程系88字符串搜索指令符號(hào):
SCAS目的串可用無操作數(shù)指令替代:
SCASB;字節(jié)串掃描
SCASW;字串掃描功能:在目的串中查找AX或AL的內(nèi)容。用AX或AL的內(nèi)容減去目的串中的一個(gè)字或字節(jié)的內(nèi)容,不保留結(jié)果,只根據(jù)結(jié)果置標(biāo)志位,同時(shí),CPU自動(dòng)修改DI,以指向下一個(gè)元素。2023/11/3第三章電子工程系89存串指令符號(hào)指令:STOS目的串可用無操作數(shù)指令替代:
STOSB;存字節(jié)串指令
STOSW;存字串指令
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國汽車音響產(chǎn)品行業(yè)銷售渠道及未來發(fā)展趨勢(shì)分析研究報(bào)告(2024-2030版)
- 中國新鮮草莓供需平衡分析及投資潛力可行性研究報(bào)告(2024-2030版)
- 中國富馬酸依美斯汀行業(yè)需求趨勢(shì)及投資動(dòng)態(tài)預(yù)測(cè)研究報(bào)告(2024-2030版)
- 中國塑料魚餌行業(yè)市場(chǎng)現(xiàn)狀分析及競(jìng)爭(zhēng)格局與投資發(fā)展研究報(bào)告(2024-2030版)
- 中國坎地沙坦酯行業(yè)發(fā)展趨勢(shì)及需求動(dòng)態(tài)預(yù)測(cè)研究報(bào)告(2024-2030版)
- 中國同步整流芯片行業(yè)市場(chǎng)現(xiàn)狀分析及競(jìng)爭(zhēng)格局與投資發(fā)展研究報(bào)告(2024-2030版)
- 中國雙頭應(yīng)急燈行業(yè)市場(chǎng)現(xiàn)狀分析及競(jìng)爭(zhēng)格局與投資發(fā)展研究報(bào)告(2024-2030版)
- 中國化學(xué)礦采選行業(yè)需求趨勢(shì)及投資效益預(yù)測(cè)研究報(bào)告(2024-2030版)
- 中國丙亞胺行業(yè)應(yīng)用態(tài)勢(shì)與發(fā)展前景預(yù)測(cè)研究報(bào)告(2024-2030版)
- 2024-2030年鼻內(nèi)鏡、宮腔鏡產(chǎn)業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 版式設(shè)計(jì)的網(wǎng)格系統(tǒng)
- JCT640-2010 頂進(jìn)施工法用鋼筋混凝土排水管
- 注塑車間平面規(guī)劃圖OK
- 八年級(jí)物理第一二章測(cè)試題(含答案)
- 兩山之路智慧樹知到課后章節(jié)答案2023年下麗水學(xué)院
- 青光眼PPT課件完整版
- 快速消費(fèi)品制造行業(yè)概述
- 類風(fēng)濕性關(guān)節(jié)炎綜述4572
- 《旅游管理信息系統(tǒng)》課程教學(xué)
- 鄉(xiāng)村醫(yī)生健康教育培訓(xùn)講稿課件
- 產(chǎn)品銷售培訓(xùn)心得
評(píng)論
0/150
提交評(píng)論