第3章-8086指令系統(tǒng)教材_第1頁(yè)
第3章-8086指令系統(tǒng)教材_第2頁(yè)
第3章-8086指令系統(tǒng)教材_第3頁(yè)
第3章-8086指令系統(tǒng)教材_第4頁(yè)
第3章-8086指令系統(tǒng)教材_第5頁(yè)
已閱讀5頁(yè),還剩68頁(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)介

第3章8086/8088指令系統(tǒng)

3.08086/8088指令系統(tǒng)概述3.18086/8088CPU的尋址方式3.28086/8088指令格式3.38086/8088指令系統(tǒng)3.08086/8088指令系統(tǒng)概述

8086/8088指令系統(tǒng)的特點(diǎn)

指令系統(tǒng)的兼容性特點(diǎn)指令格式的靈活性

可構(gòu)成多處理機(jī)系統(tǒng)

尋址方式的多樣性

多類型數(shù)據(jù)處理1.立即尋址方式立即尋址的操作數(shù)是一個(gè)立即數(shù),它直接出現(xiàn)在指令中。立即數(shù)只能作為源操作數(shù),可以是字節(jié)也可以是字。67H39HAHALAX3.18086/8088

CPU的尋址方式【例3.1】MOVAX,3967H,其尋址過程如圖3.1所示。圖3.1立即尋址示意圖…操作碼立即數(shù)低字節(jié)立即數(shù)高字節(jié)…高址低址2.直接尋址方式操作數(shù)的有效地址(EA)直接包含在指令中,它與操作碼一起存放在代碼段中。操作數(shù)存放的物理地址=DS×16+偏移量(EA)?!纠?.2】MOVAX,[3700H]執(zhí)行過程如圖3.2所示。23700H23701HA7H08H…操作碼偏移量00H偏移量37H……代碼段數(shù)據(jù)段AX圖3.2直接尋址方式示意圖

2000+)3700

23700HDS

08

A7

3.寄存器尋址方式操作數(shù)在CPU內(nèi)部的寄存器中。對(duì)16位操作數(shù),寄存器可以是AX、BX、CX、DX、SI、DI、SP或BP,而對(duì)8位操作數(shù),寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL。AXDX圖3.3寄存器尋址示意圖【例3.3】MOVAX,DX執(zhí)行過程如圖3.3所示。4.寄存器間接尋址方式寄存器間接尋址情況一若以SI、DI、BX間接尋址,操作數(shù)通常在現(xiàn)行數(shù)據(jù)段中,即DS中的值左移四位加上SI、DI或BX中的有效地址,即為操作數(shù)的物理地址?!纠?.4】MOVAX,[BX]執(zhí)行過程如圖3.4所示。21000H21001HA7HFFH

2000+)BX

1000

21000HDS

FF

A7

………代碼段數(shù)據(jù)段AX圖3.4寄存器間接尋址方式示意圖操作碼寄存器間接尋址情況二若以BP間接尋址,則操作數(shù)在堆棧段中,即操作數(shù)的物理地址為堆棧段寄存器SS中的值左移四位與BP相加。【例3.5】MOVAX,[BP]執(zhí)行過程如圖3.5所示。11234H11235H78H56H

1000+)BP1234

11234HSS

56

78

………代碼段堆棧段AX圖3.5以BP間接尋址方式示意圖操作碼4.寄存器間接尋址方式5.寄存器相對(duì)尋址【例3.6】MOVAX,ADDR[SI]執(zhí)行過程如圖3.6所示。6DH7BH61400H61401HEA=BXBPSIDI+8位偏移量16位偏移量

6000+)SI100061400HDS+)ADDR0400

7B

6D

…操作碼偏移量00偏移量04……代碼段數(shù)據(jù)段圖3.6基址尋址方式示意圖AXBX、BP基址尋址

SI、DI變址尋址6.基址變址尋址【例3.7】MOVAX,[BX][SI]執(zhí)行過程如圖3.7所示。EA=SIDI+BXBP35000H35001H

3000+)BX2000

35000HDS+)SI3000

20

30

30H20H…操作碼操作數(shù)……代碼段數(shù)據(jù)段圖3.7基址變址尋址方式示意圖AX7.基址加變址相對(duì)尋址【例3.8】MOVAX,[BX+SI+250H]執(zhí)行過程如圖3.8所示。30H20H33250H33251HEA=BXBP+8位偏移量16位偏移量SIDI+

3000+)BX1000

33250HDS+)SI2000+)0250

20

30

…操作碼偏移量50偏移量02……代碼段數(shù)據(jù)段圖3.8基址加變址尋址方式示意圖操作碼AX8.字符串尋址●字符串尋址用于字符串操作指令?!纠?.9】MOVSB執(zhí)行后:[DI]←[SI]SI←SI±1DI←DI±19.隱含尋址●這種尋址方式中,操作數(shù)是隱含的。指令中沒有明顯給出操作數(shù)?!纠?.10】AAA

即對(duì)AL中的內(nèi)容進(jìn)行十進(jìn)制加法調(diào)整,并把調(diào)整后的結(jié)果放入AH和AL中。這條指令的隱含操作數(shù)是AH和AL。10.

轉(zhuǎn)移類指令的尋址1.段內(nèi)相對(duì)轉(zhuǎn)移尋址

IP←IP+DISP(8位或16位);例如JNZNEXT2.段內(nèi)間接轉(zhuǎn)移尋址

IP←16位寄存器的內(nèi)容或相鄰兩個(gè)存儲(chǔ)單元的內(nèi)容;例如JMPCXCS不變

IP變3.段間直接轉(zhuǎn)移尋址

CS:IP←新的CS:IP

;例如JMPFARPTRNEXT4.段間間接轉(zhuǎn)移尋址

CS:IP←相鄰四個(gè)存儲(chǔ)單元的內(nèi)容,先是偏移地址,后是段地址;例如JMPDWORDPTR[BP][SI]CS、

IP

均變11.I/O端口尋址端口尋址I/O直接端口尋址間接端口尋址由指令直接給出I/O設(shè)備的端口地址。規(guī)定端口地址為8位,能尋址256個(gè)端口。由寄存器DX給出I/O設(shè)備的端口地址。由于DX是16位的寄存器,因此能尋址64K個(gè)端口?!纠?.11】INAL,20H;將端口地址為20H的外設(shè)的內(nèi)容讀入AL中

OUTDX,AL;將AL的內(nèi)容輸出給以DX內(nèi)容為端口地址的外設(shè)3.28086/8088指令格式指令操作碼(描述指令的操作功能)操作數(shù)(指明指令的操作對(duì)象)立即數(shù)寄存器操作數(shù)存儲(chǔ)器操作數(shù)

操作碼

操作數(shù)例如:MOVAX,[BX]目的操作數(shù)源操作數(shù)

操作數(shù)在內(nèi)存數(shù)據(jù)區(qū)中時(shí),由指令中的操作數(shù)部分給出此操作數(shù)地址的計(jì)算方法。

大部分操作數(shù)的段基址由數(shù)據(jù)段寄存器DS的內(nèi)容來(lái)確定,個(gè)別時(shí)候由附加段寄存器ES的內(nèi)容來(lái)確定;段內(nèi)偏移量由指令的操作數(shù)部分規(guī)定,通常稱它為有效地址,用EA表示。物理地址=段基址+段內(nèi)偏移量

=段寄存器×16+段內(nèi)偏移量3.28086/8088指令格式8086/8088的指令長(zhǎng)度可在1~6字節(jié)之間變化,格式如下:六字節(jié)指令

操作碼隱含操作數(shù)的單字節(jié)指令操作碼寄存器尋址的單字節(jié)指令

操作碼二字節(jié)指令

操作碼三字節(jié)指令

操作碼四字節(jié)指令

操作碼五字節(jié)指令REG

MOD

MOD

MOD

MOD

D/O

D/OL

OL

D/OH

OH

D

操作碼

OL

DL

MOD

OH

DH其中:REG---寄存器

D-------數(shù)據(jù)

O-------偏移量

L--------低8位

H--------高8位3.28086/8088指令格式后續(xù)字節(jié)可以根據(jù)指令的不同而取舍。

通常來(lái)說(shuō)指令的第1個(gè)字節(jié)為操作碼,第2個(gè)字節(jié)規(guī)定操作數(shù)的尋址方式,后續(xù)字節(jié)指出的是存儲(chǔ)器操作數(shù)的8/16位偏移量或8/16位立即數(shù)。注意其中操作碼和MOD字節(jié)的格式如下:7654321076543210操作碼MODDWREGR/M

通常操作碼占用第一個(gè)字節(jié)的7~2位,但有些指令的操作碼占用第一字節(jié)的7~1位,甚至增加第二字節(jié)的5~3位作為擴(kuò)展操作碼。3.28086/8088指令格式D

指示操作方向。D=1,REG為目的操作數(shù);D=0,R/M為目的操作數(shù),其中R代表寄存器,M代表存儲(chǔ)器。W

指示操作數(shù)寬度。W=1,操作數(shù)是16位;W=0,操作數(shù)是8位。MOD

用來(lái)區(qū)分是寄存器尋址,還是存儲(chǔ)器尋址。MOD=00,則說(shuō)明指令為存儲(chǔ)器尋址方式,無(wú)偏移量;MOD=01,為存儲(chǔ)器尋址方式,8位偏移量;MOD=10,為存儲(chǔ)器尋址方式,16位偏移量;MOD=11,為寄存器尋址方式。REG

指示參加操作的寄存器編碼,R/M受模式字段的控制,指出如何計(jì)算指令的有效地址EA。7654321076543210

操作碼

MODD

W

REG

R/M3.28086/8088指令格式3.28086/8088指令格式【例2】ADD[BX+SI+0100H],AX;該指令生成的機(jī)器;碼是01800001H

下面是根據(jù)上述指令格式生成計(jì)算機(jī)指令代碼的兩個(gè)例子:【例1】MOVAL,[BP];該指令生成的機(jī)器碼是8A4600H操作碼MODDWREGR/M

1000100110000110

8b偏移量

00000000操作碼MODDWREGR/M

0000001001000000偏移量低

00000000偏移量高

000000013.28086/8088指令格式3.3

8086/8088指令系統(tǒng)3.3.1數(shù)據(jù)傳送指令指令類型指令功能指令書寫格式通用數(shù)據(jù)傳送字節(jié)或字傳送字壓入堆棧字彈出堆棧字節(jié)或字交換換碼指令MOV目標(biāo),源PUSH源POP目標(biāo)XCHG目標(biāo),源XLAT目標(biāo)地址傳送裝入有效地址裝入DS寄存器裝入ES寄存器LEA目標(biāo),源LDS目標(biāo),源LES目標(biāo),源標(biāo)志位傳送將FR低字節(jié)裝入AH寄存器將AH內(nèi)容裝入FR低字節(jié)將FR內(nèi)容壓棧從堆棧中彈出一個(gè)字給FRLAHFSAHFPUSHFPOPF數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令MOV指令堆棧操作指令數(shù)據(jù)交換指令換碼指令壓棧指令出棧指令1.(1)MOV指令指令格式:MOVOP目,OP源指令功能:將源操作數(shù)傳送到目的操作數(shù)中。OP目表示目的操作數(shù),可以是寄存器、存儲(chǔ)器。OP源表示源操作數(shù),可以是寄存器、存儲(chǔ)器和立即數(shù)。

段寄存器

DSESSS存儲(chǔ)器立即數(shù)通用寄存器AXBXCXDXSIDIBXBP圖3.9數(shù)據(jù)傳送方向示意圖CS①壓棧指令指令格式:PUSHOP指令功能:將寄存器或存儲(chǔ)器單元的內(nèi)容送入堆棧OP為16位的寄存器或存儲(chǔ)器操作數(shù)。操作過程:1)SP←SP-1;[SP]←OPH(操作數(shù)高字節(jié))

2)SP←SP-1;[SP]←OPL(操作數(shù)低字節(jié))(2)堆棧操作指令指令格式:POPOP指令功能:將SP所指向的堆棧棧頂?shù)囊粋€(gè)字彈到寄存器或存儲(chǔ)單元中。OP為16位操作,可以是寄存器或存儲(chǔ)器操作數(shù)。操作過程:1)OPL←[SP];SP←SP+12)OPH←[SP];SP←SP+1②出棧指令(2)堆棧操作指令指令格式:XCHGOP1,OP2指令功能:實(shí)現(xiàn)OP1和OP2內(nèi)容的相互交換。操作數(shù)為通用寄存器或存儲(chǔ)器。【例3.12】XCHGAL,BL;AL與BL進(jìn)行字節(jié)互換

XCHGBX,CX;BX與CX進(jìn)行字互換⑶數(shù)據(jù)交換指令●交換可在通用寄存器之間、通用寄存器和存儲(chǔ)器之間進(jìn)行。段寄存器不能作為本指令的操作數(shù),而且兩個(gè)存儲(chǔ)單元之間不能直接交換數(shù)據(jù)。注意指令格式:XLAT指令功能:將BX的內(nèi)容和AL的內(nèi)容相加作為有效地址EA,

在一個(gè)表格中找出此單元中的內(nèi)容并傳送至AL中。⑷換碼指令●使用此指令時(shí),應(yīng)首先在數(shù)據(jù)段中預(yù)置一個(gè)表格。該表格的最大長(zhǎng)度不能超過256字節(jié)。表的起始地址的偏移量應(yīng)事先裝入BX寄存器,AL中存放查找對(duì)象在表中地址與表的起始地址相差的字節(jié)數(shù)。2.

目標(biāo)地址傳送指令(1)LEA指令指令格式:LEAOP目,OP源指令功能:將源操作數(shù)的有效地址EA送到目的操作數(shù)?!纠?.13】LEABX,[BP+SI];BP+SI→BXLEADI,TABLE;取TABLE的有效地址送入DI●本指令處理的是變量的地址(偏移量),不是變量的值。它等效于傳送有效地址的MOV指令,但MOV指令必須在變量名前使用OFFSET操作符。注意【例3.14】LDSDI,[2130H];將2130H和2131H單元的內(nèi)容送DI

將2132H和2133H單元的內(nèi)容送DS指令格式:●

LDSOP目,OP源指令功能:●把4個(gè)字節(jié)地址指針(包括一個(gè)段地址和一個(gè)偏移地址)從源操作數(shù)指定的4個(gè)存儲(chǔ)單元取出,低地址的兩字節(jié)送目的操作數(shù),高地址的兩字節(jié)送

DS段寄存器。(2)LDS指令2.

目標(biāo)地址傳送指令(3)LES指令指令格式:●

LESOP目,OP源指令功能:●本指令與LDS指令的操作基本相同,所不同的是將源操作數(shù)4個(gè)字節(jié)中高地址的兩字節(jié)傳送到ES段寄存器而不是DS段寄存器。2.

目標(biāo)地址傳送指令3.標(biāo)志寄存器傳送指令●讀標(biāo)志指令指令格式:LAHF指令功能:將標(biāo)志寄存器低8位→AH?!裨O(shè)置標(biāo)志指令指令格式:SAHF指令功能:將AH→標(biāo)志寄存器低8位。●

PUSHF指令指令格式:PUSHF指令功能:將16位標(biāo)志寄存器入棧,同時(shí)修改棧指針?!馪OPF指令指令格式:POPF指令功能:將棧頂?shù)囊粋€(gè)字送標(biāo)志寄存器,同時(shí)修改棧指針SP。1.3.3.2算術(shù)運(yùn)算指令加法指令(2)帶進(jìn)位的加法指令指令格式:ADCOP目,OP源指令功能:●將源操作數(shù)、目的操作數(shù)及CF的值相加,結(jié)果保留在目的操作數(shù)中,并根據(jù)結(jié)果設(shè)置標(biāo)志。(1)不帶進(jìn)位的加法指令指令格式:ADDOP目,OP源指令功能:●將源操作數(shù)和目的操作數(shù)相加,結(jié)果保留在目的操作數(shù)中,并根據(jù)結(jié)果設(shè)置標(biāo)志。(3)加1指令指令格式:INCOP指令功能:●將操作數(shù)加1,再送回該操作數(shù)。這條指令一般用于循環(huán)程序的計(jì)數(shù)器修改。操作數(shù)可以是8位/16位通用寄存器或存儲(chǔ)器,不能為立即數(shù)。減法指令2.(2)帶借位的減法指令指令格式:SBBOP目,OP源指令功能:●將目的操作數(shù)減去源操作數(shù)再減去借位標(biāo)志CF的現(xiàn)行值,結(jié)果送回到目的操作數(shù)中,并根據(jù)結(jié)果設(shè)置標(biāo)志。

(1)不帶借位的減法指令指令格式:SUBOP目,OP源指令功能:●將目的操作數(shù)減去源操作數(shù),結(jié)果送回到目的操作數(shù)中,并根據(jù)結(jié)果設(shè)置標(biāo)志。(3)減1指令指令格式:DECOP指令功能:●將操作數(shù)的值減1后送回源操作數(shù)中,根據(jù)結(jié)果置標(biāo)志位。操作數(shù)可以是8位/16位通過寄存器和存儲(chǔ)器操作數(shù),不能為立即數(shù)。(4)取補(bǔ)指令指令格式:NEGOP指令功能:●將操作數(shù)取補(bǔ)后送回原操作數(shù)。操作數(shù)可以是8位/16位通用寄存器或存儲(chǔ)器操作數(shù),不能為立即數(shù)。(5)比較指令指令格式:CMPOP目,OP源指令功能:●將目標(biāo)操作數(shù)與源操作數(shù)相減,不回送結(jié)果,只根據(jù)結(jié)果置標(biāo)志位。減法指令2.(1)無(wú)符號(hào)數(shù)乘法指令指令格式:MULOP指令功能:●完成兩個(gè)不帶符號(hào)的8位/16位二進(jìn)制數(shù)的乘法運(yùn)算。3.乘法指令●指令中給出的操作數(shù)是乘數(shù),它可以是8位/16位通用寄存器及存儲(chǔ)器;另一操作數(shù)被乘數(shù)隱含在AL/AX中,乘積存放在AH:AL或DX:AX中,如圖3.10所示。AL8位操作數(shù)AHAL×AX16位操作數(shù)DXAX×圖3.10乘法運(yùn)算示意圖對(duì)于字節(jié)乘法,當(dāng)AH為AL的符號(hào)擴(kuò)展時(shí),CF=OF=0,否則CF=OF=1;對(duì)于字乘法,當(dāng)DX為AX的符號(hào)擴(kuò)展時(shí),CF=OF=0,否則CF=OF=1。指令格式:IMULOP指令功能:●完成兩個(gè)帶符號(hào)的8位/16位二進(jìn)制數(shù)的乘法運(yùn)算。有關(guān)IMUL的其它約定與MUL相同。(2)帶符號(hào)數(shù)乘法指令注意3.乘法指令除法指令(1)無(wú)符號(hào)數(shù)除法指令指令格式:DIVOP指令功能:●完成兩個(gè)不帶符號(hào)的二進(jìn)制數(shù)的除法運(yùn)算。指令中給出的操作數(shù)是除數(shù),它可以是8位/16位通用寄存器及存儲(chǔ)器;被除數(shù)隱含在AX(字節(jié)除)或

DX、AX(字除法)中。操作過程:●字節(jié)除法AX/OP→ALAXMODOP→AH

●字除法(DX、AX)/OP→AX

(DX、AX)MODOP→DX4.4.(2)帶符號(hào)數(shù)除法指令●本指令在完成字節(jié)相除時(shí)最大的商為+127(7FH),最小的商為-128(80H);在完成字相除時(shí)最大的商為+32767(7FFFH),最小的商為-32768(8000H)。若商超出此范圍,則將產(chǎn)生一個(gè)類型0的中斷。除法指令指令格式:IDIVOP指令功能:●完成兩個(gè)帶符號(hào)的二進(jìn)制數(shù)的除法運(yùn)算。商的符號(hào)根據(jù)代數(shù)規(guī)則確定,余數(shù)的符號(hào)與被除數(shù)相同。操作數(shù)的規(guī)定同DIV指令。注意這兩條符號(hào)擴(kuò)展指令常常放在IDIV指令之前,對(duì)標(biāo)志位沒有影響。4.(3)符號(hào)擴(kuò)展指令2)字?jǐn)U展指令指令格式:CWD指令功能:●將AX中的數(shù)的符號(hào)擴(kuò)展到DX中。若AX<8000H,則0→DX;若AX≥8000H,則OFFFFH→DX。注意除法指令(3)符號(hào)擴(kuò)展指令指令格式:CBW指令功能:●將AL中的單字節(jié)數(shù)的符號(hào)擴(kuò)展到AH中。若AL<80H,則0→AH;若AL≥80H,則OFFH→AH。1)字節(jié)擴(kuò)展指令(1)指令格式:AAA指令功能:對(duì)AL中的由兩個(gè)非組合BCD碼相加所得的結(jié)果進(jìn)行調(diào)整,并將調(diào)整后的結(jié)果存于AX中。操作過程:如果AL的低4位表示的數(shù)大于9或者AF=1,則將AL加6,AH加1,將AF和CF置1,清除AL的高四位;否則清除AL的高4位以及AF和CF標(biāo)志位。5.十進(jìn)制運(yùn)算調(diào)整指令非組合BCD碼的加法調(diào)整指令5.十進(jìn)制運(yùn)算調(diào)整指令(2)指令格式:DAA指令功能:對(duì)AL中的由兩個(gè)組合BCD碼相加所得的結(jié)果進(jìn)行調(diào)整,并將調(diào)整后的結(jié)果存于AL中。操作過程:如果AL的低4位大于9或者AF=1,則AL+6→AL,

并置AF=1;如果AL的高4位大于9或者CF=1,

則AL+60H→AL,并置CF=1。以上這兩條指令使用時(shí)必須緊跟在ADD或ADC指令之后。而且,這兩條指令只能對(duì)AL中的結(jié)果進(jìn)行調(diào)整,因此對(duì)多字節(jié)的十進(jìn)制數(shù)運(yùn)算,只能從低字節(jié)開始逐個(gè)字節(jié)的進(jìn)行運(yùn)算和調(diào)整。組合BCD碼的加法調(diào)整指令注意(3)指令格式:AAS指令功能:對(duì)AL中的由兩個(gè)非組合BCD碼相減所得的結(jié)果進(jìn)行調(diào)整,并將調(diào)整后的結(jié)果存于AL中。操作過程:調(diào)整方法與AAA類似,不同的只是當(dāng)AL的低

4位表示的數(shù)大于9或者AF=1時(shí),將AL-6→AL,

AH-1→AH,并將AF和CF置1,清除AL的高四位。5.十進(jìn)制運(yùn)算調(diào)整指令非組合BCD碼的減法調(diào)整指令使用AAS、DAS指令必須緊跟在SUB或SBB指令之后。(4)指令格式:DAS指令功能:對(duì)AL中的由兩個(gè)組合BCD碼相減所得的結(jié)果進(jìn)行調(diào)整,并將調(diào)整后的結(jié)果存于AL中。操作過程:調(diào)整方法與DAA類似,不同的只是當(dāng)AL的低4位大于9或者AF=1,則AL-6→AL,并置AF=1;而當(dāng)AL的高4位大于9或者CF=1時(shí),則AL-60H→AL,并置CF=1。5.十進(jìn)制運(yùn)算調(diào)整指令注意組合BCD碼的減法調(diào)整指令(5)指令格式:AAM指令功能:對(duì)AX中的由兩個(gè)非組合BCD碼相乘所得的結(jié)果進(jìn)行調(diào)整,并將調(diào)整后的結(jié)果存于AX中。操作過程:將AL中的內(nèi)容除以10,并將除得的商和余數(shù)分別送AH和AL。5.十進(jìn)制運(yùn)算調(diào)整指令本指令必須緊跟在MUL指令之后使用。非組合BCD碼的乘法調(diào)整指令注意本指令必須在DIV運(yùn)算前使用。(6)指令格式:AAD指令功能:把AX中的由兩個(gè)非組合BCD碼進(jìn)行調(diào)整,然后可按DIV指令實(shí)現(xiàn)兩個(gè)非組合BCD碼的除法運(yùn)算。操作過程:將AH中的內(nèi)容乘以10與AL中的內(nèi)容相加,結(jié)果送AL中,再將AH清零。5.十進(jìn)制運(yùn)算調(diào)整指令注意非組合BCD碼的除法調(diào)整指令邏輯運(yùn)算指令1.邏輯與運(yùn)算指令指令格式:ANDOP目,OP源指令功能:對(duì)兩個(gè)操作數(shù)按位進(jìn)行與操作,結(jié)果回送到目標(biāo)操作數(shù)。2.邏輯或運(yùn)算指令指令格式:OROP目,OP源指令功能:對(duì)兩個(gè)操作數(shù)進(jìn)行邏輯或運(yùn)算,結(jié)果回送到目標(biāo)操作數(shù)。3.3.34.邏輯非運(yùn)算指令指令格式:NOTOP指令功能:對(duì)操作數(shù)逐位取反后回送到原處。5.測(cè)試指令指令格式:TESTOP目,OP源指令功能:將目標(biāo)操作數(shù)與源操作數(shù)進(jìn)行邏輯與運(yùn)算,不回送結(jié)果,只根據(jù)結(jié)果置標(biāo)志位。指令格式:XOROP目,OP源指令功能:對(duì)兩個(gè)操作數(shù)進(jìn)行邏輯異或運(yùn)算,結(jié)果回送到目標(biāo)操作數(shù)。3.邏輯異或運(yùn)算指令移位指令1.一般移位指令(1)邏輯左移指令指令格式:SHLOP目,計(jì)數(shù)值指令功能:將操作數(shù)的內(nèi)容左移,每移一次,最低位補(bǔ)0,最高位→CF。(2)邏輯右移指令指令格式:SHROP目,計(jì)數(shù)值指令功能:將操作數(shù)的內(nèi)容右移,每移一次,最高位補(bǔ)0,

最低位→CF。3.3.41.

(3)算術(shù)左移指令指令格式:SALOP目,計(jì)數(shù)值指令功能:同SHL(邏輯左移指令)(4)算術(shù)右移指令指令格式:SAROP目,計(jì)數(shù)值指令功能:將操作數(shù)的內(nèi)容右移,每移一次,最高位的值不變,最低位CF→。一般移位指令(1)循環(huán)左移指令指令格式:ROLOP目,計(jì)數(shù)值指令功能:將操作數(shù)的內(nèi)容循環(huán)左移,每移一次,最高位移入CF,同時(shí)移入最低位。(2)循環(huán)右移指令指令格式:ROROP目,計(jì)數(shù)值指令功能:將操作數(shù)的內(nèi)容循環(huán)右移,每移一次,最低位移入CF,同時(shí)移入最高位。循環(huán)移位指令2.(4)帶進(jìn)位的循環(huán)右移指令指令格式:RCROP目,計(jì)數(shù)值指令功能:包括進(jìn)位位在內(nèi),一起循環(huán)右移,每移一次,最低位移入CF,原CF移入最高位。2.循環(huán)移位指令(3)帶進(jìn)位的循環(huán)左移指令指令格式:RCLOP目,計(jì)數(shù)值指令功能:包括進(jìn)位位在內(nèi),一起循環(huán)左移,每移一次,最高位移入CF,原CF移入最低位。字符串操作指令

串是存儲(chǔ)區(qū)中的一個(gè)數(shù)據(jù)序列。串操作是指對(duì)串中的每個(gè)字或字節(jié)數(shù)據(jù)做相同的操作。串操作分為串傳送、串搜索、串比較及串存取等。所有基本的串操作有如下共同點(diǎn):3.3.5(1)用寄存器SI尋址源操作數(shù),且假定源操作數(shù)是在現(xiàn)行的數(shù)據(jù)段區(qū)域中,用寄存器DI尋址目標(biāo)操作數(shù),且假定目標(biāo)操作數(shù)是在現(xiàn)行的附加段區(qū)域中。(2)每執(zhí)行一次串操作后自動(dòng)修改指針SI、DI。若方向標(biāo)志DF=0,則每次操作后SI和DI自動(dòng)加1或加2;若DF=1,則每次操作后SI和DI自動(dòng)減1或減2。(3)串長(zhǎng)存放在CX中。字符串傳送指令指令格式:MOVSOP目,OP源

MOVSBMOVSW指令功能:從源串中取一個(gè)字節(jié)/字,傳送到目標(biāo)串中,并自動(dòng)修改SI/DI,使之指向下一元素。字符串傳送指令前可以加重復(fù)前綴REP,表示每傳送完

一個(gè)元素使CX減1,直到CX=0。使用MOVS指令時(shí),必須說(shuō)明操作數(shù)的數(shù)據(jù)類型,這樣才能確定是字節(jié)傳送,還是字傳送。1.注意指令格式:CMPSOP目,OP源

CMPSBCMPSW指令功能:取源串一個(gè)字節(jié)/字,與目標(biāo)串的一個(gè)字節(jié)/字相減,不回送結(jié)果,根據(jù)結(jié)果置標(biāo)志位,并修改串地址指針,使之指向下一個(gè)字節(jié)/字單元。字符串比較指令2.指令格式:SCASOPSCASBSCASW指令功能:將AL/AX寄存器中的關(guān)鍵字,減去由DI所指向的目標(biāo)串中的元素,不回送結(jié)果,根據(jù)結(jié)果置標(biāo)志位,并修改DI寄存器內(nèi)容,指向下一元素。執(zhí)行這類指令前,必須先將要查找的關(guān)鍵字送AL/AX中,串的首偏移地址送DI,串長(zhǎng)送CX。字符串搜索指令3.注意指令格式:LODSOPLODSBLODSW指令功能:將源串中SI所指向的存儲(chǔ)單元中的一個(gè)字節(jié)/字取到AL/AX寄存器中,并修改SI的內(nèi)容,指向下一字節(jié)/字單元。取字符串和存字符串指令(1)取字符串指令4.指令格式:STOSOPSTOSBSTOSW指令功能:將AL/AX中的一個(gè)字節(jié)/字,存到由DI所指向的目標(biāo)串的存儲(chǔ)單元,并修改DI的內(nèi)容,指向下一個(gè)字節(jié)/字的存放單元。4.取字符串和存字符串指令LODS指令一般不使用重復(fù)前綴,STOS指令常使用REP前綴。注意(2)存字符串指令(1)JMP指令指令格式:JMPSHORTOP指令操作:IP←IP+8位偏移量。1)段內(nèi)直接短轉(zhuǎn)移指令格式:JMPNEARPTROP指令操作:IP←IP+16位偏移量.2)段內(nèi)直接近轉(zhuǎn)移3.3.6轉(zhuǎn)移指令1.無(wú)條件轉(zhuǎn)移指令(1)指令格式:JMPWORDPTROP或JMPOP3)段內(nèi)直接轉(zhuǎn)移指令格式:JMPFARPTROP4)段間直接轉(zhuǎn)移指令格式:JMPDWORDPTROP5)段間間接轉(zhuǎn)移JMP指令1.無(wú)條件轉(zhuǎn)移指令(2)調(diào)用和返回指令1)指令格式:CALLOP指令功能:將CALL指令的下一條指令的地址IP或IP與CS壓棧,新的目標(biāo)地址裝入IP或IP與CS中,控制程序轉(zhuǎn)移到由OP指明入口的子程序。操作過程:A.當(dāng)前CS壓棧,OP所在段地址→CS,SP-2→SPB.當(dāng)前SP壓棧,OP的偏移地址→IP,SP-2→SP調(diào)用指令1.無(wú)條件轉(zhuǎn)移指令(2)調(diào)用和返回指令2)返回指令指令格式:RET指令功能:通常作為一個(gè)子程序的最后一條指令,用以返回到調(diào)用子程序的斷點(diǎn)處,即從堆棧彈出斷點(diǎn)送IP

和CS。操作過程:A.從棧頂彈出一個(gè)字給IP,SP+2→SPB.從棧頂彈出一個(gè)字給CS,SP+2→SP1.無(wú)條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令

高于/不低于也不等于轉(zhuǎn)移JA/JNBE目標(biāo)標(biāo)號(hào)高于或等于/不低于轉(zhuǎn)移JAE/JNB目標(biāo)標(biāo)號(hào)低于/不高于也不等于轉(zhuǎn)移JB/JNAE目標(biāo)標(biāo)號(hào)低于或等于/不高于轉(zhuǎn)移JBE/JNA目標(biāo)標(biāo)號(hào)大于/不小于也不等于轉(zhuǎn)移JG/JNLE目標(biāo)標(biāo)號(hào)大于或等于/不小于轉(zhuǎn)移JGE/JNL目標(biāo)標(biāo)號(hào)小于/不大于也不等于轉(zhuǎn)移JL/JNGE目標(biāo)標(biāo)號(hào)小于或等于/不大于轉(zhuǎn)移JLE/JNG目標(biāo)標(biāo)號(hào)

2.其中,A表示“高于”,B表示“低于”,G表示“大于”,L表示“小于”,N表示“不”,E表示“等于”。注意進(jìn)位為1轉(zhuǎn)移JC目標(biāo)標(biāo)號(hào)進(jìn)位為0轉(zhuǎn)移JNC目標(biāo)標(biāo)號(hào)等于/結(jié)果為0轉(zhuǎn)移JZ/JE目標(biāo)標(biāo)號(hào)不等于/結(jié)果不為0轉(zhuǎn)移JNZ/JNE目標(biāo)標(biāo)號(hào)溢出轉(zhuǎn)移JO

目標(biāo)標(biāo)號(hào)不溢出轉(zhuǎn)移JNO目標(biāo)標(biāo)號(hào)奇偶位為0/奇偶性為奇轉(zhuǎn)移JNP/JPO目標(biāo)標(biāo)號(hào)奇偶位為1/奇偶性為偶轉(zhuǎn)移JP/JPE目標(biāo)標(biāo)號(hào)符號(hào)標(biāo)志位為0轉(zhuǎn)移JNS目標(biāo)標(biāo)號(hào)符號(hào)標(biāo)志位為1轉(zhuǎn)移JS目標(biāo)標(biāo)號(hào)2.條件轉(zhuǎn)移指令循環(huán)控制指令(1)計(jì)數(shù)循環(huán)指令格式:LOOP目標(biāo)標(biāo)號(hào)指令功能:CX-1→CX,若CX≠0,循環(huán)轉(zhuǎn)移到目標(biāo)標(biāo)號(hào),

溫馨提示

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