微型計(jì)算機(jī)指令系統(tǒng)_第1頁(yè)
微型計(jì)算機(jī)指令系統(tǒng)_第2頁(yè)
微型計(jì)算機(jī)指令系統(tǒng)_第3頁(yè)
微型計(jì)算機(jī)指令系統(tǒng)_第4頁(yè)
微型計(jì)算機(jī)指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩60頁(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、第三章第三章 微型計(jì)算機(jī)指令系統(tǒng)微型計(jì)算機(jī)指令系統(tǒng) 指令系統(tǒng)是微處理器(指令系統(tǒng)是微處理器(CPU)所能執(zhí)行的指令)所能執(zhí)行的指令的集合,它與微處理器有密切的聯(lián)系,不同的微處的集合,它與微處理器有密切的聯(lián)系,不同的微處理器有不同的指令系統(tǒng)。在本章中我們主要講解理器有不同的指令系統(tǒng)。在本章中我們主要講解INTEL公司生產(chǎn)的公司生產(chǎn)的8086/8088CPU的尋址方式以及各的尋址方式以及各種指令系統(tǒng),并通過(guò)具體實(shí)例講述了各條指令的功種指令系統(tǒng),并通過(guò)具體實(shí)例講述了各條指令的功能和使用方法。能和使用方法。通過(guò)本章的學(xué)習(xí),讀者應(yīng)該掌握以下內(nèi)容:通過(guò)本章的學(xué)習(xí),讀者應(yīng)該掌握以下內(nèi)容: 3種操作數(shù)的尋址方

2、式種操作數(shù)的尋址方式 常用指令的格式、功能、以及對(duì)標(biāo)志位的影響常用指令的格式、功能、以及對(duì)標(biāo)志位的影響 3、1 8086/8088的尋址方式的尋址方式操作碼操作碼 操作數(shù)操作數(shù)匯編指令:匯編指令:操作碼:操作碼:指令操作類型;指令操作類型;操作數(shù):操作數(shù):指令所需操作數(shù)或操作數(shù)的地址;操作數(shù)可以指令所需操作數(shù)或操作數(shù)的地址;操作數(shù)可以有一個(gè),也可以有兩個(gè),一個(gè)源操作數(shù),一個(gè)目的操作有一個(gè),也可以有兩個(gè),一個(gè)源操作數(shù),一個(gè)目的操作數(shù)。數(shù)。例:例: MOV AX,CX ;將;將CX的內(nèi)容送入的內(nèi)容送入AX中。中。本章主要介紹本章主要介紹8086/8088的指令系統(tǒng)以及在指令中為的指令系統(tǒng)以及在指令

3、中為取得操作數(shù)地址所使用的尋址方式。取得操作數(shù)地址所使用的尋址方式。 3 、 1、1 立即尋址方式立即尋址方式指令操作數(shù)部分直接給出指令的操作數(shù),操作數(shù)與操作指令操作數(shù)部分直接給出指令的操作數(shù),操作數(shù)與操作碼一起存入代碼段中碼一起存入代碼段中。立即數(shù)有立即數(shù)有8位和位和16位。位。例例 :MOV AL,5 ;源操作數(shù)為立即尋址;源操作數(shù)為立即尋址指令執(zhí)行后,指令執(zhí)行后,AL=05H,8位數(shù)據(jù)位數(shù)據(jù)05H存入存入AL寄存器。寄存器。例例 :MOV AX,3064H ;源操作數(shù)為立即尋址;源操作數(shù)為立即尋址指令執(zhí)行后,指令執(zhí)行后,AX=3064H,16位數(shù)據(jù)位數(shù)據(jù)3064H存入存入AX寄存寄存器。

4、器。 3、 1、2 寄存器尋址方式寄存器尋址方式寄存器尋址方式的操作數(shù)是寄存器的值,指令中直接寄存器尋址方式的操作數(shù)是寄存器的值,指令中直接使用寄存器名,包括使用寄存器名,包括8位或位或16位通用寄存器和段寄存器。位通用寄存器和段寄存器??墒褂玫目墒褂玫?6位寄存器:位寄存器:AX、BX、CX、DX、SI、DI、SP、BP;其中:;其中:AX、BX、CX、DX可分成兩可分成兩8位使用。位使用。例:例: MOV AX,CX ;(;(AX) (CX) DEC AL ;(;(AL) (AL)-13、1、3 內(nèi)存尋址方式內(nèi)存尋址方式在內(nèi)存尋址方式中,操作數(shù)是某個(gè)內(nèi)存單元的內(nèi)容在內(nèi)存尋址方式中,操作數(shù)是

5、某個(gè)內(nèi)存單元的內(nèi)容(值),指令中給出的是內(nèi)存單元的有效地址(值),指令中給出的是內(nèi)存單元的有效地址EA(即(即偏移地址),段地址通常在隱含的某個(gè)段寄存器中。偏移地址),段地址通常在隱含的某個(gè)段寄存器中。1、直接尋址方式、直接尋址方式 直接尋址方式的操作數(shù)的形式為:直接尋址方式的操作數(shù)的形式為:Variable或或Variable在直接尋址方式中,操作數(shù)的偏移地址在直接尋址方式中,操作數(shù)的偏移地址(有效地址有效地址EA)直接用指令加以指定直接用指令加以指定(有直接地址值和標(biāo)號(hào)兩種形式有直接地址值和標(biāo)號(hào)兩種形式),它存放在代碼段中指定操作碼之后,但操作數(shù)一般存放它存放在代碼段中指定操作碼之后,但操

6、作數(shù)一般存放在存儲(chǔ)器的數(shù)據(jù)段中,所以必須先求出操作數(shù)的物理地在存儲(chǔ)器的數(shù)據(jù)段中,所以必須先求出操作數(shù)的物理地址,然后再訪問(wèn)存儲(chǔ)器才能取得操作數(shù)。段地址隱含的址,然后再訪問(wèn)存儲(chǔ)器才能取得操作數(shù)。段地址隱含的由由DS 指定,也可以指定,也可以ES指定,但需在指令中指明。最后指定,但需在指令中指明。最后存儲(chǔ)器地址為:存儲(chǔ)器地址為:DS:偏移地址偏移地址 或或 ES:偏移地址。偏移地址。例:例: MOV AX,ES:2000H將將ES:2000H單元內(nèi)容送入單元內(nèi)容送入AX。例:例: MOV AX,LABLE 或或 MOV AX,LABEL將標(biāo)號(hào)為將標(biāo)號(hào)為L(zhǎng)ABLE(存放操作數(shù)單元的符號(hào)地址存放操作數(shù)

7、單元的符號(hào)地址) ,即,即DS:LABLE中的內(nèi)容送入中的內(nèi)容送入AX。2、寄存器間接尋址、寄存器間接尋址寄存器間接尋址方式的操作數(shù)形式為:寄存器間接尋址方式的操作數(shù)形式為:reg操作數(shù)的有效地址包含在基址寄存器操作數(shù)的有效地址包含在基址寄存器BX,基址指針,基址指針BP或一個(gè)變址寄存器(或一個(gè)變址寄存器(SI或或DI)中。寄存器間接尋址要)中。寄存器間接尋址要用方括號(hào)括起來(lái),以便與寄存器操作數(shù)相區(qū)別。用方括號(hào)括起來(lái),以便與寄存器操作數(shù)相區(qū)別。例:例: MOV AX,BX;將由;將由BX決定的存儲(chǔ)單元的內(nèi)決定的存儲(chǔ)單元的內(nèi)容送到容送到AX寄存器。寄存器。0000000100020003BBAA

8、TAB:AXAH AL AA BB間接尋址間接尋址數(shù)據(jù)段數(shù)據(jù)段0001BX操作數(shù)在存儲(chǔ)器中,指令中寄存器內(nèi)容作為操作數(shù)所在操作數(shù)在存儲(chǔ)器中,指令中寄存器內(nèi)容作為操作數(shù)所在單元的有效地址。單元的有效地址。 (BX) (SI) (DI) (BP)有效地址有效地址 = 段寄存器為段寄存器為DS段寄存器為段寄存器為SS物理地址計(jì)算方法:物理地址計(jì)算方法:物理地址物理地址 = (DS)* 16 + (BX)或()或(SI)或()或(DI)物理地址物理地址 = (SS)* 16 + (BP)例:已知:(例:已知:(DS)=2100H,(,(DI)=2000H 指令:指令: MOV AX,DI ;(;(AX

9、) (DI) 物理地址物理地址=(DS) * 16 + (DI) =2100H * 16 + 2000H =21000H + 2000H =23000H 指令結(jié)果:將指令結(jié)果:將23000H單元內(nèi)容送單元內(nèi)容送AL中,中, 將將23001H單元內(nèi)容送單元內(nèi)容送AH中。中。3、寄存器相對(duì)尋址方式、寄存器相對(duì)尋址方式操作數(shù)在存儲(chǔ)器內(nèi),指令中寄存器內(nèi)容與指令指定的位操作數(shù)在存儲(chǔ)器內(nèi),指令中寄存器內(nèi)容與指令指定的位移量(移量(DISP)之和作為操作數(shù)所在單元的有效地址。)之和作為操作數(shù)所在單元的有效地址。 (BX) DISP8 (SI) (DI) (BP) DISP16有效地址有效地址 = 段寄存器為

10、段寄存器為DS段寄存器為段寄存器為SS+物理地址物理地址 = (DS)* 16 +(BX)+DISP8(SI)、()、(DI)、)、DISP16類同。類同。物理地址物理地址= (SS) *16 + (BP)+DISP16例:例: 如果如果 (DS)=3000H, (SI)= 2000H, COUNT=3000H, 則執(zhí)行指令則執(zhí)行指令 MOV AX,CONUTSI,求出此種尋址方,求出此種尋址方式對(duì)應(yīng)的有效地址和物理地址。式對(duì)應(yīng)的有效地址和物理地址。有效地址有效地址= 2000H + 3000H = 5000H物理地址物理地址=(DS)*16 + 5000H =30000H + 5000H =

11、35000H4、基址變址尋址方式:、基址變址尋址方式:操作數(shù)在存儲(chǔ)器中,指令將基址寄存器(操作數(shù)在存儲(chǔ)器中,指令將基址寄存器(BX或或BP)與變址寄存器(與變址寄存器(SI或或DI)內(nèi)容之和作為操作數(shù)所在存)內(nèi)容之和作為操作數(shù)所在存儲(chǔ)單元的有效地址。儲(chǔ)單元的有效地址。 (BX) (SI) (BP) (DI)有效地址有效地址 =+物理地址物理地址 = (DS) * 16 + (BX)+ (SI)或()或(DI)物理地址物理地址 = (SS) * 16 + (BP) + (SI)或()或(DI)例:例: MOV AX,BX+DI 或或 MOV AX,BXDI DS:(BX)+(DI) 字存儲(chǔ)單元內(nèi)

12、容送字存儲(chǔ)單元內(nèi)容送AX。例:例: MOV AX,BP+SI 或或 MOV AX,BPSI SS:(BP)+(SI) 字存儲(chǔ)單元內(nèi)容送字存儲(chǔ)單元內(nèi)容送AX。 例:如果例:如果 (DS)=2100H, (BX)= 0158H, (DI)=10A5H, EA=11FDH, 則執(zhí)行指令則執(zhí)行指令 MOV AL,BXDI有效地址:有效地址:EA=(BX)+(DI)=0158H+10A5H=11FDH 物理地址:(物理地址:(DS) * 16 + 有效地址有效地址=21000H+11FDH=221FDH執(zhí)行結(jié)果:將執(zhí)行結(jié)果:將221FDH單元內(nèi)容送入寄存器單元內(nèi)容送入寄存器AL中。中。5、相對(duì)基址變址尋

13、址方式、相對(duì)基址變址尋址方式操作數(shù)在存儲(chǔ)器內(nèi),指令將基址寄存器(操作數(shù)在存儲(chǔ)器內(nèi),指令將基址寄存器(BX或或BP)與)與變址寄存器(變址寄存器(SI或或DI)的內(nèi)容之和再加上位移量()的內(nèi)容之和再加上位移量(8位位或或16位),得到操作數(shù)所在單元的有效地址。位),得到操作數(shù)所在單元的有效地址。 (BX) (SI) DISP8 (BP) (DI) DISP16有效地址有效地址=+物理地址物理地址 = (DS)* 16 +(BX)產(chǎn)生的有效地址)產(chǎn)生的有效地址物理地址物理地址 = (SS)* 16 +(BP)產(chǎn)生的有效地址)產(chǎn)生的有效地址例:已知:(例:已知:(DS)=3000H,(,(BX)=2

14、000H,(,(SI)=1000H,MK=0250H 指令:指令: MOV AX,MKBXSI 或或 MOV AX,MKBX+SI 或或 MOV AX,MK+BX+SI 有效地址:有效地址:MK+(BX)+(SI)=0250H+2000H+0100H =3250H 物理地址:(物理地址:(DS)*16 +有效地址有效地址=30000H+3250H=33250H 執(zhí)行結(jié)果:將執(zhí)行結(jié)果:將33250H單元內(nèi)容送單元內(nèi)容送AL,33251H內(nèi)容送內(nèi)容送AH。 3、1、4 段超越段超越當(dāng)操作數(shù)在內(nèi)存單元時(shí),系統(tǒng)根據(jù)隱含約定,自動(dòng)將當(dāng)操作數(shù)在內(nèi)存單元時(shí),系統(tǒng)根據(jù)隱含約定,自動(dòng)將寄存器寄存器DS或或SS的

15、值作為段地址。然而,當(dāng)操作數(shù)段的值作為段地址。然而,當(dāng)操作數(shù)段地址不在隱含的段寄存器時(shí),可以使用段超越前綴取地址不在隱含的段寄存器時(shí),可以使用段超越前綴取代其隱含約定。代其隱含約定。 段超越前綴形式為:段超越前綴形式為: 段寄存器名:段寄存器名:例如:例如:MOV AX,ES:BP ;段地址在;段地址在ESMOV AX,CS:BX SI ;段地址在;段地址在CS段地址的基本約定和允許超越的情況如表所示:段地址的基本約定和允許超越的情況如表所示:存儲(chǔ)器存取方式 約定段 允許超越段偏移地址取指令堆棧操作源串目的串BP作基址通用數(shù)據(jù)讀寫(xiě)CSSSDSESSSDS無(wú)無(wú)CS,ES,SS無(wú)CS,DS,ESC

16、S,ES,SSIPSPSIDI有效地址EA有效地址EA3、1、5 對(duì)對(duì)8086內(nèi)存尋址方式的注解內(nèi)存尋址方式的注解(1)在匯編后,指令中的變量名有具體的偏移地址)在匯編后,指令中的變量名有具體的偏移地址所取代。所取代。 (2)在寄存器相對(duì)尋址與相對(duì)基址變址方式中,位移)在寄存器相對(duì)尋址與相對(duì)基址變址方式中,位移量量disp可以是符號(hào)常量或變量,匯編后為一個(gè)常數(shù),若可以是符號(hào)常量或變量,匯編后為一個(gè)常數(shù),若是變量,則取其偏移地址。是變量,則取其偏移地址。(3)在)在Microsoft宏匯編宏匯編MASM(Microsoft Macro Assembler)中,內(nèi)存操作數(shù)可以采用多種書(shū)寫(xiě)形式。)中

17、,內(nèi)存操作數(shù)可以采用多種書(shū)寫(xiě)形式。(4)操作數(shù)中使用變量的地方也可以用下列形式:)操作數(shù)中使用變量的地方也可以用下列形式:變量名變量名整數(shù)表達(dá)式。整數(shù)表達(dá)式。5)計(jì)算出的有效地址以)計(jì)算出的有效地址以16位表示,若超過(guò)位表示,若超過(guò)0FFFFH,CPU將忽略所有溢出。將忽略所有溢出。 (6)記憶)記憶8086內(nèi)存操作數(shù)形式的簡(jiǎn)易方法如下:內(nèi)存操作數(shù)形式的簡(jiǎn)易方法如下: BX SI disp BP DI每列選擇每列選擇0項(xiàng)或一項(xiàng),構(gòu)成至少一項(xiàng),即可得到有效的項(xiàng)或一項(xiàng),構(gòu)成至少一項(xiàng),即可得到有效的內(nèi)存操作數(shù)形式。內(nèi)存操作數(shù)形式。 3、2 指令系統(tǒng)指令系統(tǒng)8086/8088的指令系統(tǒng)可以分為的指令系

18、統(tǒng)可以分為6組:組:(1)數(shù)據(jù)傳送指令;)數(shù)據(jù)傳送指令;(2)算術(shù)運(yùn)算指令;)算術(shù)運(yùn)算指令;(3)邏輯指令與移位指令;)邏輯指令與移位指令;(4)串操作指令;)串操作指令;(5)控制轉(zhuǎn)移指令;)控制轉(zhuǎn)移指令;(6)處理機(jī)控制指令;)處理機(jī)控制指令; 3、2、1 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令是最簡(jiǎn)單、最常用的一類指令,它數(shù)據(jù)傳送指令是最簡(jiǎn)單、最常用的一類指令,它是負(fù)責(zé)把數(shù)據(jù)、地址、或立即數(shù)傳送到寄存器或是負(fù)責(zé)把數(shù)據(jù)、地址、或立即數(shù)傳送到寄存器或存儲(chǔ)單元中存儲(chǔ)單元中 。1MOV(Move):傳送指令):傳送指令MOV指令的格式為:指令的格式為:MOV dest,src ;destsrc功能

19、:將源操作數(shù)功能:將源操作數(shù)src復(fù)制到目的操作數(shù)復(fù)制到目的操作數(shù)dest中,結(jié)果中,結(jié)果目的操作數(shù)的內(nèi)容等于源操作數(shù)的內(nèi)容,源操作數(shù)目的操作數(shù)的內(nèi)容等于源操作數(shù)的內(nèi)容,源操作數(shù)src的內(nèi)容不變。的內(nèi)容不變。對(duì)標(biāo)志位的影響:無(wú)對(duì)標(biāo)志位的影響:無(wú)語(yǔ)法格式:語(yǔ)法格式:MOV reg/mem/seg ,reg/mem/seg/imm說(shuō)明:說(shuō)明:(1)雙操作數(shù)指令不允許兩個(gè)操作數(shù)同時(shí)為段寄存器)雙操作數(shù)指令不允許兩個(gè)操作數(shù)同時(shí)為段寄存器或存儲(chǔ)器操作數(shù)?;虼鎯?chǔ)器操作數(shù)。 MOV seg , seg ;錯(cuò)誤;錯(cuò)誤 MOV mem ,mem ;錯(cuò)誤;錯(cuò)誤 (2)立即數(shù)不能傳送到段寄存器中。)立即數(shù)不能傳送到

20、段寄存器中。 MOV seg ,imm ; 錯(cuò)誤錯(cuò)誤(3)目的操作數(shù)不允許使用)目的操作數(shù)不允許使用CS段寄存器。段寄存器。(4)dest與與src必須類型匹配,即同時(shí)是字節(jié)或字類型。必須類型匹配,即同時(shí)是字節(jié)或字類型。以下幾點(diǎn)要注意:寄存器具有明確的類型,例如,以下幾點(diǎn)要注意:寄存器具有明確的類型,例如,AL、AX分別為字節(jié)、字類型。若立即數(shù)沒(méi)有明確的類型,分別為字節(jié)、字類型。若立即數(shù)沒(méi)有明確的類型,MASM負(fù)責(zé)將立即數(shù)擴(kuò)展為與目的操作數(shù)位數(shù)相同。負(fù)責(zé)將立即數(shù)擴(kuò)展為與目的操作數(shù)位數(shù)相同。有時(shí)有時(shí)MASM不能確定內(nèi)存操作數(shù)的類型,需要用不能確定內(nèi)存操作數(shù)的類型,需要用byteptr和和word

21、ptr明確指出是字節(jié)或字類型。關(guān)于明確指出是字節(jié)或字類型。關(guān)于PTR的詳細(xì)介紹見(jiàn)第的詳細(xì)介紹見(jiàn)第4章。只要其中一個(gè)操作數(shù)的類型確定章。只要其中一個(gè)操作數(shù)的類型確定即可。即可。例:錯(cuò)誤的例:錯(cuò)誤的MOV 指令如下所示:指令如下所示:MOV AX,BL ;類型不匹配;類型不匹配MOV DS,1000H ;不允許立即數(shù)送段寄存器;不允許立即數(shù)送段寄存器MOV BX ,SI ;不允許內(nèi)存操作數(shù)之間傳送;不允許內(nèi)存操作數(shù)之間傳送MOV ES,CS ;不允許段寄存器之間傳送;不允許段寄存器之間傳送MOV CS,AX ;CS不能作為目的操作數(shù)不能作為目的操作數(shù)例:設(shè)例:設(shè)B是已定義的字節(jié)變量,以下是一些錯(cuò)誤

22、和正確是已定義的字節(jié)變量,以下是一些錯(cuò)誤和正確的指令。的指令。MOV AX,B ;錯(cuò)誤,類型不匹配;錯(cuò)誤,類型不匹配MOV A,0 ;正確,;正確,MASM可以判斷出要可以判斷出要送字節(jié)送字節(jié)0XCHG(Exchange):交換指令):交換指令XCHG指令的格式為:指令的格式為:XCHG oprd1 , oprd2 ;交換;交換oprd1與與oprd2的內(nèi)容的內(nèi)容語(yǔ)法格式為:語(yǔ)法格式為:XCHG reg/mem,reg/mem例:例:XCHG BX ,BP+SI如指令執(zhí)行前:(如指令執(zhí)行前:(BX)=6F30H,(,(BP)=0200H,(,(SI)=0046H,(,(SS)=2F00H,(,

23、(2F00H)=4254H,OPR2的物理地址的物理地址=2F00+0200+0046=2F246則指令執(zhí)行后:(則指令執(zhí)行后:(BX)=5154H,(,(2F246H)=6F30H。3、堆棧操作指令、堆棧操作指令堆棧概念堆棧概念 - 存儲(chǔ)器的一段區(qū)域,按存儲(chǔ)器的一段區(qū)域,按“先進(jìn)后出先進(jìn)后出”的原則進(jìn)行存出操作。的原則進(jìn)行存出操作。8086/8088系統(tǒng),堆棧位于堆棧系統(tǒng),堆棧位于堆棧段,其段地址由段,其段地址由SS指示,指示,SP寄存器作為指針,寄存器作為指針,SP內(nèi)容內(nèi)容始終指向棧頂所在存儲(chǔ)單元。始終指向棧頂所在存儲(chǔ)單元。作用:作用:在調(diào)用一個(gè)過(guò)程時(shí),保存返回地址;暫時(shí)存放在調(diào)用一個(gè)過(guò)程

24、時(shí),保存返回地址;暫時(shí)存放寄存器或存儲(chǔ)器單元操作數(shù)的內(nèi)容。寄存器或存儲(chǔ)器單元操作數(shù)的內(nèi)容。指令格式:進(jìn)棧指令格式:進(jìn)棧 PUSH SRC ;操作:(操作:(SP) (SP)-2,(,(SP)+1,(,(SP) (SRC) 出棧出棧 POP DST ;操作:(操作:(DST) (SP)+1,(,(SP),(),(SP) (SP)+2堆棧堆棧SS:01F8SS:01FASS:01FCSS:01FESPAA BB(執(zhí)行(執(zhí)行PUSH AX之前)之前)堆棧堆棧SS:01F8SS:01FASS:01FCSS:01FESPAA BB(執(zhí)行(執(zhí)行PUSH AX之后)之后)1101H1101H AX堆棧堆棧S

25、S:01F8SS:01FASS:01FCSS:01FESPAA BB(執(zhí)行(執(zhí)行POP AX之后)之后)1101H AX1238086/8088系統(tǒng)的堆棧具有如下特點(diǎn):系統(tǒng)的堆棧具有如下特點(diǎn):堆棧是在內(nèi)存的堆棧段中,具有堆棧是在內(nèi)存的堆棧段中,具有“先進(jìn)后出先進(jìn)后出”的特點(diǎn);的特點(diǎn);堆棧只有一個(gè)出入口,即當(dāng)前棧頂為空時(shí),棧頂和棧底堆棧只有一個(gè)出入口,即當(dāng)前棧頂為空時(shí),棧頂和棧底指向同一內(nèi)存單元;指向同一內(nèi)存單元;堆棧有兩個(gè)基本操作:堆棧有兩個(gè)基本操作:PUSH(進(jìn)棧)和(進(jìn)棧)和POP(出棧)。(出棧)。PUSH操作使棧頂向低地址方向移動(dòng),而操作使棧頂向低地址方向移動(dòng),而POP操作則剛操作則剛

26、好相反;好相反;堆棧操作只能作字操作;堆棧操作只能作字操作;SS:SP在任何時(shí)候都指向當(dāng)前的棧頂。在任何時(shí)候都指向當(dāng)前的棧頂。4、地址傳送指令、地址傳送指令將操作數(shù)所在存儲(chǔ)器的地址送入目標(biāo)寄存器。將操作數(shù)所在存儲(chǔ)器的地址送入目標(biāo)寄存器。指令格式:指令格式:有效地址送寄存器:有效地址送寄存器: LEA reg16 , mem ; reg16 mem 指針?biāo)图拇嫫骱椭羔標(biāo)图拇嫫骱虳S:LDS reg16 ,mem32 ;把源操作數(shù)指定的把源操作數(shù)指定的4個(gè)相繼字節(jié)到由指令指定的寄存器個(gè)相繼字節(jié)到由指令指定的寄存器及及DS寄存器中。該指令常指定寄存器中。該指令常指定SI寄存器。寄存器。 指針?biāo)图拇嫫?/p>

27、和指針?biāo)图拇嫫骱虴S:LES reg16 ,mem32 ;把源操作數(shù)指定的把源操作數(shù)指定的4個(gè)相繼字節(jié)送到由指令指定的寄存?zhèn)€相繼字節(jié)送到由指令指定的寄存器及器及ES寄存器中。該指令常指定寄存器中。該指令常指定DI寄存器寄存器 。LEA 指令與指令與MOV 指令的區(qū)別:指令的區(qū)別:LEA SI,BUFF指令是將標(biāo)號(hào)指令是將標(biāo)號(hào)BUFF的偏移地址送入寄存器中;的偏移地址送入寄存器中;MOV SI,BUFF指令是將標(biāo)號(hào)指令是將標(biāo)號(hào)BUFF所指存儲(chǔ)單元的內(nèi)容送所指存儲(chǔ)單元的內(nèi)容送入入SI。BUFF =0123454800FEFFLEA SI,BUFF;執(zhí)行后:(執(zhí)行后:(SI)=0002HMOV SI

28、,BUFF;執(zhí)行后:(執(zhí)行后:(SI)=0048H段起始地址段起始地址B、LDS或或LES指令將源操作數(shù)指定的指令將源操作數(shù)指定的4個(gè)連續(xù)字節(jié)單個(gè)連續(xù)字節(jié)單元內(nèi)容分別送入指令指定的寄存器以及元內(nèi)容分別送入指令指定的寄存器以及DS或或ES中。中。其中:低其中:低16位送到一個(gè)指定的字寄存器,高位送到一個(gè)指定的字寄存器,高16位送到位送到DS或或ES中。中。57H13H68H24H例:(例:(DS)=C000H,(,(C2480H)=1357H,(,(C2482H)=2468HDS:2480HDS:2481HDS:2482HDS:2483H 13 57 24 68 SIDSLDS SI,24804

29、、標(biāo)志寄存器傳送指令、標(biāo)志寄存器傳送指令指令格式:指令格式:LAHF ; (AH) (PSW低字節(jié))低字節(jié))SAHF ; (PSW低字節(jié))低字節(jié)) AHPUSHF; (SP) (SP)-2,(,(SP)+1,(,(SP) (PSW)POPF ; (PSW)()(SP)+1,(,(SP)()(SP)()(SP)+2說(shuō)明:說(shuō)明:LAHF/SAHF指令是寄存器指令是寄存器AH與標(biāo)志寄存器與標(biāo)志寄存器PSW的低字的低字節(jié)之間完成的字節(jié)型數(shù)據(jù)傳送。節(jié)之間完成的字節(jié)型數(shù)據(jù)傳送。 PUSHF/POPF指令是標(biāo)志寄存器指令是標(biāo)志寄存器PSW與堆棧間進(jìn)行的字型與堆棧間進(jìn)行的字型數(shù)據(jù)傳送。數(shù)據(jù)傳送。 指令指令SA

30、HF/POPF將影響標(biāo)志位。將影響標(biāo)志位。3、2、2 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令1、加法指令、加法指令指令格式:指令格式:加法加法 ADD DST,SRC;(;(DST) (SRC)+(DST)帶進(jìn)位加法帶進(jìn)位加法 ADC DST,SRC; (DST) (SRC)+(DST)+CF加加 1 INC OPR ;(;(OPR) (OPR)+1說(shuō)明:這在三條指令運(yùn)算結(jié)果將影響狀態(tài)標(biāo)志位,但是說(shuō)明:這在三條指令運(yùn)算結(jié)果將影響狀態(tài)標(biāo)志位,但是INC指指令不影響標(biāo)志令不影響標(biāo)志CF。2、減法指令、減法指令指令格式:指令格式:減法減法 SUB DST,SRC ;(;(DST) (DST)- (SRC)帶進(jìn)位減

31、法帶進(jìn)位減法 SBB DST,SRC;(;(DST)()(DST)-(SRC)-CF減減 1 DEC OPR ;(;(OPR) (OPR)-1求補(bǔ)求補(bǔ) NEG OPR ;(;(OPR) 0FFFFH-(OPR)+1比較比較 CMP OPR1,OPR2;(;(OPR1)-(OPR2)以上五條指令均可作字或字節(jié)運(yùn)算,而且除以上五條指令均可作字或字節(jié)運(yùn)算,而且除DEC不影不影響響CF外,其他都按一般規(guī)則影響狀態(tài)標(biāo)志位外,其他都按一般規(guī)則影響狀態(tài)標(biāo)志位 。3、乘法指令、乘法指令指令格式:指令格式:無(wú)符號(hào)數(shù)乘法無(wú)符號(hào)數(shù)乘法 MUL SRC ;(;(AX)()(AL)*(SRC)字節(jié)乘法)字節(jié)乘法 ;(;

32、(DX,AX)()(AX)*(SRC)字乘法)字乘法帶符號(hào)數(shù)乘法帶符號(hào)數(shù)乘法 IMUL SRC;操作同上;操作同上進(jìn)行字節(jié)運(yùn)算時(shí),目的操作數(shù)必須是累加器進(jìn)行字節(jié)運(yùn)算時(shí),目的操作數(shù)必須是累加器AL,乘積在寄存器,乘積在寄存器AX中;進(jìn)行字運(yùn)算時(shí),目的操作數(shù)必須是累加器中;進(jìn)行字運(yùn)算時(shí),目的操作數(shù)必須是累加器AX,乘積在寄,乘積在寄存器存器DX,AX中。中。源操作數(shù)不允許使用立即數(shù)。源操作數(shù)不允許使用立即數(shù)。乘法指令運(yùn)算結(jié)果只影響狀態(tài)標(biāo)志乘法指令運(yùn)算結(jié)果只影響狀態(tài)標(biāo)志CF、OF。例:例:MUL BX ;無(wú)符號(hào)數(shù)乘法,;無(wú)符號(hào)數(shù)乘法,BX乘上乘上AX 4、除法指令、除法指令指令格式:指令格式:無(wú)符號(hào)

33、數(shù)除法無(wú)符號(hào)數(shù)除法 DIV SRC ;(;(AL) (AX)/(SRC)除法的商)除法的商 (AH) (AX)/(SRC)除法余數(shù))除法余數(shù) 或者或者 (AX)()(DX,AX)/(SRC)除法的商)除法的商 (DX)()(DX,AX)/(SRC)除法余數(shù))除法余數(shù)帶符號(hào)數(shù)除法帶符號(hào)數(shù)除法 IDIV SRC ;操作同上。;操作同上。當(dāng)除數(shù)是字節(jié)數(shù)據(jù)時(shí),被除數(shù)必須放在當(dāng)除數(shù)是字節(jié)數(shù)據(jù)時(shí),被除數(shù)必須放在AX中;當(dāng)除數(shù)是字?jǐn)?shù)據(jù)中;當(dāng)除數(shù)是字?jǐn)?shù)據(jù)時(shí),被除數(shù)必須放在時(shí),被除數(shù)必須放在DX,AX中。中。除法指令運(yùn)算結(jié)果對(duì)狀態(tài)標(biāo)志無(wú)定義。除法指令運(yùn)算結(jié)果對(duì)狀態(tài)標(biāo)志無(wú)定義。8086/8088規(guī)定規(guī)定IDIV指

34、令運(yùn)算結(jié)果余數(shù)的符號(hào)與被除數(shù)相同。指令運(yùn)算結(jié)果余數(shù)的符號(hào)與被除數(shù)相同。帶符號(hào)數(shù)除法運(yùn)算中,當(dāng)被除數(shù)位數(shù)不夠時(shí),可進(jìn)行擴(kuò)展。帶符號(hào)數(shù)除法運(yùn)算中,當(dāng)被除數(shù)位數(shù)不夠時(shí),可進(jìn)行擴(kuò)展。符號(hào)擴(kuò)展指令:符號(hào)擴(kuò)展指令:字節(jié)擴(kuò)展到字字節(jié)擴(kuò)展到字 CBW;將寄存器;將寄存器AL中的符號(hào)位擴(kuò)展到寄存器中的符號(hào)位擴(kuò)展到寄存器AH字?jǐn)U展到雙字字?jǐn)U展到雙字 CWD;將寄存器;將寄存器AX中的符號(hào)位擴(kuò)展到寄存器中的符號(hào)位擴(kuò)展到寄存器DX70AL70AH015AXDX150CBWCWD5、壓縮、壓縮BCD碼十進(jìn)制調(diào)整指令碼十進(jìn)制調(diào)整指令加法十進(jìn)制調(diào)整加法十進(jìn)制調(diào)整 DAA;執(zhí)行的操作:這條指令執(zhí)行前必須先執(zhí)行執(zhí)行的操作:這條

35、指令執(zhí)行前必須先執(zhí)行ADD或或ADC指令,加法指令必須把兩個(gè)壓縮的指令,加法指令必須把兩個(gè)壓縮的BCD碼相加,并把結(jié)碼相加,并把結(jié)果存放在果存放在AL寄存器中。寄存器中。 減法十進(jìn)制調(diào)整減法十進(jìn)制調(diào)整 DAS;執(zhí)行的操作:這條指令執(zhí)行之前,必須先執(zhí)行執(zhí)行的操作:這條指令執(zhí)行之前,必須先執(zhí)行SUB或或SBB指令,減法指令必須把兩個(gè)指令,減法指令必須把兩個(gè)BCD碼相減,并把結(jié)果碼相減,并把結(jié)果存放在存放在AL寄存器中。寄存器中。 調(diào)整的方法:調(diào)整的方法:累加器累加器AL低低4位大于位大于9或輔助進(jìn)位標(biāo)志位或輔助進(jìn)位標(biāo)志位AF=1,則累加器,則累加器AL加加06H修正。修正。累加器累加器AL高高4位

36、大于位大于9或輔助進(jìn)位標(biāo)志位或輔助進(jìn)位標(biāo)志位AF=1,則累加器,則累加器AL加加60H修正。修正。累加器累加器AL高高4位大于等于位大于等于9,低,低4位大于位大于9,則累加器,則累加器AL進(jìn)行加進(jìn)行加66H修正。修正。例:進(jìn)行例:進(jìn)行BCD碼加法運(yùn)算碼加法運(yùn)算59+68=127 0101 1001 59 + 0110 1000 68 1100 0001 C1 + 0110 0110 66 10010 0111 127 加法運(yùn)算結(jié)果為加法運(yùn)算結(jié)果為C1,AF=1,高位大于,高位大于9加加66H進(jìn)行壓縮進(jìn)行壓縮BCD調(diào)整調(diào)整說(shuō)明:說(shuō)明:壓縮壓縮BCD碼加法或減法十進(jìn)制調(diào)整指令必須在碼加法或減法十

37、進(jìn)制調(diào)整指令必須在ADD(ADC)或或SUB(SBB)指令之后,調(diào)整結(jié)果對(duì)標(biāo)志)指令之后,調(diào)整結(jié)果對(duì)標(biāo)志OF無(wú)影響,對(duì)其它無(wú)影響,對(duì)其它狀態(tài)標(biāo)志位均有影響。狀態(tài)標(biāo)志位均有影響。減法十進(jìn)制調(diào)整方法與加法十進(jìn)制調(diào)整方法類同,只是將加減法十進(jìn)制調(diào)整方法與加法十進(jìn)制調(diào)整方法類同,只是將加6變?yōu)闇p變?yōu)闇p6操作。操作。6、非壓縮、非壓縮BCD碼十進(jìn)制調(diào)整指令碼十進(jìn)制調(diào)整指令指令格式:指令格式:加法十進(jìn)制調(diào)整加法十進(jìn)制調(diào)整 AAA ;減法十進(jìn)制調(diào)整減法十進(jìn)制調(diào)整 AAS ;乘法十進(jìn)制調(diào)整乘法十進(jìn)制調(diào)整 AAM ;除法十進(jìn)制調(diào)整除法十進(jìn)制調(diào)整 AAD ;AAA指令將指令將AL的內(nèi)容變換成一位非壓縮的十進(jìn)制數(shù)。

38、的內(nèi)容變換成一位非壓縮的十進(jìn)制數(shù)。AAA檢檢查查AL低四位,如低四位是低四位,如低四位是0-9的數(shù)字,的數(shù)字,AAA就清除就清除AL的高四的高四位,以及位,以及AF和和CF標(biāo)志;如標(biāo)志;如AL低四位表示的數(shù)大于低四位表示的數(shù)大于9或或AF=1,AAA執(zhí)行:執(zhí)行:加加6到到AL寄存器;寄存器;加加1到到AH寄存器;寄存器;置置AF=1,CF=1;清除清除AL高四位為高四位為0。例:例:ADD AL,BL;AL和和BL中的數(shù)相加中的數(shù)相加 AAA ;非壓縮;非壓縮BCD碼調(diào)整碼調(diào)整AAS指令檢查指令檢查AL低四位,如低四位表示的數(shù)是低四位,如低四位表示的數(shù)是0-9的數(shù)字,的數(shù)字,ASS清除清除AL

39、高四位及高四位及CF和和AF標(biāo)志;如標(biāo)志;如AL低四位表示的數(shù)大于低四位表示的數(shù)大于9或或AF=1,AAS進(jìn)行如下調(diào)整:進(jìn)行如下調(diào)整:AL減去減去6;AH減去減去1;置置AF=1,CF=1;清除清除AL中高四位。中高四位。例:例:SUB AL,BL; AASAAM指令的作用是用指令的作用是用10(0AH)來(lái)除)來(lái)除AL寄存器的內(nèi)容,并將寄存器的內(nèi)容,并將除得的商和余數(shù)分別送到除得的商和余數(shù)分別送到AH和和AL來(lái)實(shí)現(xiàn)轉(zhuǎn)換。來(lái)實(shí)現(xiàn)轉(zhuǎn)換。例:例: MUL BL ;AL * BL AAM3、2、3 邏輯指令與移位指令邏輯指令與移位指令1、邏輯運(yùn)算指令:對(duì)字節(jié)或字?jǐn)?shù)據(jù)進(jìn)行按位的操作。、邏輯運(yùn)算指令:對(duì)字

40、節(jié)或字?jǐn)?shù)據(jù)進(jìn)行按位的操作。格式:格式:邏輯與邏輯與 AND DST,SRC; (DST)()(DST)AND(SRC)邏輯或邏輯或 OR DST,SRC; (DST)()(DST)OR(SRC)邏輯非邏輯非 NOT OPR ; (OPR)()(OPR)異或異或 XOR DST,SRC; (DST)()(DST)XOR(SRC)測(cè)試測(cè)試 TEST OPR1,OPR2;(;(OPR1)AND(OPR2)(1)、邏輯與()、邏輯與(AND)、或()、或(OR)、異或()、異或(XOR)操作指令)操作指令A(yù)ND指令主要用來(lái)屏蔽掉一個(gè)數(shù)中某些位,以便對(duì)剩下的其它位指令主要用來(lái)屏蔽掉一個(gè)數(shù)中某些位,以便對(duì)

41、剩下的其它位進(jìn)行某些處理。對(duì)那此兩個(gè)操作數(shù)都是進(jìn)行某些處理。對(duì)那此兩個(gè)操作數(shù)都是1的位,目的操作數(shù)相對(duì)應(yīng)的位,目的操作數(shù)相對(duì)應(yīng)位就是位就是1,其它各種組合的位,目的操作數(shù)相應(yīng)位都是,其它各種組合的位,目的操作數(shù)相應(yīng)位都是0。例:例:AND AX,BX ;兩個(gè)寄存器邏輯與;兩個(gè)寄存器邏輯與 AND AL,MEM-BYTE;寄存器和存儲(chǔ)單元邏輯與;寄存器和存儲(chǔ)單元邏輯與 AND MEM-BYTE,AL;存儲(chǔ)單元和寄存器邏輯與;存儲(chǔ)單元和寄存器邏輯與OR指令在兩個(gè)操作數(shù)相對(duì)應(yīng)位中有一個(gè)是指令在兩個(gè)操作數(shù)相對(duì)應(yīng)位中有一個(gè)是1或兩個(gè)都是或兩個(gè)都是1時(shí),時(shí),在目的操作數(shù)的該位產(chǎn)生一個(gè)在目的操作數(shù)的該位產(chǎn)生

42、一個(gè)1。例:例:OR BX,0C000B將將BX的兩位最高的有效位(的兩位最高的有效位(15和和14位)置成位)置成1,而其它位不變。,而其它位不變。XOR指令主要用于判斷兩個(gè)操作數(shù)中那些位是不同的。如兩指令主要用于判斷兩個(gè)操作數(shù)中那些位是不同的。如兩個(gè)操作數(shù)相對(duì)應(yīng)位的值不同時(shí),在目的操作數(shù)產(chǎn)生一個(gè)個(gè)操作數(shù)相對(duì)應(yīng)位的值不同時(shí),在目的操作數(shù)產(chǎn)生一個(gè)1。相。相同為同為0,不同為,不同為1。例:例:XOR BX,0C000B;NOT指令改變寄存器或存儲(chǔ)單元的每一位狀態(tài),原來(lái)為指令改變寄存器或存儲(chǔ)單元的每一位狀態(tài),原來(lái)為0變?yōu)樽優(yōu)?,原為,原為1變?yōu)樽優(yōu)?。例:例: NOT AX ;AX各位取反各位取

43、反TEST指令是一條測(cè)試指令,它執(zhí)行的操作與指令是一條測(cè)試指令,它執(zhí)行的操作與AND相同,不過(guò)相同,不過(guò)它不送回結(jié)果,只影響標(biāo)志位。它不送回結(jié)果,只影響標(biāo)志位。例:例:TEST AL,0000 0001B;如;如AL最低位為最低位為0,則,則ZF=1。2、移位指令、移位指令邏輯左移邏輯左移 SHL OPR,CNL算術(shù)左移算術(shù)左移 SAL OPR,CNL邏輯右移邏輯右移 SHR OPR,CNL算術(shù)右移算術(shù)右移 SAR OPR,CNT其中:其中:OPR為操作數(shù),為操作數(shù),CNT為為1或或CL表示移位次數(shù)表示移位次數(shù)0CFOPR0CFOPRCFOPR例:設(shè)例:設(shè)AL=1011 0100,CF=1在在

44、SAL AL,1之后,之后,AL= 0110 1000 CF=1在在SAR AL,1之后,之后,AL=1101 1010 CF=0在在SHL AL,1之后,之后,AL=0110 1000 CF=1在在SHR AL,1之后,之后,AL=0101 1010 CF=0 算術(shù)左移(算術(shù)左移(SAL)和算術(shù)右移()和算術(shù)右移(SAR)實(shí)現(xiàn)帶符號(hào)數(shù)移位。)實(shí)現(xiàn)帶符號(hào)數(shù)移位。SAR通過(guò)在整個(gè)移位過(guò)程中復(fù)制符號(hào)來(lái)保護(hù)操作數(shù)的符號(hào)。通過(guò)在整個(gè)移位過(guò)程中復(fù)制符號(hào)來(lái)保護(hù)操作數(shù)的符號(hào)。SAL不保護(hù)進(jìn)位,但如果符號(hào)位發(fā)生變化的話,就將不保護(hù)進(jìn)位,但如果符號(hào)位發(fā)生變化的話,就將1送送OF標(biāo)標(biāo)志。每次移位,志。每次移位,S

45、AL都將操作數(shù)空出來(lái)的第都將操作數(shù)空出來(lái)的第0位置位置0。邏輯左移(邏輯左移(SHL)和邏輯右移()和邏輯右移(SHR)對(duì)無(wú)符號(hào)數(shù)的移位。)對(duì)無(wú)符號(hào)數(shù)的移位。SHL將操作數(shù)左移,空出來(lái)的第將操作數(shù)左移,空出來(lái)的第0位置位置0;SHR將操作數(shù)右移,空出來(lái)的高位(字節(jié)時(shí)第將操作數(shù)右移,空出來(lái)的高位(字節(jié)時(shí)第7位,字時(shí)第位,字時(shí)第15位)置位)置0。例:將兩個(gè)非壓縮例:將兩個(gè)非壓縮BCD碼(高位在碼(高位在BL,低位在,低位在AL)合并成壓)合并成壓縮縮BCD碼送碼送AL。 MOV CL,4 ;將計(jì)數(shù)值送;將計(jì)數(shù)值送CL SHL BL,CL ;將高位移到;將高位移到BL的高的高4位位 AND AL,

46、0FH;清零;清零AL高高4位位 OR AL,BL ;合并;合并AL和和BL形成壓縮形成壓縮BCD碼。碼。(2)、循環(huán)移位指令)、循環(huán)移位指令循環(huán)左移循環(huán)左移 ROL OPR,CNT循環(huán)右移循環(huán)右移 ROR OPR,CNT帶進(jìn)位循環(huán)左移帶進(jìn)位循環(huán)左移 RCL OPR,CNT帶進(jìn)位循環(huán)右移帶進(jìn)位循環(huán)右移 RCR OPR,CNT CFOPRCFOPRCFOPRCFOPR例:設(shè)例:設(shè)AL=1011 0100B,CF=1執(zhí)行下列語(yǔ)句:執(zhí)行下列語(yǔ)句:執(zhí)行執(zhí)行ROL AL,1 后,后,AL=0110 1001,CF=1執(zhí)行執(zhí)行ROR AL,1后,后,AL=0101 1010,CF=0執(zhí)行執(zhí)行RCL AL,

47、1后,后,AL=0110 1001,CF=1執(zhí)行執(zhí)行RCR AL,1后,后,AL=1101 1010,CF=03、2、4 串操作指令串操作指令串操作:對(duì)存儲(chǔ)區(qū)中連續(xù)存放的字節(jié)或一串字進(jìn)行操作。串操作:對(duì)存儲(chǔ)區(qū)中連續(xù)存放的字節(jié)或一串字進(jìn)行操作。與與REP前綴相配合工作的指令前綴相配合工作的指令MOVS、LODS、和、和STOS指令指令 (1)REP重復(fù)串操作直到(重復(fù)串操作直到(CX)=0為止。為止。格式:格式:REP STRING PRIMITIVE其中其中STRING PRIMITIVE可為可為MOVS,LODS或或STOS指令。指令。 如(如(CX)=0則退出則退出REP,否則繼續(xù)執(zhí)行;,

48、否則繼續(xù)執(zhí)行;(CX)(CX)1; 執(zhí)行其后的串指令;執(zhí)行其后的串指令; 重復(fù)重復(fù)。(2)MOVS串傳送指令串傳送指令格式:格式:MOVS DST,SRC ;MOVSB(字節(jié));(字節(jié)); MOVSW(字)(字) (3)STOS存入串指令存入串指令STOS指令的格式為:指令的格式為:STOS DST ; STOSB(字(字節(jié));節(jié));STOSW(字)。(字)。執(zhí)行的操作:字節(jié)操作:(執(zhí)行的操作:字節(jié)操作:(DI)(AL),(),(DI)(DI)1字操作:字操作: (DI)(AX),(),(DI)(DI)2(4)LODS 從串中取指令從串中取指令LODS指令的格式為:指令的格式為:LODS SR

49、C ; LODSB(字(字節(jié));節(jié));LODSW(字)。(字)。執(zhí)行的操作:字節(jié)操作:(執(zhí)行的操作:字節(jié)操作:(AL)(SI),(),(SI)(SI)1字操作:字操作: (AX)(SI),(),(SI)(SI)22與REPE/REPZ和REPNE/REPNZ聯(lián)合工作的CMPS和SCAS指令(1)REPE/REPZ當(dāng)相等當(dāng)相等/為零時(shí)重復(fù)串操作為零時(shí)重復(fù)串操作REPE/REPZ指令的格式為:指令的格式為:REPE/REPZ string primitive其中其中string primitive可為可為CMPS或或SCAS指令。指令。執(zhí)行的操作:執(zhí)行的操作:如(如(CX)=0或或ZF=0(即某次

50、比較的(即某次比較的結(jié)果兩個(gè)操作數(shù)不等)時(shí)退出,否則繼續(xù)執(zhí)行;結(jié)果兩個(gè)操作數(shù)不等)時(shí)退出,否則繼續(xù)執(zhí)行;(CX)(CX)1;執(zhí)行其后的串指令;執(zhí)行其后的串指令;重復(fù)重復(fù)。 (2)REPNE/REPNZ當(dāng)不相等當(dāng)不相等/不為零重復(fù)串操作不為零重復(fù)串操作REPNE/REPNZ指令的格式為:指令的格式為:REPNE/REPNZ string primitive其中其中string primitive可為可為CMPS或或SCAS指令。指令。執(zhí)行的操作:除退出條件為(執(zhí)行的操作:除退出條件為(CX)=0或或ZF=1外,其外,其他操作與他操作與REPE指令完全相同。指令完全相同。 (3)、串比較指令)、串

51、比較指令CMPSB ;(;(SI)-(DI) (SI)()(SI)1,(,(DI)()(DI)1CMPSW ;(;(SI)-(DI) (SI)()(SI)2,(,(DI)()(DI)2(4)SCAS串掃描指令串掃描指令SCAS指令的格式為:指令的格式為:SCAS DST; SCASB(字(字節(jié));節(jié));SCASW(字)。(字)。執(zhí)行的操作:字節(jié)操作:(執(zhí)行的操作:字節(jié)操作:(AL)(DI),),(DI)(DI)1字操作:字操作: (AX)(DI),(),(DI)(DI)23、2、5 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令分成控制轉(zhuǎn)移指令分成無(wú)條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令和和條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令

52、。1無(wú)條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令轉(zhuǎn)移可以分成兩類:轉(zhuǎn)移可以分成兩類:段內(nèi)轉(zhuǎn)移段內(nèi)轉(zhuǎn)移和和段間轉(zhuǎn)移段間轉(zhuǎn)移。段內(nèi)轉(zhuǎn)移段內(nèi)轉(zhuǎn)移是指在同一段的范圍之內(nèi)進(jìn)行轉(zhuǎn)移,此時(shí)只需是指在同一段的范圍之內(nèi)進(jìn)行轉(zhuǎn)移,此時(shí)只需改變改變IP寄存器的內(nèi)容,即用新的轉(zhuǎn)移目標(biāo)地址代替原有寄存器的內(nèi)容,即用新的轉(zhuǎn)移目標(biāo)地址代替原有的的IP的值就可達(dá)到轉(zhuǎn)移的目的。的值就可達(dá)到轉(zhuǎn)移的目的。 段間轉(zhuǎn)移段間轉(zhuǎn)移則是要轉(zhuǎn)到另一個(gè)段去執(zhí)行程序,此時(shí)不僅要?jiǎng)t是要轉(zhuǎn)到另一個(gè)段去執(zhí)行程序,此時(shí)不僅要修改修改IP寄存器的內(nèi)容,還需要修改寄存器的內(nèi)容,還需要修改CS寄存器的內(nèi)容才寄存器的內(nèi)容才能達(dá)到目的,因此此時(shí)的轉(zhuǎn)移目標(biāo)地址應(yīng)由新的段地址能達(dá)到目

53、的,因此此時(shí)的轉(zhuǎn)移目標(biāo)地址應(yīng)由新的段地址和偏移地址兩部分組成和偏移地址兩部分組成 。(1)直接短轉(zhuǎn)移)直接短轉(zhuǎn)移 JMP SHORT OPR ;操作:(操作:(IP) (IP)+8位位移量位位移量(2)段內(nèi)直接轉(zhuǎn)移)段內(nèi)直接轉(zhuǎn)移 JMP NEAR PTR OPR;操作:(操作:(IP) (IP)+16位位移量位位移量(3)段內(nèi)間接轉(zhuǎn)移)段內(nèi)間接轉(zhuǎn)移 JMP WORD PTR OPR;操作:(操作:(IP) (有效地址)(有效地址)(4)段間直接(遠(yuǎn))轉(zhuǎn)移)段間直接(遠(yuǎn))轉(zhuǎn)移 JMP NEAR PTR OPR操作:(操作:(IP)OPR的段內(nèi)偏移地址的段內(nèi)偏移地址 (CS)OPR所在段的段地址所

54、在段的段地址(5)段間間接轉(zhuǎn)移)段間間接轉(zhuǎn)移 JMP DWORD PTR OPR操作:(操作:(IP)(EA) (CS)(EA+2)2、條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令狀態(tài)標(biāo)志作為轉(zhuǎn)移的條件,當(dāng)滿足一定的條件時(shí),轉(zhuǎn)移到指定狀態(tài)標(biāo)志作為轉(zhuǎn)移的條件,當(dāng)滿足一定的條件時(shí),轉(zhuǎn)移到指定的地址,否則,將順序執(zhí)行下條指令。的地址,否則,將順序執(zhí)行下條指令。作為判斷條件的狀態(tài)標(biāo)志位有:作為判斷條件的狀態(tài)標(biāo)志位有:CF、PF、ZF、SF和和OF。根據(jù)單個(gè)標(biāo)志位的設(shè)置情況轉(zhuǎn)移這組包括10種指令,它們一般適用于測(cè)試某一次運(yùn)算的結(jié)果并根據(jù)其不同特征產(chǎn)生程序分支作不同處理的情況。結(jié)果為零(或相等)轉(zhuǎn)移結(jié)果為零(或相等)轉(zhuǎn)移

55、JZ/JE OPR ; ZF=1 結(jié)果不為零(或不相等)轉(zhuǎn)移結(jié)果不為零(或不相等)轉(zhuǎn)移 JNZ/JNE OPR; ZF=0 結(jié)果為負(fù)轉(zhuǎn)移結(jié)果為負(fù)轉(zhuǎn)移 JS OPR ; SF=1 結(jié)果為正轉(zhuǎn)移結(jié)果為正轉(zhuǎn)移 JNS OPR ;SF=0溢出轉(zhuǎn)移溢出轉(zhuǎn)移 JO OPR ;OF=1無(wú)溢出轉(zhuǎn)移無(wú)溢出轉(zhuǎn)移 JNO OPR ;OF=0奇偶位為奇偶位為1轉(zhuǎn)移轉(zhuǎn)移 JP/PE OPR ;PF=1奇偶位為奇偶位為0轉(zhuǎn)移轉(zhuǎn)移 JNP/JPO OPR;PF=0低于低于/不高于或等于不高于或等于/進(jìn)位為進(jìn)位為1轉(zhuǎn)移轉(zhuǎn)移 JB/JNAE/JC OPR;CF=1不低于不低于/高于或等于高于或等于/進(jìn)位為進(jìn)位為0轉(zhuǎn)移轉(zhuǎn)移 JN

56、B/JAE/JNC OPR;CF=0(2)比較兩個(gè)無(wú)符號(hào)數(shù),并根據(jù)比較的結(jié)果轉(zhuǎn)移。低于低于/不高于或不等于不高于或不等于/進(jìn)位為進(jìn)位為1轉(zhuǎn)移轉(zhuǎn)移 JB/JNAE/JC OPR; CF=1且且ZF=0不低于不低于/高于或等于高于或等于/進(jìn)位為進(jìn)位為0轉(zhuǎn)移轉(zhuǎn)移 JNB/JAE/JNC OPR; CF=0或或ZF=1低于或等于低于或等于/不高于轉(zhuǎn)移不高于轉(zhuǎn)移 JBE/JNA OPR; CF=1或或CF=1不低于或不等于不低于或不等于/高于轉(zhuǎn)移高于轉(zhuǎn)移 JNBE/JA OPR; CF=0且且ZF=0(3)比較兩個(gè)帶符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移。)比較兩個(gè)帶符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移。小于或者不大于或者等

57、于轉(zhuǎn)移小于或者不大于或者等于轉(zhuǎn)移 JL(或(或JNGE) OPR SF ZF=1小于或者不大于或者等于轉(zhuǎn)移小于或者不大于或者等于轉(zhuǎn)移 JNL(或(或JGE) OPR SF ZF=0 小于或等于,或者不大于轉(zhuǎn)移小于或等于,或者不大于轉(zhuǎn)移 JLE(或(或JNG) OPR (SF ZF)ZF=1小于或等于,或者不大于轉(zhuǎn)移小于或等于,或者不大于轉(zhuǎn)移 JNLE(或(或JG) OPR (SF ZF)ZF=0 (4)測(cè)試)測(cè)試CX的值為的值為0則轉(zhuǎn)移指令則轉(zhuǎn)移指令 JCXZ OPR; (CX)=0則轉(zhuǎn)移則轉(zhuǎn)移 3、循環(huán)控制指令、循環(huán)控制指令(1)LOOP(LOOP)循環(huán)指令)循環(huán)指令 格式:格式:LOOP

58、OPR 測(cè)試條件:(測(cè)試條件:(CX)0(2)LOOPZ/LOOPE(Loop while zero or equal) 當(dāng)為零或相等時(shí)循環(huán)指令當(dāng)為零或相等時(shí)循環(huán)指令 格式:格式:LOOPZ(或(或LOOPE) OPR 測(cè)試條件:測(cè)試條件:ZF=1且(且(CX)0(3)LOOPNZ/LOOPNE(Loop while nonzero, or not equal)當(dāng)不為零或不相等時(shí)循環(huán)指令)當(dāng)不為零或不相等時(shí)循環(huán)指令 格式:格式:LOOPNZ(或(或LOOPNE) OPR 測(cè)試條件:測(cè)試條件:ZF=0且(且(CX)0 4、子程序、子程序CALL調(diào)用指令(1)段內(nèi)直接調(diào)用)段內(nèi)直接調(diào)用 格式:格式

59、: CALL DST 執(zhí)行的操作:(執(zhí)行的操作:(IP)(SP)2; (SP)1,(,(SP)(IP);); (IP)(IP)D16;()段內(nèi)間接調(diào)用()段內(nèi)間接調(diào)用 格式:格式: CALL DST 執(zhí)行的操作:(執(zhí)行的操作:(SP)(SP)2; (SP)1,(,(SP)(IP); (IP)(EA)()段間直接調(diào)用()段間直接調(diào)用 格式:格式: CALL DST執(zhí)行的操作:(執(zhí)行的操作:(SP)(SP)2; (SP)1,(,(SP)(CS);); (SP)(SP)2; (SP)1,(,(SP)(IP);); (IP)偏移地址(指令的第偏移地址(指令的第2,3個(gè)字節(jié));個(gè)字節(jié)); (CS)段地址

60、(指令的第段地址(指令的第4,5個(gè)字節(jié))。個(gè)字節(jié))。(4)段間間接調(diào)用)段間間接調(diào)用 格式:格式: CALL DST 執(zhí)行的操作:(執(zhí)行的操作:(SP)(SP)2; (SP)1,(,(SP)(CS);); (SP)(SP)2; (SP)1,(,(SP)(IP);); (IP)(EA);); (CS)(EA2) RET返回指令返回指令段內(nèi)返回段內(nèi)返回 RET ;(;(IP) (SP)+1,(,(SP) (SP)()(SP)+2段內(nèi)帶立即數(shù)返回段內(nèi)帶立即數(shù)返回 RET EXP; (IP)()(SP)+1,(,(SP) (SP)()(SP)+2 (SP)()(SP)+DISP16位移量位移量段間返回

溫馨提示

  • 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)論