第5章86系列微型計(jì)算機(jī)的指令系統(tǒng)_第1頁(yè)
第5章86系列微型計(jì)算機(jī)的指令系統(tǒng)_第2頁(yè)
第5章86系列微型計(jì)算機(jī)的指令系統(tǒng)_第3頁(yè)
第5章86系列微型計(jì)算機(jī)的指令系統(tǒng)_第4頁(yè)
第5章86系列微型計(jì)算機(jī)的指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩82頁(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)介

第五章

86系列微型計(jì)算機(jī)的指令系統(tǒng)

匯編指令格式

尋址方式

8086指令系統(tǒng)5.1匯編指令的格式DATA SEGMENTSTR DB“Howdoyoudo?$” DATA ENDSSTACK SEGMENT STACK DB 200DUP(?)STACK ENDSCODE SEGMENT ASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA MOV DS,AX LEA DX,STR MOV AH,9 INT

21H MOV AH,4CH INT 21HCODE ENDS END START5.1.1匯編語(yǔ)言源程序結(jié)構(gòu)介紹例:顯示信息“Howdoyoudo?”任何一種匯編語(yǔ)言的指令語(yǔ)句都是與機(jī)器指令一一對(duì)應(yīng)的,它通過(guò)匯編程序?qū)⑵浞g成機(jī)器指令代碼(目標(biāo)代碼),讓CPU執(zhí)行某種操作。圖中由前向后的箭頭表示是可選項(xiàng),由后向前的箭頭表示是重復(fù)項(xiàng),圓頭方框表示是語(yǔ)句中的關(guān)鍵字。5.1.2匯編指令的格式標(biāo)號(hào)是給該指令所在地址取的名字,必須后跟冒號(hào)“:”,它可以缺省,是可供選擇的標(biāo)識(shí)符。-86系列匯編語(yǔ)言中可使用的標(biāo)識(shí)符必須遵循下列規(guī)則:①標(biāo)識(shí)符由字母(a-z,A-Z)、數(shù)字(0-9)或某些特殊字符(@,-,?)組成。②第一個(gè)字符必須是字母(a-z,A-Z)或某些特殊的符號(hào)(@,-,?),但“?”不能單獨(dú)作標(biāo)識(shí)符。③標(biāo)識(shí)符有效長(zhǎng)度為31個(gè)字符,若超過(guò)31個(gè)字符,則只保留前面的31個(gè)字符為有效標(biāo)識(shí)符。下面是有效的標(biāo)識(shí)符:

START:MY-CODE:ALPHA:

NUM@-1:LOOP1:X:?MORE-350:BETA-1:DELAYIS:下面是無(wú)效的標(biāo)識(shí)符:

4LOOP:MAIN

A/B:

BETA*:START=3:GAMA$1:

NUM+1:?:ONE*TWO:(2)指令助記符又稱操作碼,表示本指令的操作類型,是指令語(yǔ)句中的關(guān)鍵字,不可缺省。必要時(shí)可在指令助記符的前面加上一個(gè)或多個(gè)“前綴”,從而實(shí)現(xiàn)某些附加操作。(3)操作數(shù)是參加本指令運(yùn)算的數(shù)據(jù),有些指令不需要操作數(shù),可以缺省;有些指令需要兩個(gè)操作數(shù),這時(shí)必須用逗號(hào)(,)將兩個(gè)操作數(shù)分開;有些操作數(shù)可以用表達(dá)式來(lái)表示。(4)注釋部分是可選項(xiàng),允許缺省,如果帶注釋則必須用分號(hào)(;)開頭,注釋本身只用來(lái)對(duì)指令功能加以說(shuō)明,給閱讀程序帶來(lái)方便,匯編程序不對(duì)它做任何處理。5.1.3操作數(shù)類型

計(jì)算機(jī)中的一條指令通常包含兩部分:

依據(jù)操作數(shù)的個(gè)數(shù)劃分,80X86CPU指令系統(tǒng)中的指令格式最常用的有:雙操作數(shù)指令、單操作數(shù)指令和無(wú)操作數(shù)指令。

操作碼操作數(shù)一、操作數(shù)類型-格式:[標(biāo)號(hào):]操作符OPD,OPS

[;注釋]-操作規(guī)定:(1)OPD與OPS應(yīng)為同種操作類型且類型明確,即同為字節(jié)類型或字類型。(2)OPD不能是立即數(shù)。(3)OPS和OPD不能同時(shí)為存儲(chǔ)器操作數(shù),即:或者是OPS和OPD中至少有一個(gè)為寄存器操作數(shù),或者是OPD為存儲(chǔ)器操作數(shù),OPS為立即數(shù)。(4)操作結(jié)束后,運(yùn)算結(jié)果存入OPD中,OPS內(nèi)容不變。二、雙操作數(shù)指令匯編格式及操作規(guī)定-格式:[標(biāo)號(hào):]操作符OPD

[;注釋]-操作規(guī)定:(1)OPD類型必須明確即為字節(jié)類型或字類型,不能是模糊類型。(2)操作對(duì)象為目的操作數(shù),操作結(jié)束后結(jié)果存入OPD中。(3)OPD不能是立即數(shù),只能是寄存器操作數(shù)或存儲(chǔ)器操作數(shù)。三、單操作數(shù)指令匯編格式及操作規(guī)定-格式:[標(biāo)號(hào):]操作符

[;注釋]-操作規(guī)定:指令中只有操作碼,不含操作數(shù),這種指令有兩種可能:(1)無(wú)需任何操作數(shù)。如停機(jī)指令、空操作指令等。(2)所需操作數(shù)是隱含指定的,操作時(shí)取固定操作數(shù)進(jìn)行操作。

四、無(wú)操作數(shù)指令匯編格式及操作規(guī)定

5.2尋址方式

-尋址方式:尋找指令中所需操作數(shù)存放地址的方式或程序轉(zhuǎn)移時(shí)尋找轉(zhuǎn)移地址的方式。-尋址方式分類:數(shù)據(jù)尋址方式、轉(zhuǎn)移地址尋址方式。由于80X86指令涉及四種操作數(shù):立即操作數(shù)、寄存器操作數(shù)、存儲(chǔ)器操作數(shù)和隱含操作數(shù),因此,數(shù)據(jù)尋址方式又可對(duì)應(yīng)四種尋址方式,即:立即尋址、寄存器尋址、存儲(chǔ)器尋址和固定尋址。

1、立即尋址-因?yàn)椴僮鲾?shù)可以從指令中直接取得,不需要運(yùn)行總線周期,所以,立即數(shù)尋址方式的顯著特點(diǎn)就是速度快。立即數(shù)只能是整數(shù),不能是小數(shù)、變量或者其他類型的數(shù)據(jù)。-立即尋址只能用于源操作數(shù),不能用于目的操作數(shù)。

2、寄存器尋址-此尋址方式由于存取操作數(shù)直接從CPU內(nèi)部寄存器中獲得,不需訪問(wèn)存儲(chǔ)器,因而指令執(zhí)行的速度快。-寄存器尋址既可用于源操作數(shù),又可用于目的操作數(shù),應(yīng)用頻率高。-存儲(chǔ)器尋址方式的操作數(shù)都是存放在存儲(chǔ)器中,一般是數(shù)據(jù)段、附加段、堆棧段中的存儲(chǔ)單元。指令中給出的是存儲(chǔ)單元的地址或產(chǎn)生存儲(chǔ)單元地址的表達(dá)式。存儲(chǔ)單元地址是采用邏輯地址表示(段首址:段內(nèi)偏移地址)

--段首址存放在某個(gè)段寄存器中;

--段內(nèi)偏移地址是指存放操作數(shù)的存儲(chǔ)單元與段起始地址(段首址)之間的距離(字節(jié)數(shù)),又稱為“有效地址”,記作EA。有效地址EA是由3個(gè)地址分量的某種組合求得,這3個(gè)地址分量是:位移量、基址、變址。-這3個(gè)地址分量的不同組合,使形成有效地址EA的方法不同,相應(yīng)有以下5種不同的存儲(chǔ)器操作數(shù)尋址方式。

3、存儲(chǔ)器尋址(1)直接尋址-直接尋址是最簡(jiǎn)單的存儲(chǔ)器尋址,這種尋址,操作數(shù)的有效地址EA由指令直接給出。它主要用于存取簡(jiǎn)單變量。-對(duì)使用直接尋址方式需說(shuō)明以下幾點(diǎn):●操作數(shù)默認(rèn)存放在數(shù)據(jù)段中,段寄存器DS在指令格式無(wú)須指定?!袢舨僮鲾?shù)在代碼段、堆棧段或附加段中,則在指令格式中必須指定相應(yīng)的段寄存器名。在操作數(shù)地址之前使用前綴指出段寄存器名,這種前綴稱為段超越前綴。MOVBX,CS:[3000H]●指令中操作數(shù)的EA即可以是一個(gè)數(shù)字,也可以是一個(gè)符號(hào)地址。當(dāng)EA是一個(gè)數(shù)字時(shí),一定要注意立即尋址方式與直接尋址方式的區(qū)別。●直接尋址方式適合于處理存儲(chǔ)器的單個(gè)存儲(chǔ)單元。

(2)寄存器間接尋址(一)(2)寄存器間接尋址(二)操作數(shù)的有效地址EA存放在SI、DI、BX或BP四個(gè)寄存器之一中,即:EA=(BX)或(BP)或(SI)或(DI)。-SI、DI、BX、BP叫間址寄存器。若用BX、SI或DI間址尋址時(shí),則操作數(shù)默認(rèn)在數(shù)據(jù)段中,且用DS內(nèi)容作為段首址,操作數(shù)的物理地址為:(BX)

PA=(DS)×16+(SI)(DI)【例】MOVDL,[BX]-若指令中使用BP間址尋址時(shí),則操作數(shù)默認(rèn)在堆棧段中,且用SS的內(nèi)容作為段首址,操作數(shù)的物理地址為:PA=(SS)×16+(BP)?!纠縈OV[BP],AX

(3)基址尋址21-此尋址操作數(shù)的有效地址EA是指令中指定的基址寄存器的內(nèi)容與指令中給出的位移量之和,即:EA=(BX)+位移量(BP)-該尋址方式中若以BX作為基址寄存器,則操作數(shù)默認(rèn)在數(shù)據(jù)段中;若以BP作為基址寄存器,則操作數(shù)默認(rèn)在堆棧段中,因而操作數(shù)的物理地址為:

PA=(DS)×16+(BX)+位移量

(SS)×16+(BP)+位移量-若操作數(shù)不在默認(rèn)段中,則應(yīng)使用段超越前綴明確指定?!纠縈OVAX,[BX+7CH]MOVAX,[BP+COUNT]

(4)變址尋址-變址尋址與基址尋址類似,其操作數(shù)的有效地址EA是變址寄存器的內(nèi)容與位移量之和,即:EA=(SI)+位移量(DI)-默認(rèn)段是數(shù)據(jù)段,因而操作數(shù)的物理地址為:

PA=(DS)×16+(SI)+

位移量

(DI)-若操作數(shù)不在默認(rèn)段中,則應(yīng)使用段超越前綴明確指定?!纠縈OVDX,COUNT[DI]MOVES:3480H[SI],AX

(5)基址加變址尋址-操作數(shù)的有效地址EA是指令中的基址寄存器的內(nèi)容、變址寄存器的內(nèi)容、位移量三個(gè)地址分量之和,即:EA=(BX)+(SI)+位移量(BP)+(DI)-該尋址方式中若基址寄存器采用BX,則操作數(shù)默認(rèn)在數(shù)據(jù)段中;若基址寄存器采用BP,則操作數(shù)默認(rèn)在堆棧段中,因而操作數(shù)的物理地址為:PA=(DS)×16+(BX)+(SI)+位移量(DI)

(SS)×16+(BP)+(SI)+位移量

(DI)

【例】設(shè)BX=0158H,DI=10A5H,位移量=1B57H,DS=2100H,并假定沒有使用段前綴,即把DS作為操作數(shù)對(duì)應(yīng)的段寄存器。在各種尋址方式下,這些寄存器和位移量所產(chǎn)生的有效地址和物理地址為:①直接尋址:MOVAX,[1B57H]有效地址=1B57H物理地址=21000H+1B57H=22B57H②寄存器間接尋址(寄存器為BX):

MOVAX,[BX]有效地址=0158H物理地址=21000H+0158H=21158H③基址尋址:MOVAX,[BX+1B57H]有效地址=0158H+1B57H=1CAFH物理地址=21000H+1CAFH=22CAFH④變址尋址(寄存器為DI):MOVAX,[DI+1B57H]有效地址=10A5H+1B57H=2BFCH物理地址=21000H+10A5H=220A5H⑤基址加變址尋址(BX為基址寄存器,DI為變址寄存器):

MOVAX,[BX+DI+1B57H]有效地址=0158H+10A5H+1B57H=2D54H物理地址=21000H+2D54H=23D54H寫出下列指令執(zhí)行后的結(jié)果:1、MOVAX,1234HMOVBX,5678HADDAX,BX2、MOVAX,BUF(AX)=1212H,BUF為數(shù)據(jù)段定義的變量,其偏移地址是2000H,(DS)=3000H,(32000H)=4545H。執(zhí)行后:(AX)=?

3、MOVAX,[BX]若(DS)=2000H,(BX)=1000H,(AX)=2030H,(21000H)=0A0H,(21001H)=50H,

(21002H)=56H,(21003H)=67H

1、(AX)=68ACH,(BX)=5678H2、(AX)=4545H3、(AX)=50A0H,(21000H)=0A0H,(21001H)=50H答案4、MOVAX,[BP](AX)=0,(BP)=0030H,(SS)=2000H,(20030H)=1234H(20032H)=5678H5、MOVAX,6[BX](AX)=0040H,(BX)=0030H,(DS)=2000H,(20035H)=50H(20036H)=00H,(20037H)=41H,(20038H)=78H6、MOVAL,[BX+SI](MOVAL,[BX][SI])(DS)=1000H,(BX)=0010H,(SI)=0002H,(10012H)=45H4、答案5、6、(AL)=45H(AX)=4100H

5.38086指令系統(tǒng)

8086指令系統(tǒng)按功能可分為六大類:(1)數(shù)據(jù)傳送類指令(2)算術(shù)運(yùn)算類指令(3)位操作指令(4)串操作指令(5)控制轉(zhuǎn)移指令(6)處理器控制指令8086指令按操作數(shù)個(gè)數(shù)可劃分為三種類型:(1)雙操作數(shù)指令(2)單操作數(shù)指令(3)無(wú)操作數(shù)指令學(xué)習(xí)匯編指令應(yīng)從以下幾方面著重理解掌握:(1)學(xué)習(xí)指令格式;(2)掌握指令中操作數(shù)的尋址方式及尋址方式的搭配規(guī)則;(3)掌握指令的功能及指令執(zhí)行后對(duì)條件碼的影響;(4)學(xué)習(xí)如何正確運(yùn)用指令。一、數(shù)據(jù)傳送指令

1.通用數(shù)據(jù)傳送指令

(1)傳送指令MOV

格式:MOVOPD,OPS

功能:把源操作數(shù)傳送到目的操作數(shù)。即:OPD←(OPS)說(shuō)明:①源操作數(shù)和目的操作數(shù)的操作類型必須明確且一致;當(dāng)指令中只有一個(gè)操作數(shù)的類型明確時(shí),另一個(gè)操作數(shù)被視為同一類型;當(dāng)兩操作數(shù)類型均不明確時(shí),必須用“BYTEPTR”或“WORDPTR”將一個(gè)存儲(chǔ)器操作數(shù)定義為字節(jié)或字類型。②指令執(zhí)行后,源操作數(shù)內(nèi)容不變。③

指令執(zhí)行后,對(duì)標(biāo)志寄存器各位無(wú)影響。④

源操作數(shù)可以是通用寄存器、段寄存器、存儲(chǔ)器和立即數(shù);目的操作數(shù)也可以是通用寄存器、段寄存器、存儲(chǔ)器,但立即數(shù)、CS段寄存器不能作為目的操作數(shù)。源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)。

用一條MOV指令能實(shí)現(xiàn):

(a)立即數(shù)傳送到通用寄存器或存儲(chǔ)單元如MOVDL,’a’、MOVAX,1FA4H(b)寄存器之間的傳送如MOVAX,BX、MOVAL,DH、MOVDS,AX

(c)寄存器與存儲(chǔ)單元之間的傳送如MOVDL,BUFBYTEMOVWORDPTR[BX+SI],AX

由于MOV指令中只允許一個(gè)操作數(shù)在存儲(chǔ)器中,因此用一條MOV指令無(wú)法完成兩個(gè)存儲(chǔ)單元之間的數(shù)據(jù)傳送,但可以用二條指令來(lái)實(shí)現(xiàn)?!纠堪袯UFWORD1字單元內(nèi)容傳送到BUFWORD2字單元中,可用以下指令完成:MOVAX,BUFWORD1MOVBUFWORD2,AX

立即數(shù)段寄存器存儲(chǔ)單元通用寄存器圖MOV指令傳送路徑(1)立即數(shù)到通用寄存器的傳送立即數(shù)傳送到通用寄存器主要用于給通用寄存器賦初值,立即數(shù)(8位或16位)與通用寄存器的類型必須匹配。立即數(shù)可以是各種數(shù)制(十進(jìn)制、二進(jìn)制、八進(jìn)制、十六進(jìn)制)的常數(shù)、ASCII字符和符號(hào)常數(shù)。例5-1:分析下列立即數(shù)到通用寄存器的傳送指令。MOVAL,6;AL6,字節(jié)傳送MOVAX,10;AX10,字傳送MOVAL,1000H;非法指令,1000H為字,AL為字節(jié)寄存器MOVCX,0FFH;CX0FFH,字傳送(十六進(jìn)制)MOVAL,1010B;AL00001010B,字節(jié)傳送(二進(jìn)制)MOVAL,‘$’;AL24H(2)通用寄存器之間的數(shù)據(jù)傳送CPU內(nèi)部通用寄存器之間可以相互傳送,傳送時(shí)要注意兩操作數(shù)類型必須匹配,即同為字節(jié)型或同為字型。例5-2:分析下列各條指令。MOVAX,BX;AX(BX),字型MOVCL,AL;CL(AL),字節(jié)型MOVAL,CX;非法指令,兩操作數(shù)類型不一致(3)通用寄存器與存儲(chǔ)單元之間數(shù)據(jù)傳送通用寄存器與存儲(chǔ)單元之間相互傳送數(shù)據(jù)時(shí),傳送類型由通用寄存器類型來(lái)定。例3-3:分析下列各條指令。MOV[2000H],AL;[2000H](AL),字節(jié)傳送MOV[2000H],AX;[2000H](AL),[2001H](AH),字傳送MOVBH,[1050H];BH([1050H]),字節(jié)傳送MOVBX,[1050H];BL([1050H]),BH[1051H]),字傳送(4)通用寄存器與段寄存器之間、存儲(chǔ)單元與段寄存器之間的數(shù)據(jù)傳送由于段寄存器皆為16位寄存器,因此,通用寄存器與段寄存器之間、存儲(chǔ)單元與段寄存器之間只能是字傳送。另外,CS段寄存器不能作為傳送指令的目標(biāo)操作數(shù)。例5-4:分析下列各條指令。MOVDS,AX;DS(AX)MOVBX,CS;BX(CS)MOVCS,AX;非法指令,不允許給CS寄存器賦值MOVDS,AL;非法指令,操作數(shù)的類型不匹配MOV[1000H],DS;將16位段寄存器DS的內(nèi)容送入1000H

(低字節(jié))和1001H(高字節(jié))單元中(5)立即數(shù)傳送到存儲(chǔ)單元當(dāng)存儲(chǔ)單元的類型不確定時(shí),必須用BYTEPTR或WORDPTR屬性操作符來(lái)指定存儲(chǔ)單元的類型。例5-5:分析下列各條指令。MOVBUF1,20 ;BUF1為字節(jié)變量MOVSUM,0FFFFH ;SUM為字變量MOVBYTEPTR[1000H],8;字節(jié)型傳送,表示將08傳送到

1000H單元中MOVWORDPTR[1000H],8;字傳送,將08傳送到1000H

單元,將00傳送到1001H單元MOV[2000H],10H;非法指令,無(wú)法確定操作類型①M(fèi)OV指令不改變?cè)床僮鲾?shù)內(nèi)容,不影響標(biāo)志位。②源操作數(shù)和目的操作數(shù)應(yīng)該有相同的類型,即必須同為字節(jié)型或同為字型。③代碼段寄存器CS不能用作目的操作數(shù),即不允許給CS賦值。④立即數(shù)不能用作目的操作數(shù),立即數(shù)也不能直接傳送給段寄存器。若要設(shè)置數(shù)據(jù)段寄存器DS的初值為2000H,不能直接用指令

MOVDS,2000H

可用如下兩條指令表示:

MOVAX,2000HMOVDS,AX具體應(yīng)用時(shí)要特別注意以下幾點(diǎn):例5-6:交換兩個(gè)存儲(chǔ)單元BUF1和BUF2的內(nèi)容。MOVAX,BUF1;AX(BUF1)MOVBUF2,AX;BUF2(AX)⑥不允許在段寄存器之間直接傳送數(shù)據(jù)。例如:MOVDS,ES為非法指令。⑤源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)單元操作數(shù)。

(2)交換指令XCHG

格式:XCHGOPD,OPS

功能:源操作數(shù)和目的操作數(shù)的內(nèi)容相互交換。即:(OPD)←→(OPS)

說(shuō)明:該指令與MOV指令相似,但在功能上有兩點(diǎn)區(qū)別,其一,該指令不允許使用立即數(shù)和段寄存器作為操作數(shù);其二,該指令改變?cè)床僮鲾?shù)的內(nèi)容。

交換指令XCHG可以實(shí)現(xiàn)字節(jié)交換,也可以實(shí)現(xiàn)字交換。交換過(guò)程可以在CPU的內(nèi)部寄存器之間進(jìn)行,也可以在內(nèi)部寄存器和存儲(chǔ)單元之間進(jìn)行,但不能在兩個(gè)存儲(chǔ)單元之間執(zhí)行數(shù)據(jù)交換過(guò)程。

【例】寄存器與寄存器、存儲(chǔ)器之間數(shù)據(jù)交換。MOV AX,5678H ;(AX)=5678HMOV BX,0FFFFH ;(BX)=0FFFFHXCHG AX,BX ;(AX)=0FFFFH,(BX)=5678HXCHG[2530],CX;CX中的內(nèi)容和2530,2531兩單元的內(nèi)容交換(3)查表轉(zhuǎn)換指令XLAT格式:XLAT或XLATOPS功能:將(BX)為首址(AL)為位移量的字節(jié)存儲(chǔ)單元中的數(shù)據(jù)傳送到AL中。即:AL←([BX+AL])字節(jié)*在執(zhí)行該指令之前,必須建立好一張翻譯表,該表的最大容量為256字節(jié)。執(zhí)行XLAT指令可將任意一個(gè)十進(jìn)制數(shù)翻譯成7段顯示碼,其操作步驟如下:(1)將譯碼表定位到某個(gè)邏輯段的一片連續(xù)地址中,并將其表首址的偏移地址置入BX寄存器中。(2)將待翻譯的十進(jìn)制數(shù)字送入AL寄存器中。(3)執(zhí)行XLAT指令。例如,假設(shè)這段數(shù)據(jù)存放在偏移地址為2000H開始的內(nèi)存中,取出“3”所對(duì)應(yīng)的7段碼,用如下幾條程序助記符即可完成:MOV

BX,2000H

MOV

AL,3

XLAT

2.地址傳送指令

地址傳送指令主要用于將存儲(chǔ)器操作數(shù)地址(偏移地址、段地址)傳送給指定的寄存器。它包括3條指令:LEA、LDS和LES。(1)傳送有效地址指令LEA

格式:LEAREG16,OPS

功能:將源操作數(shù)的有效地址EA傳送給目的操作數(shù)指定的16位通用寄存器。說(shuō)明:①源操作數(shù)必須是存儲(chǔ)器操作數(shù),即OPS采用存儲(chǔ)器尋址;目的操作數(shù)必須是一個(gè)16位通用寄存器。②本指令對(duì)標(biāo)志位無(wú)影響。③該指令通常用來(lái)建立內(nèi)存儲(chǔ)器的寄存器指針。LEA

AX,[2728];將2728單元的偏移量送AX,指令執(zhí)行后,AX中為2728

LEA

BX,[BP+SI];指令執(zhí)行后,BX中的內(nèi)容為BP+SI的值

(2)傳送偏移地址及數(shù)據(jù)段首址指令LDS格式:LDSREG16,OPS功能:將由源操作數(shù)確定的雙字存儲(chǔ)單元的內(nèi)容傳送給DS及目的操作數(shù)指定的16位通用寄存器中,其中高字單元的內(nèi)容送給DS,低字單元的內(nèi)容送給REG16。說(shuō)明:①源操作數(shù)必須是雙字存儲(chǔ)器操作數(shù),即:OPS采用存儲(chǔ)器尋址,尋找到相繼4個(gè)字節(jié)的存儲(chǔ)單元,低字單元中存放偏移地址,高字單元中存放段首地址;目的操作數(shù)必須是一個(gè)16位通用寄存器,通常特定為SI。

②本指令不影響標(biāo)志位。例:設(shè)2130H~2133H這4個(gè)單元中存放著一個(gè)地址,2130H和2131H中為地址的偏移量,2132H和2133H中為地址的段值,執(zhí)行指令:

LDSDI,[2130H];2130H和2131H中的偏移量送到DI,2132H和2133H中的段值送到DS。

(3)傳送偏移地址及附加段首址指令LES格式:LESREG16,OPS功能:將由源操作數(shù)確定的雙字存儲(chǔ)單元的內(nèi)容傳送給ES及目的操作數(shù)指定的16位通用寄存器中,其中高字單元的內(nèi)容送給ES,低字單元的內(nèi)容送給REG16。說(shuō)明:同LDS指令。*LES指令與LDS指令的操作基本相同,所不同僅在于將源操作數(shù)所指向地址指針中的段基址(后兩個(gè)字節(jié))傳送到ES段寄存器,而不是DS段寄存器。

3.標(biāo)志位傳送指令

標(biāo)志位傳送指令有4條指令,即:LAHF、SAHF、PUSHF和POPF。(1)標(biāo)志送AH指令LAHF格式:LAHF功能:將標(biāo)志寄存器低8位的內(nèi)容送入AH寄存器。即:AH←(FLAGS)7-0,該指令的執(zhí)行不影響標(biāo)志位。(2)AH標(biāo)志送指令SAHF格式:SAHF功能:將AH寄存器的內(nèi)容送入標(biāo)志寄存器低8位,高8位保持不變。該指令用于設(shè)置或恢復(fù)SF、ZF、AF、PF、CF五個(gè)標(biāo)志位,該指令的執(zhí)行只影響標(biāo)志寄存器的低8位,對(duì)高8位(即OF、DF、IF、TF)標(biāo)志位無(wú)影響。從指令的功能上可看出,SAHF和LAHF為互逆過(guò)程。

(3)標(biāo)志進(jìn)棧指令PUSHF

格式:PUSHF

功能:將標(biāo)志寄存器的內(nèi)容壓入堆棧。(4)標(biāo)志出棧指令POPF

格式:POPF

功能:將棧頂字單元內(nèi)容彈出到標(biāo)志寄存器中。該指令的執(zhí)行影響標(biāo)志位。PUSHF和POPF指令一般用在子程序和中斷處理程序的首尾,起保存主程序標(biāo)志和恢復(fù)主程序標(biāo)志的作用。PUSHF和POPF互為逆過(guò)程。

【例】將標(biāo)志寄存器的單步標(biāo)志TF置位。PUSHF ;(FLSGS)→↓(SP)POPAX ;(SP)→AXORAX,0100H ;設(shè)置D8=TF=1PUSHAX ;(AX)→↓(SP)POPF;(SP)→↓FLAGS,即(AX)→↓FLAGS

標(biāo)志位傳送指令中SAHF和POPF指令將直接影響標(biāo)志寄存器的內(nèi)容。利用這一特性,可以方便地改變標(biāo)志寄存器中指定位的狀態(tài).

4.堆棧操作指令堆棧操作的用途在子程序調(diào)用和中斷處理過(guò)程時(shí),分別要保存返回地址和斷點(diǎn)地址,在進(jìn)入子程序和中斷處理后,還需要保留通用寄存器的值;子程序返回和中斷處理返回時(shí),則要恢復(fù)通用寄存器的值,并分別將返回地址或斷點(diǎn)地址恢復(fù)到指令指針寄存器中。這些功能都要通過(guò)堆棧來(lái)實(shí)現(xiàn),其中寄存器的保存和恢復(fù)需要由堆棧指令來(lái)完成。86系列指令系統(tǒng)中提供了專用的堆棧操作指令,其中PUSH是把字壓入堆棧,POP是把字彈出堆棧。在程序中采用堆棧操作指令時(shí),應(yīng)預(yù)置堆棧段寄存器SS、堆棧指示器SP的值,同時(shí),使SP的內(nèi)容為當(dāng)前堆棧段的棧頂。1)進(jìn)棧指令PUSH語(yǔ)句格式:PUSHOPS功能:將寄存器、段寄存器或存儲(chǔ)器中的一個(gè)字?jǐn)?shù)據(jù)壓入堆棧,堆棧指針減2。即:①(SP)-1→SP(OPS)15~8→[SP]②(SP)-1→SP (OPS)7~0→[SP]2)出棧指令POP語(yǔ)句格式:POPOPD功能:將棧頂元素彈出送至某一寄存器、段寄存器(除CS外)或存儲(chǔ)器,堆棧指針加2。從POP指令功能可看出,該指令為PUSH指令的逆過(guò)程。即:①([SP])→(OPD)7~0 (SP)+1→SP②([SP])→(OPD)15~8 (SP)+1→SP例:將16位通用寄存器CX的內(nèi)容壓入堆棧,已知:(SS)=0200H,(SP)=0008H,(CX)=12FAH。指令:PUSHCX例:將16位通用寄存器CX的內(nèi)容彈出堆棧,已知:(SS)=0200H,(SP)=0006H,(CX)=12FAH。指令:POPCX二、算術(shù)運(yùn)算指令

算術(shù)運(yùn)算指令用來(lái)執(zhí)行加、減、乘、除四則運(yùn)算。它包括無(wú)符號(hào)數(shù)、有符號(hào)數(shù)的二進(jìn)制算術(shù)運(yùn)算指令和十進(jìn)制算術(shù)運(yùn)算調(diào)整指令。1加法指令(1)不帶進(jìn)位加法指令A(yù)DD(2)帶進(jìn)位加指令A(yù)DC(3)加1指令I(lǐng)NC1.二進(jìn)制數(shù)算術(shù)運(yùn)算指令(1)加法運(yùn)算指令加法運(yùn)算指令包括ADD、ADC、INC三條指令。①加法指令A(yù)DD格式:ADDOPD,OPS功能:將目的操作數(shù)與源操作數(shù)相加,結(jié)果存入目的地址中,而源操作數(shù)不變。即:OPD←(OPD)+(OPS)。說(shuō)明:該指令的源操作數(shù)或在通用寄存器或在存儲(chǔ)單元中,也可以是立即數(shù),而目的操作數(shù)只能在通用寄存器或存儲(chǔ)單元中,不能是立即數(shù),且兩操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù);操作數(shù)可以是字節(jié)或字,且兩操作數(shù)的類型明確并一致。該指令相加后,根據(jù)得到的結(jié)果設(shè)置標(biāo)志寄存器的OF、SF、ZF、CF、AF和PF標(biāo)志位。ADD指令執(zhí)行后對(duì)標(biāo)志位的影響及作用如下,這里我們只重點(diǎn)說(shuō)明OF、CF、SF和ZF四個(gè)標(biāo)志位。OF:當(dāng)兩個(gè)有符號(hào)數(shù)相加時(shí),若兩個(gè)操作數(shù)的符號(hào)相同,而結(jié)果的符號(hào)與之相反,則OF=1,否則,其余情況OF=0。當(dāng)OF=1時(shí),說(shuō)明兩個(gè)有符號(hào)數(shù)相加產(chǎn)生了溢出,即和的值超出了有符號(hào)數(shù)的有效范圍。在把操作數(shù)視為有符號(hào)數(shù)時(shí),可通過(guò)該標(biāo)志了解加法結(jié)果是否正確。CF:運(yùn)算過(guò)程中當(dāng)最高位產(chǎn)生進(jìn)位時(shí),則CF=1,否則,CF=0。當(dāng)CF=1時(shí),說(shuō)明運(yùn)算結(jié)果超出了無(wú)符號(hào)數(shù)的表示范圍。

在把操作數(shù)視為無(wú)符號(hào)數(shù)時(shí),可通過(guò)該標(biāo)志了解加法結(jié)果是否正確。

SF:運(yùn)算結(jié)果的最高位為1,則SF=1,否則,SF=0。ZF:運(yùn)算結(jié)果為零時(shí),則ZF=1;否則,ZF=0。②

帶進(jìn)位加法指令A(yù)DC

格式:ADC

OPD,OPS

功能:與ADD指令基本相同,惟一區(qū)別是將該指令執(zhí)行前的CF值加至目的操作數(shù)中。即:OPD←(OPD)+(OPS)+CF

說(shuō)明:該指令與ADD指令在功能上及結(jié)果對(duì)標(biāo)志位影響上基本相同。該指令主要用于多字節(jié)的加法運(yùn)算。

【例】無(wú)符號(hào)雙字加法運(yùn)算。MOV AX,4652H ;(AX)=4652HADD AX,0F0F0H ;(AX)=?,CF=?MOV DX,0234H ;(DX)=0234HADC DX,0F0F0H ;(DX)=?,CF=?(AX)=3742H,CF=1(DX)=0F325H,CF=0③加1指令I(lǐng)NC格式:INCOPD功能:將目的操作數(shù)加1后送回目的地址中,并根據(jù)執(zhí)行結(jié)果設(shè)置標(biāo)志位OF、SF、ZF、AF、PF,但不影響CF位。說(shuō)明:該指令的操作數(shù)可以是字或字節(jié)且類型必須明確。其操作數(shù)只能在通用寄存器或存儲(chǔ)單元中,不能是立即數(shù)。該指令執(zhí)行后對(duì)OF、SF、ZF、AF、PF標(biāo)志位的影響與ADD指令相同。INC主要用于計(jì)數(shù)器的計(jì)數(shù)或修改地址指針。ADD

AL,50H;AL和50H相加,結(jié)果放在AL中ADD

CX,1000H;CX中的內(nèi)容和1000H相加,結(jié)果放在CX中ADD

DI,SI;DI和SI的內(nèi)容相加,結(jié)果放在DI中ADD[BX+DI],AX;BX+DI和BX+DI+1兩個(gè)存儲(chǔ)單元的內(nèi)容和AX中的內(nèi)容

;相加,結(jié)果放在BX+DI和BX+DI+1所指的存儲(chǔ)單元中ADD

AX,[BX+2000H];BX+2000H和BX+2001H所指的兩單元的內(nèi)容和AX;的內(nèi)容相加,結(jié)果放在AX中ADC

DX,[SI];SI和SI+1所指的存儲(chǔ)單元的內(nèi)容和DX的內(nèi)容以及CF的值相加,結(jié)果放在DX中ADC

BX,3000H;BX的內(nèi)容和立即數(shù)3000H以及CF的值相加,結(jié)果放在BX中ADC

AL,5;AL的內(nèi)容和立即數(shù)5以及CF的值相加,結(jié)果送AL中例:ADC指令為實(shí)現(xiàn)多字節(jié)的加法運(yùn)算提供了方便。比如,有兩個(gè)4字節(jié)的無(wú)符號(hào)數(shù)相加,這兩個(gè)數(shù)分別放在2000H和3000H開始的存儲(chǔ)單元中,低位在前,高位在后,要求進(jìn)行運(yùn)算后,得到的和放在2000H開始的內(nèi)存單元中??梢杂萌缦鲁绦蚨螌?shí)現(xiàn)這種多字節(jié)的加法:CLC

;清進(jìn)位位CFMOV

SI,2000H;取第一個(gè)數(shù)的首地址MOV

AX,[SI];將第一個(gè)數(shù)的低16位取到AXMOV

DI,3000H;取第二個(gè)數(shù)的首地址ADDAX,[DI];

第一個(gè)數(shù)和第二個(gè)數(shù)的低16位相加MOV[SI],AX;低16位相加的結(jié)果送到2000H,2001H單元MOV

AX,[SI+2];取第一個(gè)數(shù)的高16位送到AX中ADC

AX,[DI+2];兩個(gè)數(shù)的高16位連同進(jìn)位位相加MOV[SI+2],AX;高16位相加的結(jié)果送到2002H,2003H單元2減運(yùn)算指令(1)不帶借位減法指令SUB(2)帶借位減指令SBB(3)減1指令DEC(4)求補(bǔ)指令NEG(5)比較指令CMP

(2)減法運(yùn)算指令減法運(yùn)算指令包括SUB、SBB、DEC、NEG和CMP五條指令。①減法指令SUB

格式:SUBOPD,OPS

功能:目的操作數(shù)減去源操作數(shù),其差值存入目的地址,源操作數(shù)不變,即:OPD←(OPD)-(OPS)。并按相減的結(jié)果設(shè)置標(biāo)志位OF、CF、SF、ZF、AF和PF。說(shuō)明:該指令的源操作數(shù)和目的操作數(shù)可以在通用寄存器或存儲(chǔ)單元中,但兩者不能同時(shí)在存儲(chǔ)器中,立即數(shù)可作為源操作數(shù),而不能作為目的操作數(shù)。兩操作數(shù)可以是字節(jié)或字,且類型明確一致。SUB指令執(zhí)行后對(duì)標(biāo)志位的影響與ADD指令類似,下面僅說(shuō)明CF和OF兩位的設(shè)置情況及作用:

OF:當(dāng)兩個(gè)有符號(hào)數(shù)相減時(shí),若兩個(gè)操作數(shù)的符號(hào)相反,而結(jié)果的符號(hào)與減數(shù)相同,則OF=1,否則,其余情況OF=0。

OF=1時(shí),說(shuō)明有符號(hào)數(shù)減法溢出,結(jié)果是錯(cuò)誤的。OF位可用來(lái)判斷有符號(hào)數(shù)相減,結(jié)果是否正確。

CF:當(dāng)兩無(wú)符號(hào)數(shù)相減時(shí),若減數(shù)大于被減數(shù),則此時(shí)有借位,

CF=1,否則CF=0,CF值反映了無(wú)符號(hào)數(shù)相減時(shí)是否有借位。②帶借位減法指令SBB

格式:SBB

OPD,OPS

功能:SBB與SUB指令基本相同,惟一區(qū)別是:目的操作數(shù)除減去源操作數(shù)外,還要減去該指令執(zhí)行前的CF值。即:OPD←(OPD)-(OPS)-CF。并按相減的結(jié)果設(shè)置標(biāo)志位OF、CF、SF、ZF、AF和PF。

說(shuō)明:該指令與SUB指令在功能上及結(jié)果對(duì)標(biāo)志位的影響上基本相同。該指令在使用上類似于ADC指令,主要用于多字節(jié)減法運(yùn)算。

SUB和SBB指令配合可以實(shí)現(xiàn)多倍精度數(shù)減法運(yùn)算。③減1指令DEC

格式:DEC

OPD

功能:將目的操作數(shù)減1后送入目的地址中,并根據(jù)執(zhí)行結(jié)果設(shè)置標(biāo)志位OF、SF、ZF、AF和PF,但不影響CF位。即OPD←(OPD)-1。

說(shuō)明:該指令的操作數(shù)可以是字節(jié)或字且類型必須明確;其操作數(shù)只能在通用寄存器或存儲(chǔ)單元中,不能是立即數(shù)。該指令執(zhí)行后對(duì)OF、SF、ZF、AF、PF的影響與SUB指令相同。

SUB

BX,CX;將BX中的內(nèi)容減去CX中的內(nèi)容,結(jié)果放在BX中SUB[BP+2],CL;將SS段的BP+2所指的單元中的值減去CL中的值,;結(jié)果放在BP+2所指的堆棧單元中SUB

AL,20;AL中的數(shù)減去20,結(jié)果放在AL中SUB

SI,5010H;SI中的數(shù)減去5010H,結(jié)果放在SI中SUB

WORDPTR[DI],1000H;DI和DI+1所指的兩單元中的數(shù)減去1000H,結(jié)果放在DI和DI+1所指的單元中SBB

AX,2030H;將AX的內(nèi)容減去立即數(shù)2030H,并減去進(jìn)位位CF的值SBB

WORDPTR[DI+2],1000H;將DI+2和DI+3所指的兩單元的內(nèi)容減去立即數(shù)1000H,并減去CF的值,結(jié)果放在DI+2和DI+3所指的單元中DEC

AX;將AX的內(nèi)容減1,再送回AX中DEC

BL;將BL的內(nèi)容減1,結(jié)果送回BL中DEC

BYTEPTR[DI+2];將DI+2所指的單元的內(nèi)容減1,結(jié)果送回此單元【例】減法運(yùn)算。MOV AX,5678H ;(AX)=5678HSUB AX,1234H ;(AX)=4444HMOV BX,3354H ;(BX)=3354HSUB BX,3340H ;(BX)=0014H④求負(fù)數(shù)指令NEG

格式:NEGOPD

功能:用零減去目的操作數(shù),相減結(jié)果送回目的地址中。即:OPD←0-(OPD)=-(OPD)即求目的操作數(shù)的相反數(shù)。說(shuō)明:(a)該指令是單操作數(shù)指令,OPD的用法與前面講過(guò)的單操作數(shù)指令,如INC、DEC)中的目的操作數(shù)相同。(b)NEG指令是對(duì)有符號(hào)數(shù)進(jìn)行操作的,由于機(jī)器中有符號(hào)數(shù)是用補(bǔ)碼表示的,求一個(gè)操作數(shù)的負(fù)數(shù),就是求其補(bǔ)碼,NEG又叫求補(bǔ)指令,即:將目的操作數(shù)的每一位求反(包括符號(hào)位)后加1,結(jié)果送目的地址。(c)該指令執(zhí)行后影響標(biāo)志位CF、OF、SF、ZF、AF和PF。其中:OF:當(dāng)字節(jié)操作數(shù)為-128(80H),字操作數(shù)為-32768

(8000H),執(zhí)行NEG指令后,操作數(shù)無(wú)變化,但溢出標(biāo)志位OF置1,其余情況OF置0。CF:當(dāng)操作數(shù)為零時(shí),求負(fù)數(shù)的結(jié)果仍為零,CF=0,其余情況CF=1

【例】求補(bǔ)運(yùn)算。MOV AX,0FF64HNEG AL ;(AX)=?SUB AL,9DH ;(AX)=?NEG AX ;(AX)=?DEC AL ;(AX)=?NEG AX ;(AX)=?(AX)=0FF9CH(AX)=0FFFFH(AX)=0001H(AX)=0000H(AX)=0000H⑤比較指令CMP格式:CMP

OPD,OPS功能:目的操作數(shù)減去源操作數(shù),結(jié)果只影響標(biāo)志位,不送入目的地址即:(OPD)-(OPS)。說(shuō)明:CMP指令與SUB指令一樣執(zhí)行減法操作,但它不保存差值結(jié)果,

OPD和OPS在操作前后值不變。CMP指令功能上、使用方法上、對(duì)標(biāo)志位的影響上均與SUB指令基本相同。CMP指令常用于比較兩個(gè)操作數(shù)的大小。執(zhí)行CMP指令后,根據(jù)標(biāo)志位的設(shè)置情況判斷兩個(gè)數(shù)的大小關(guān)系。若兩無(wú)符號(hào)數(shù)比較時(shí):當(dāng)ZF=0時(shí),則OPD=OPS;

否則:當(dāng)CF=0時(shí),則OPD>OPS;

當(dāng)CF=1時(shí),則OPD<OPS。若兩有符號(hào)數(shù)比較時(shí):當(dāng)ZF=0時(shí),則OPD=OPS;

否則:當(dāng)OF=SF時(shí),則OPD>OPS;

當(dāng)OF≠SF時(shí),則OPD<OPS。CMP指令后面常跟著條件轉(zhuǎn)移指令,根據(jù)比較結(jié)果產(chǎn)生不同的分支。

【例】比較AL的內(nèi)容數(shù)值大小。CMP AL,50 ;(AL)-50JB BELOW ;(AL)<50,轉(zhuǎn)到BELOW處執(zhí)行SUB AL,50 ;(AL)>=50,(AL)-50→ALINC AH ;(AH)+1→AHBELOW:

(3)乘法運(yùn)算指令乘法指令用于實(shí)現(xiàn)兩個(gè)二進(jìn)制操作數(shù)的乘法運(yùn)算,乘法指令區(qū)別無(wú)符號(hào)數(shù)和有符號(hào)數(shù),所以它提供了兩條指令:MUL和IMUL。

①無(wú)符號(hào)數(shù)乘法指令MUL

格式:MUL

OPS

功能:實(shí)現(xiàn)兩個(gè)無(wú)符號(hào)數(shù)相乘。

字節(jié)乘:當(dāng)OPS為字節(jié)操作數(shù)時(shí),將(AL)乘以(OPS),

得到字乘積送入AX中,即:AX←(AL)×(OPS)。

字乘:當(dāng)OPS為字操作數(shù)時(shí),將(AX)乘以(OPS),得到雙字乘積,高字部分送入DX中,低字部分送入AX中。即:DX,AX←(AX)×(OPS)。

說(shuō)明:(a)MUL指令有兩種操作類型,即字節(jié)乘和字乘,MUL操作類型取決于OPS的類型,OPS指定乘數(shù),它可以是字節(jié)或字,但類型必須明確,乘數(shù)可以在通用寄存器或存儲(chǔ)器中,但不能是立即數(shù)。(b)MUL指令只影響OF和CF位。

若乘積的高一半(即字節(jié)相乘時(shí)乘積中的(AH),字相乘時(shí)乘積中的(DX))為0,則OF=CF=0,否則OF=CF=1。MUL指令對(duì)其它標(biāo)志位不確定。當(dāng)CF=OF=1時(shí),說(shuō)明AH或DX中有乘積的有效數(shù)字,CF=OF=0時(shí),說(shuō)明AH或DX中無(wú)乘積的有效數(shù)字,也就是說(shuō)字節(jié)乘以字節(jié)積為字節(jié)或字乘以字積為字。編程時(shí)我們可以利用OF和CF位的設(shè)置情況檢查字節(jié)乘時(shí)乘積的結(jié)果是字節(jié)還是字,字乘時(shí)乘積的結(jié)果是字還是雙字。②有符號(hào)數(shù)乘法指令I(lǐng)MUL

格式:IMULOPS

功能:實(shí)現(xiàn)了兩個(gè)有符號(hào)數(shù)相乘。其操作方法與MUL指令相同。說(shuō)明:IMUL指令也只影響OF和CF位,對(duì)其它標(biāo)志位不確定。若乘積的高一半(即AH或DX)是低一半(即AL或AX)的符號(hào)擴(kuò)展,

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論