第三章尋址方式與指令系統(tǒng)_第1頁
第三章尋址方式與指令系統(tǒng)_第2頁
第三章尋址方式與指令系統(tǒng)_第3頁
第三章尋址方式與指令系統(tǒng)_第4頁
第三章尋址方式與指令系統(tǒng)_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第三章尋址方式與指令系統(tǒng)指令系統(tǒng):一組指令集

操作碼操作數(shù)...操作數(shù)指令:一地址指令:INCAXDECCX二地址指令:MOVAX,[2000H]ADDAH,BL

尋址方式:取得操作數(shù)地址的方式或指令中用于說明操作數(shù)所在地址的表示方法。1一.立即尋址方式格式:n;n為一常數(shù)(立即數(shù))特點:n

本身是需要尋找的操作對象。它緊跟指令存于內存代碼段中。例:MOVBX,10

MOVAH,‘A’

MOVAX,3064H3.1尋址方式2內存::MOV64H30H:低高代碼段CPU:AX

AHAL注:?立即數(shù)只能作雙操作數(shù)指令的源操作數(shù),不能作目的操作數(shù)。

?立即數(shù)不能作單操作數(shù)指令的操作數(shù)。如:MOV100H,AX×INC50

×

?立即數(shù)送入目的操作數(shù)中,注意溢出如:MOVAL,-90H×

3二.直接尋址方式?格式:段寄存器:[EA](其中:段寄存器為DS,ES,SS之一)或含有變量的地址表達式。?特點:

?操作數(shù)的地址偏移量EA,或變量地址表達式的EA直接包含在指令中,與操作碼一起放在代碼段中。

?操作數(shù)對象一般不作特別說明,存放在當前數(shù)據(jù)段中,其物理地址求法為:(DS)0000+EA

4例:MOVAX,DS:[2000H];((DS)+2000H)AX

設執(zhí)行前(DS)=3000H4(32000H)=2415H

則執(zhí)行后(32000H)字

AX即(AX)=2415H

MOVAL,DS:[2000H]

則(32000H)字節(jié)

AL即(AL)=15H4

:

MOV0000

00H

4

20H+::

15H

32000H

24H

32001H:代碼段數(shù)據(jù)段3000H內存這說明:?段寄存器:[EA]這種直接尋址方式?jīng)]有類型;?含有變量地址表達式的形式有類型,其類型由變量類型決定。例:MOVAX,ES:[2000H];((ES)+2000H)AX

段跨越符4

MOVSS:[1000H],BX;(BX)

(SS)+1000H

4

MOVBUF,AXMOV[BUF],AXDS5寄存器尋址方式*—操作數(shù)在指定的寄存器中

MOVAX,BXMOVAL,BH*字節(jié)寄存器只有AHALBHBLCHCLDHDL*SRC和DST的字長一致MOVAH,BX*CS不能用MOV指令改變MOVCS,AX三、寄存器尋址方式6格式:[R];其中R為BX,BP,SI,DI之一,不允許是其它寄存器。特點:操作對象在內存中,操作對象的EA在BX,BP,SI,DI之一中。(不在內存)即:EA=(BX)(BP)(SI)(DI)

注:(1)若選擇[BX],[SI],[DI]之一,且缺省段跨越符,則對象在當前的數(shù)據(jù)段中;四、寄存器間接尋址方式7例:MOVAX,[BX];((DS)+(BX))AX

4若執(zhí)行前(DS)=2000H,(BX)=1000H:MOVAX,[BX]DSBX::40A0H21000H+50H21001H:

數(shù)據(jù)段2000H1000H50H0A0H內存AX(2)若缺省段跨越符,且BP作間址寄存器,則對象存放在當前堆棧段中。如:MOVBX,[BP];((SS)+(BP))BX

48(3)若指定段跨越符,則不管BP,BX,SI,DI之一作變址器,都取相應段中數(shù)據(jù)。如:MOVES:[BP],AX;(AX)(ES)+(BP)MOVAX,ES:[BX];((ES)+(BX))AX

4注:?間址器一定要是BP,BX,SI,DI之一如:MOVCX,[AX]×

?間接尋址方式表示對象的地址,并不能表示對象的類型。9格式:X[R];其中R為BX,BP,SI,DI之一。X為一整常數(shù)或變量地址表達式。特點:?操作對象在內存中

?EA為R的內容和X之和(即:X在代碼段中,EA另一部分在R中)。EA=X+(SI)X+(DI)X+(BX)X+(BP)缺省段跨越符的物理地址(DS)+(SI)+X

4(DI)+X(BX)+X(SS)+(BP)+X

4五.相對尋址方式10例:MOVCX,-6[BX];((DS)+(BX)-6)CX

設執(zhí)行前:(BX)=16H,(DS)=2000H,(20010H)=3789H

執(zhí)行:執(zhí)行后(CX)=3789H,其他寄存器內容不變。:DSBX

MOVCX

OFFH

OFAH+:89H20010H37H20011H:代碼段數(shù)據(jù)段2000H16H-6例:MOV[BX+7],BXMOVDL,4[AX]×MOVBX,ES:ABC[SI];其中ABC為變量名,它表示變量到所在段段首址的EA11格式:[BR+IR]

其中:BR為基址寄存器,僅為BX和BP之一;IR為變址寄存器,僅為SI和DI之一。特點:?操作對象在內存中。

?操作數(shù)的EA=(BX)+(SI)或(DI)(BP)+(SI)或(DI)

?缺省段跨越符,其物理地址:(DS)+(BX)+(SI)或DI

4(SS)+(BP)+(SI)或DI

4例:MOVAX,[BX+BP]×MOV[SI+DI],CX×MOV[BX+CX],AX×六.基址變址尋址方式12例:MOVAX,[BX+DI]

MOVAX,[BX][DI]

設執(zhí)行前(DS)=2100H(BX)=158H(DI)=10A5H(221FDH)=1234HEA=158H+10A5H=11FDH

∴物理地址:(DS)+EA=21000H+11FDH=221FDH

4:DSBXDI指令碼

:4

:+34H221FDH12H221FEH:2100H158H10A5H數(shù)據(jù)段執(zhí)行后:(AX)=1234H當MOVAL,[BX+DI];(221FDH)字節(jié)=34H

AL即(AL)=34H13格式:X[BR+IR]

其中:BR為基址器,僅為BX,BP之一;IR為變址器,僅為SI,DI之;X為一整常數(shù)或已定義的變量名。特點:

?對象在內存中;

?操作數(shù)的EA=(BX)+(SI)或(DI)+X(X為變量名,則該變量名到所在段的段首的字節(jié)個數(shù))(BP)+(SI)或(DI)+X七.相對基址變址尋址方式14例:MOVAX,8[BX+SI]

執(zhí)行前:(AX)=45H,(BX)=30H,(SI)=20H,(DS)=1000H(10058H)=99H:

指令碼8::99H0:代碼段數(shù)據(jù)段

DS

BX

SI

+10058H10059H

執(zhí)行后:(10058H)

AX(AX)=99H1000H30H20H例:MOVDX,M[BX+DI];設M已定義在數(shù)據(jù)段中MOVSS:[BX+SI+7],CX;物理地址=(SS)+(BX)+(SI)+7

415習題:1.分別指出下列指令中源操作數(shù)和目的操作數(shù)的尋址方式

①MOVSI,’C’④ADDCX,DS:[10H]②MOV[BX+3],AX⑤MOVDL,[BP+DI]③SUB[BX][SI],AL⑥MOV[BX],AX2.指出下列各尋址中的錯誤,并說明原因

①MOV100H,AX④MOV[BX+BP],[SI]②MOV[CX],AH⑤ADDAX,[DI+SI]③ADDAX,BL⑥MOVAH,1000⑦POPCL3.已(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=0ADH,(BX)=100H,(BP)=10H,試指出下列源操作數(shù)的尋址方式是什么?其物理地址值是什?(1)MOVAX,DS:[100H](2)MOVBX,[SI](3)MOVCX,[BX+10H](4)MOVAX,[BX][SI](5)MOVCL,[BP+4](6)MOVCH,ES:[BP+SI]16

數(shù)據(jù)傳送指令

算術運算指令

邏輯運算指令

串操作指令

程序轉移指令

處理機控制指令注意:1.指令的基本功能2.指令的執(zhí)行對標志位的影響3.對尋址方式或寄存器使用的限制和隱含使用的情況3.2指令系統(tǒng)17功能:負責把數(shù)據(jù),地址或立即數(shù)送到寄存器或內存單元中。

1.傳送指令:MOV

格式:MOVDEST,SC功能:(SRC)DEST立即數(shù)傳送到通用寄存器或存儲單元MOVCL,25H;字節(jié)傳送MOVAX,4321H;字傳送MOVDA_BYTE,34H;字節(jié)傳送MOVDA_WORD,4321H;字傳送

注意:立即數(shù)只能出現(xiàn)在源操作數(shù)位置,不能作為目的操作數(shù)

一.數(shù)據(jù)傳送指令18寄存器之間的傳送MOVBL,DL;字節(jié)傳送MOVDX,CX;字傳送MOVES,AX;通用寄存器與段寄存器之間傳送注意:段寄存器CS僅只能作源操作數(shù),不能作目的操作數(shù)。

19寄存器與存儲單元之間的傳送MOVDL,DA_BYTE;字節(jié)傳送MOVAX,DA_WORD;字傳送MOVDA_BYTE,CL;字節(jié)傳送MOVDA_WORD,DX;字傳送注意:兩個存儲單元之間不能用一條MOV指令直接完成數(shù)據(jù)傳送。立即數(shù)不能直接傳送給段寄存器,且段寄存器之間亦不能進行直接傳送。20立即數(shù)存儲器通用寄存器AXBXCXDXBPSPSIDICS段寄存器DSESSS圖3.7MOV指令的數(shù)據(jù)傳送方向21格式:XCHGDEST,SRC功能:(SRC)?(DEST)例:XCHGAL,AH;(AL)?(AH)注:SRC或DEST均不能為立即數(shù)二.交換指令22

標志送AH指令:LAHF

執(zhí)行操作:(AH)(PSW的低字節(jié))

AH送標志寄存器指令:SAHF

執(zhí)行操作:(PSW的低字節(jié))

(AH)

標志進棧指令:PUSHF

執(zhí)行操作:(SP)(SP)-2((SP)+1,(SP))(PSW)

標志出棧指令:POPF

執(zhí)行操作:(PSW)(SP)+1,(SP))(SP)(SP)+2*

影響標志位三.標志寄存器傳送指令23

有效地址送寄存器指令:LEAREG,SRC

執(zhí)行操作:(REG)SRC

指針送寄存器和DS指令:LDSREG,SRC

執(zhí)行操作:(REG)(SRC)(DS)(SRC+2)4個相繼字節(jié)寄存器(通常是SI)、DS

指針送寄存器和ES指令:LESREG,SRC

執(zhí)行操作:(REG)(SRC)(ES)(SRC+2)4個相繼字節(jié)寄存器(通常是DI)、ES四.地址傳送指令24例:LEABX,[BX+SI+0F62H]

例:LDSSI,[10H]例:LESDI,[BX]例:(DS):1000H40H00

H

00H

30

H

TABLEMOVBX,TABLE

;(BX)=0040HMOVBX,OFFSETTABLE;(BX)=1000HLEABX,TABLE;(BX)=1000HLDSBX,TABLE;(BX)=0040H;(DS)=3000HLESBX,TABLE

;(BX)=0040H;(ES)=3000H注意:

*不影響標志位

*

REG不能是段寄存器*

SRC必須為存儲器尋址方式25換碼指令:XLAT或XLATOPR執(zhí)行操作:(AL)((BX)+(AL))例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE

指令執(zhí)行后(AL)=33H注意:*不影響標志位*字節(jié)表格(長度不超過256)

首地址(BX)*

需轉換代碼(AL)(BX)

30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H五.換碼指令26加法指令減法指令乘法指令除法指令十進制調整指令

3.2.2算術指令27加法指令

加法指令:ADDDST,SRC

執(zhí)行操作:(DST)(SRC)+(DST)

帶進位加法指令:ADCDST,SRC

執(zhí)行操作:(DST)(SRC)+(DST)+CF

加1指令:INCOPR

執(zhí)行操作:(OPR)(OPR)+1注意:

*除INC指令不影響CF標志外,均對條件標志位有影響。28加法指令對條件標志位(CF/OF/ZF/SF)的影響:CF位表示無符號數(shù)相加的溢出。OF位表示帶符號數(shù)相加的溢出。1結果為負0否則SF=1結果為00否則ZF=1和的最高有效位有向高位的進位0否則CF=1兩個操作數(shù)符號相同,而結果符號與之相反0否則OF=29無符號數(shù)溢出00000111+1111101100000010帶:(+7)+(-5)=+2OF=0無:7+251=2

CF=1帶符號數(shù)和無符號數(shù)都不溢出00000100+0000101100001111帶:(+4)+(+11)=+15OF=0無:4+11=15CF=0帶符號數(shù)溢出00001001+0111110010000101帶:(+9)+(+124)=-123OF=1無:9+124=133

CF=0帶符號數(shù)和無符號數(shù)都溢出10000111+1111010101111100帶:(-121)+(-11)=+124OF=1無:135+245=124

CF=1n=8bit

帶符號數(shù)(-128~127)無符號數(shù)(0~255)30例:雙精度數(shù)的加法

(DX)=0002H(AX)=0F365H(BX)=0005H(CX)=0E024H

指令序列

(1)ADDAX,CX

(2)ADCDX,BX

(1)執(zhí)行后,(AX)=0D389H

CF=1OF=0

SF=1ZF=0

(2)執(zhí)行后,(DX)=0008H

CF=0OF=0

SF=0ZF=031減法指令

減法指令:SUBDST,SRC

執(zhí)行操作:(DST)(DST)-(SRC)

帶借位減法指令:SBBDST,SRC

執(zhí)行操作:(DST)(DST)-(SRC)-CF

減1指令:DECOPR

執(zhí)行操作:(OPR)(OPR)-1

求補指令:NEGOPR

執(zhí)行操作:(OPR)-(OPR)

比較指令:CMPOPR1,OPR2

執(zhí)行操作:(OPR1)-(OPR2)注意:*除DEC指令不影響

CF標志外,均對條件標志位有影響。32減法指令對條件標志位(CF/OF/ZF/SF)的影響:CF位表示無符號數(shù)減法的溢出。OF位表示帶符號數(shù)減法的溢出。NEG指令對CF/OF的影響:CF位:操作數(shù)為0時,求補的結果使CF=0,否則CF=1。OF位:字節(jié)運算對-128求補或字運算對-32768求補時OF=1,

否則OF=0。1被減數(shù)的最高有效位有向高位的借位0否則CF=1兩個操作數(shù)符號相反,而結果的符號與減數(shù)相同0否則OF=1減法轉換為加法運算時無進位0否則CF=或33例:x、y、z均為雙精度數(shù),分別存放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲單元中,用指令序列實現(xiàn)

wx+y+24-z,并用W,W+2單元存放w。

MOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2

;x+yADDAX,24ADCDX,0

;x+y+24SUBAX,ZSBBDX,Z+2

;x+y+24-zMOVW,AXMOVW+2,DX;結果存入W,W+2單元34乘法指令

無符號數(shù)乘法指令:MULSRC

執(zhí)行操作:字節(jié)操作數(shù)(AX)(AL)*(SRC)

字操作數(shù)(DX,AX)(AX)*(SRC)

帶符號數(shù)乘法指令:IMULSRC注意:*

AL(AX)為隱含的乘數(shù)寄存器。*

AX(DX,AX)為隱含的乘積寄存器。

*

SRC不能為立即數(shù)。*除CF和OF外,對條件標志位無定義。35乘法指令對CF/OF的影響:00乘積的高一半為零11否則MUL指令:CF/OF=例:(AX)=16A5H,(BX)=0611H

(1)IMULBL;(AX)(AL)*(BL)

;A5*115B*11=060BF9F5

;

(AX)=0F9F5H

CF=OF=1(2)MULBX

;(DX,AX)(AX)*(BX)

;16A5*0611=00895EF5

;

(DX)=0089H(AX)=5EF5H

CF=OF=1

00乘積的高一半是低一半的符號擴展11否則

IMUL指令:CF/OF=36除法指令

無符號數(shù)除法指令:DIVSRC

執(zhí)行操作:字節(jié)操作(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余數(shù)字操作(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余數(shù)

帶符號數(shù)除法指令:IDIVSRC注意:*

AX(DX,AX)為隱含的被除數(shù)寄存器。*

AL(AX)為隱含的商寄存器。*

AH(DX)為隱含的余數(shù)寄存器。*

SRC不能為立即數(shù)。*

對所有條件標志位均無定義。37符號擴展指令:

CBWALAX

執(zhí)行操作:若(AL)的最高有效位為0,則(AH)=00H

若(AL)的最高有效位為1,則(AH)=0FFHCWDAX(DX,AX)

執(zhí)行操作:若(AX)的最高有效位為0,則(DX)=0000H

若(AX)的最高有效位為1,則(DX)=0FFFFH注意:*無操作數(shù)指令*隱含對AL或AX進行符號擴展*不影響條件標志位例:(AX)=0BA45HCBW;(AX)=0045HCWD;(DX)=0FFFFH(AX)=0BA45H38例:x,y,z,v均為16位帶符號數(shù),計算(v-(x*y+z-540))/x

MOVAX,XIMULY;x*yMOVCX,AXMOVBX,DXMOVAX,ZCWDADDCX,AXADCBX,DX;x*y+zSUBCX,540SBBBX,0

;x*y+z-540MOVAX,VCWDSUBAX,CXSBBDX,BX

;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x39十進制調整指令

BCD碼:用二進制編碼的十進制數(shù),又稱二--十進制數(shù)

壓縮的BCD碼:用4位二進制數(shù)表示1位十進制數(shù)例:(59)10=(01011001)BCD非壓縮的BCD碼:用8位二進制數(shù)表示1位十進制數(shù)例:(59)10=(0000010100001001)BCD數(shù)字的ASCII碼是一種非壓縮的BCD碼DIGIT ASCII BCD0 30H 001100001 31H 001100012 32H 00110010… … …9 39H 0011100140例:寫出(3590)10的壓縮BCD碼和非壓縮BCD碼,并分別把它們存入數(shù)據(jù)區(qū)PAKED和UNPAK。壓縮BCD: (3590)10=(0011010110010000)BCD非壓縮BCD:(3590)10=(00000011000001010000100100000000)BCDPAKED90H35HUNPAK00H09H05H03H41壓縮的BCD碼調整指令加法的十進制調整指令:DAA執(zhí)行操作:(AL)(AL)壓縮BCD減法的十進制調整指令:DAS執(zhí)行操作:(AL)(AL)壓縮BCD19壓縮BCD:00011001+08+000010002700100001+110

(00100111)BCD

AF=1問題的提出:注意:

*隱含的操作寄存器為AL*

緊接在加減指令之后使用

*影響條件標志位(對OF無定義)42調整方法:AF=1或(AL)0~3=A~F,則(AL)(AL)06H,AF=1CF=1或(AL)4~7=A~F,則(AL)(AL)60H,CF=1(DAA做‘+’,DAS做‘-’)例: DATASEGMENT

BCD1 DB 34H,18H;(1834)BCD BCD2 DB 89H,27H;(2789)BCD BCD3 DB 2DUP(?) DATAENDS(1)BCD3BCD1+BCD2 ;(4623)BCD

(2)BCD3BCD1-BCD2;(9045)BCD

=-95543(1) MOV AL,BCD1;(AL)=34H

ADD AL,BCD2

;(AL)=34+89=BDH

DAA

;(AL)=BD+60+06=23HAF=CF=1

MOV BCD3,AL;(BCD3)=23H MOV AL,BCD1+1;(AL)=18H

ADC AL,BCD2+1

;(AL)=18+27+1=40H

AF=1CF=0 DAA

;(AL)=40+06=46H

MOV BCD3+1,AL

;(BCD3+1)=46H(2) MOV AL,BCD1

;(AL)=34H

SUB AL,BCD2

;(AL)=34-89=ABH

DAS ;(AL)=AB-60-06=45HAF=CF=1

MOV BCD3,AL;(BCD3)=45H MOV AL,BCD1+1

;(AL)=18H

SBB AL,BCD2+1;(AL)=18-27-1=F0H

DAS ;(AL)=F0-60=90H

MOV BCD3+1,AL;(BCD3+1)=90H44非壓縮的BCD調整指令加法調整指令:AAA(AL)(AL)非壓縮BCD減法調整指令:AAS

(AL)(AL)非壓縮BCD注意:*隱含的操作寄存器為AL*

緊接在加減指令之后使用*除AF、CF外,對其它條件標志位無定義調整方法:若(AL)0~3=0~9,且AF=0,則(AL)4~7=0,AFCF=0若(AL)0~3=A~F,或AF=1,則(AL)

(AL)±6,(AL)4~7=0(AH)

(AH)±1,AFCF=1(AAA做‘+’,AAS做‘-’)45乘法調整指令:AAM(AL)(AX)非壓縮BCD

注意:*隱含的操作寄存器為AL*

緊接在MUL指令之后使用*對OF、CF、AF無定義調整方法:

(AL)除以0AH,商(AH),余數(shù)(AL)除法調整指令:AAD

被除數(shù)(AX)=(0000xxxx0000xxxx)非壓縮BCD

除數(shù)=(0000xxxx)非壓縮BCD

在DIV指令之前:

(AL)20AH×(AH)+(AL) (AH)2

046例:(AX)=0504H

(BL)=03H

(1)(AL)*(BL)

MULBL;(AX)=000CHAAM

;(AH)=01H(AL)=02H(2)(AX)/(BL)

AAD;(AH)=00H(AL)=36H DIVBL;(AH)=00H(AL)=12H AAM;(AH)=01H(AL)=08H47邏輯運算指令移位指令48邏輯非指令:NOTOPR*OPR不能為立即數(shù)

執(zhí)行操作:(OPR)

(OPR)*

不影響標志位

邏輯與指令:ANDDST,SRC執(zhí)行操作:(DST)(DST)(SRC)邏輯或指令:ORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)異或指令:XORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)測試指令:TESTOPR1,OPR2

執(zhí)行操作:(OPR1)(OPR2)CFOFSFZFPFAF00**

*

無定義

根據(jù)運算結果設置49例:屏蔽AL的0、1兩位

ANDAL,0FCH例:置AL的第5位為1

ORAL,20H

例:使AL的0、1位變反

XORAL,3例:測試某些位是0是1

TESTAL,1JZEVEN

********

AND11111100******00

********

OR

00100000**1*****

********

XOR00000011

********50移位指令:邏輯左移SHLOPR,CNT邏輯右移SHROPR,CNT算術左移SALOPR,CNT(同邏輯左移)算術右移SAROPR,CNT

CF

0

0CF

CF51循環(huán)移位指令:循環(huán)左移ROLOPR,CNT循環(huán)右移ROROPR,CNT帶進位循環(huán)左移RCLOPR,CNT帶進位循環(huán)右移RCROPR,CNT

CF

CF

CF

CF52注意:

*

OPR可用立即數(shù)以外的任何尋址方式

*

CNT=1,SHLOPR,1CNT>1,MOVCL,CNTSHLOPR,CL

;以SHL為例*條件標志位:

CF=移入的數(shù)值

1CNT=1時,最高有效位的值發(fā)生變化0CNT=1時,最高有效位的值不變

移位指令:

SF、ZF、PF根據(jù)移位結果設置

AF無定義

循環(huán)移位指令:

不影響SF、ZF、PF、AFOF=53例:(AX)=0012H,(BX)=0034H,把它們裝配成(AX)=1234H

MOVCL,8ROLAX,CLADDAX,BX例:(BX)=84F0H(1)(BX)為無符號數(shù),求(BX)/2

SHRBX,1

;(BX)=4278H(2)(BX)為帶符號數(shù),求(BX)/2

SARBX,1

;(BX)=0C278H(3)把(BX)中的16位數(shù)每4位壓入堆棧00080004000F0000

(SP)

MOVCH,4;循環(huán)次數(shù)

MOVCL,4;移位次數(shù)NEXT:ROLBX,CLMOVAX,BXANDAX,0FHPUSHAXDECCHJNZNEXT54

串傳送指令

存入串指令

從串取指令

串比較指令

串掃描指令配合使用的前綴有:

REP重復

REPE/REPZ相等/為零則重復

REPNE/REPNZ不相等/不為零則重復55與REP配合工作的MOVS/STOS/LODS

REPMOVS/STOS/LODS

執(zhí)行操作:(1)如(CX)=0則退出REP,否則轉(2)(2)(CX)(CX)-1(3)執(zhí)行MOVS/STOS/LODS(4)重復(1)~(3)56MOVS串傳送指令MOVSDST,SRCMOVSB(字節(jié))MOVSW(字)例:MOVSES:BYTEPTR[DI],DS:[SI]

執(zhí)行操作:(1)((DI))←((SI))

(2)字節(jié)操作:(SI)←(SI)±1,(DI)←(DI)±1

字操作:(SI)←(SI)±2,(DI)←(DI)±2

方向標志DF=0時用+,DF=1時用-。

REPMOVS:將數(shù)據(jù)段中的整串數(shù)據(jù)傳送到附加段中。源串(數(shù)據(jù)段)→目的串(附加段)

執(zhí)行REPMOVS之前,應先做好:(1)源串首地址(末地址)→SI(2)目的串首地址(末地址)→DI(3)串長度→CX(4)建立方向標志(CLD使DF=0,STD使DF=1)57(SI)低地址高地址數(shù)據(jù)段附加段(SI)

(DI)(DI)DF=0DF=158例3.58datareasegmentmess1db‘personal_computer’datareaendsextrasegmentmess2db17dup(?)extraendscodesegment…leasi,mess1leadi,mess2movcx,17cldrepmovsb…codeendsleasi,mess1+16leadi,mess2+16movcx,17

stdrepmovsb59STOS存入串指令STOSDSTSTOSB(字節(jié))STOSW(字)執(zhí)行操作:字節(jié)操作:((DI))←(AL),(DI)←(DI)±1

字操作:((DI))←(AX),(DI)←(DI)±2

例:把附加段中的5個字節(jié)緩沖區(qū)置為20Hleadi,mess2moval,20Hmovcx,5cldrepstosb60LODS從串取指令LODSSRCLODSB(字節(jié))LODSW(字)

執(zhí)行操作:字節(jié)操作:(AL)←((SI)),(SI)←(SI)±1

字操作:(AX)←((SI)),(SI)←(SI)±2注意:*

LODS指令一般不與REP聯(lián)用*

源串必須在數(shù)據(jù)段中,目的串必須在附加段中,但源串允許使用段跨越前綴來修改。

*不影響條件標志位61與REPE/REPZ和REPNE/REPNZ配合工作的CMPS

和SCASREPE/REPZ(REPNE/REPNZ)CMPS/SCAS

執(zhí)行操作:(1)如(CX)=0或ZF=0(ZF=1)則退出,否則轉(2)(2)(CX)←(CX)-1

(3)執(zhí)行CMPS/SCAS(4)重復(1)~(3)62CMPS串比較指令

CMPSSRC,DSTCMPSB(字節(jié))CMPSW(字)

執(zhí)行操作:(1)((SI))-((DI))

根據(jù)比較結果設置條件標志位:相等ZF=1

不等ZF=0(2)字節(jié)操作:(SI)←(SI)±1,(DI)←(DI)±1

字操作:(SI)←(SI)±2,(DI)←(DI)±263SCAS串掃描指令SCASDSTSCASB(字節(jié))SCASW(字)執(zhí)行操作:字節(jié)操作:(AL)-((DI)),(DI)←(DI)±1

字操作:(AX)-((DI)),(DI)←(DI)±264例3.60從一個字符串中查找一個指定的字符messdb‘COMPUTER’leadi,messmoval,‘T’movcx,8cldrepnescasb(DI):相匹配字符的下一個地址(CX):剩下還未比較的字符個數(shù)COMPUTER(di)COMPUTER(di)65例3.61比較兩個字符串,找出它們不相匹配的位置

leasi,mess1leadi,mess2movcx,8cldrepecmpsb例:反向傳送COMPUTERCOMPUTER66

無條件轉移指令

條件轉移指令

循環(huán)指令

3.2.5控制轉移指令67無條件轉移指令JMP

段內直接短轉移:JMPSHORTOPR

執(zhí)行操作:(IP)←(IP)+8位位移量(-128~127)

例:

…...

JMPSHORTHELLO……HELLO:MOVAL,368

段內直接近轉移:JMPNEARPTROPR

執(zhí)行操作:(IP)←(IP)+16位位移量

段內間接轉移:JMPWORDPTROPR

執(zhí)行操作:(IP)←(EA)

段間直接(遠)轉移:JMPFARPTROPR

執(zhí)行操作:(IP)←OPR的段內偏移地址(CS)←OPR所在段的段地址

段間間接轉移:JMPDWORDPTROPR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論