第五章 指令系統(tǒng)_第1頁
第五章 指令系統(tǒng)_第2頁
第五章 指令系統(tǒng)_第3頁
第五章 指令系統(tǒng)_第4頁
第五章 指令系統(tǒng)_第5頁
已閱讀5頁,還剩141頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第5章86系列微型計算機的指令系統(tǒng)5.1匯編語言指令語句格式5.280x86指令(編碼)格式及尋址方式

5.38086/8088指令系統(tǒng)

難點和重點

5.1匯編語言指令語句格式MOV傳送CMP比較ADD加法OUT輸出立即數(shù)寄存器存儲器(地址信息)1.指令:讓計算機完成某種操作的命令稱為指令。2.指令系統(tǒng):指令的集合即為指令系統(tǒng)。3.指令的一般格式:[標號:]操作碼[操作數(shù)][,操作數(shù)];[注釋]

計算機中的指令由標號、操作碼字段和操作數(shù)字段組成。[]:任選項。標號字段:是一個任選字段,性質(zhì)為符號偏移量,一般用于標記跳轉(zhuǎn)指令的目的地址.在匯編過程中標號會被替換為一個16位的數(shù)值偏移量.標號必須位于語句開頭,結(jié)尾必須使用冒號。操作碼字段:也稱為指令助記符,指令助記符是必不可少的,指計算機所要執(zhí)行的操作,或稱為指出操作類型,是一種助記符。5.1匯編語言指令語句格式操作數(shù)字段:指在指令執(zhí)行操作的過程中所需要的操作數(shù)。該字段除可以是操作數(shù)本身外,也可以是操作數(shù)地址或是地址的一部分,還可以是指向操作數(shù)地址的指針或其它有關(guān)操作數(shù)的信息。注釋字段:是一個任選字段,用于說明程序片段或指令的功能,匯編過程中不處理這樣的字段,它只是用于提高源程序的可讀性.注釋必須使用分號作為開始。注釋是對該條或該段程序的解釋,可選項。

不同的計算機有不同的指令系統(tǒng),匯編語言的指令語句都與機器指令一一對應,匯編語言通過匯編程序?qū)⑵浞g成機器指令代碼(目標代碼),讓CPU執(zhí)行某種操作。5.1匯編語言指令語句格式5.28086/8088的尋址方式與數(shù)據(jù)有關(guān)的尋址方式:以MOV指令為例立即尋址MOVAX,3069H寄存器尋址MOVAL,BH直接尋址MOVAX,[2000H]寄存器間接尋址MOVAX,[BX]

寄存器相對尋址MOVAX,COUNT[SI]

基址變址尋址MOVAX,[BP][DI]相對基址變址尋址MOVAX,MASK[BX][SI]存儲器尋址(1)立即尋址方式*——操作數(shù)在指令中給出指令格式:MOVAL,5MOVAX,3064HMOVAL,‘A’*

只能用于SRC字段MOV40H,AL

*SRC和DST的字長一致

MOVAH,3064H

立即數(shù)尋址的功能立即數(shù)尋址的執(zhí)行例如:MOVAL,80H ;將8位立即數(shù)80H送入AL寄存器中。MOVAX,1234H ;將16位立即數(shù)1234H送入AX寄存器中,其中 (AH)=12H,(AL)=34H。ADDAX,3064H ;將立即數(shù)3064H與AX內(nèi)容相加,結(jié)果存入AX中,即 (AX)+3064H→(AX)。圖5.1立即數(shù)尋址方式舉例(a)MOVAL,80H;(b)MOVAX,1234H(2)寄存器尋址方式*—操作數(shù)在指定的寄存器中

MOVAX,BXMOVAL,BH*

字寄存器AX、BX、CX、DX、SI、DI、SP或BP*

字節(jié)寄存器只有AHALBHBLCHCLDHDL*SRC和DST的字長一致MOVAH,BX寄存器尋址的功能寄存器尋址的執(zhí)行INCCX ;將CX的內(nèi)容加1,即(CX)+1→(CX)。MOVAX,CX ;將CX的內(nèi)容傳送到AX寄存器中,即CX)→(AX)。圖4.6MOVAX,CX指令的尋址及執(zhí)行示意圖(3)直接尋址方式*—有效地址EA由指令直接給出

例:MOVAX,[2000H]

EA=2000H,假設(shè)(DS)=3000H,那么PA=32000H*

隱含的段為數(shù)據(jù)段DS*

可使用段跨越前綴

MOVAX,ES:[2000H]*操作數(shù)地址可由變量(符號地址)表示,但要注意VALUEDB10變量的屬性MOVAH,VALUE

MOVAX,VALUEMOVAX,WORDPTRVALUE5030

32000AHAL3050(AX)=3050H直接尋址的功能直接尋址的執(zhí)行例如MOVAL,[1064H];將有效地址EA=1064H單元中的內(nèi)容傳送到AL寄存器中。圖4.7直接尋址示意圖(4)寄存器間接尋址*—EA在基址寄存器(BX/BP)

或變址寄存器(SI/DI)中

MOVAX,[BX]PA=16d(DS)+(BX)MOVAX,ES:[BX]PA=16d(ES)+(BX)MOVAX,[BP]PA=16d(SS)+(BP)*不允許使用AX、CX、DX存放EAMOVAX,[CX]*

SRC和DST的字長一致

MOVDL,[BX];[BX]指示一個字節(jié)單元MOVDX,[BX];[BX]指示一個字單元*

適于數(shù)組、字符串、表格的處理寄存器間接尋址的功能寄存器間接尋址的執(zhí)行例如:

MOVAX,[BX];將BX中的內(nèi)容作為有效地址,對有效地址進行字的 讀操作,并傳送到AX中。

有效地址=(BX)(BP)8位(SI)16位(DI)+位移量(5)寄存器相對尋址方式*指令格式:MOVAX,COUNT[SI]或MOVAX,[COUNT+SI]

假設(shè)(DS)=3000H,(SI)=2000H,COUNT=3000H,則:PA=35000H

假設(shè)(35000H)=1234H,那么(AX)=1234H適于數(shù)組、字符串、表格的處理如果使用BP,則隱含地表示操作數(shù)存放在堆棧段中。寄存器相對尋址的功能寄存器相對尋址的執(zhí)行圖4.9寄存器相對尋址操作過程示意圖(6)基址變址尋址方式*指令格式:MOVAX,[BX][DI]MOVAX,[BX+DI]MOVAX,ES:[BX][SI]*適于數(shù)組、字符串、表格的處理*必須是一個基址寄存器和一個變址寄存器的組合

MOVAX,[BX][BP]MOVAX,[SI][DI]有效地址=(BX)(SI)(BP)(DI)+基址變址尋址的功能基址變址尋址的執(zhí)行(7)相對基址變址尋址方式

MOVAX,MASK[BX][SI]

或MOVAX,MASK[BX+SI]或MOVAX,[MASK+BX+SI]如果使用BP,則隱含地表示操作數(shù)存放在堆棧段中。

有效地址=(BX)(SI)8位(BP)(DI)16位++位移量相對基址變址尋址的功能相對基址變址尋址的執(zhí)行例如:MOVAH,[BX+DI+1234H]若DS=4000H,BX=0200H,DI=0010H,則此指令計算出的有效地址EA=1444H,操作數(shù)的物理地址為41444H,執(zhí)行本指令后將41444H單元中的內(nèi)容傳送至AH寄存器中。訪問存儲器的方式默認的段寄存器可跨越的段寄存器偏移地址取指令CS無IP堆棧操作SS無SP一般數(shù)據(jù)訪問DSCSESSS有效地址EABP作為基址的尋址SSCSDSESBP串操作的源操作數(shù)DSCSESSSSI串操作的目的操作數(shù)ES無DI段寄存器的使用規(guī)定

數(shù)據(jù)傳送指令算術(shù)指令邏輯指令串處理指令控制轉(zhuǎn)移指令處理機控制與雜項操作指令5.38086/8088指令系統(tǒng)數(shù)據(jù)傳送指令:

通用數(shù)據(jù)傳送指令MOV、PUSH、POP、XCHG累加器專用傳送指令I(lǐng)N、OUT、XLAT目標地址傳送指令LEA、LDS、LES標志寄存器傳送指令LAHF、SAHF、PUSHF、POPF類型轉(zhuǎn)換指令CBW、CWD5.3.1數(shù)據(jù)傳送類指令傳送指令:MOVDST,SRC執(zhí)行操作:(DST)(SRC)注意:

*DST、SRC不能同時為段寄存器MOVDS,ES*立即數(shù)不能直接送段寄存器

MOVDS,2000H*DST不能是立即數(shù)和CSMOVCS,AX

*DST、SRC不能同時為存儲器尋址*不影響標志位1

通用數(shù)據(jù)傳送指令表基本傳送指令MOV進棧指令:PUSHSRC執(zhí)行操作:(SP)(SP)–2((SP)+1,(SP))(SRC)

出棧指令:POPDST執(zhí)行操作:(DST)((SP)+1,(SP)) (SP)(SP)+2堆棧:‘先進后出’的存儲區(qū),段地址存放在SS中,

SP在任何時候都指向棧頂,進出棧后自動修改SP。

注意:

*堆棧操作必須以字為單位。

*不影響標志位

*不能用立即尋址方式PUSH1234H

*DST不能是CSPOPCS例:假設(shè)(AX)=2107H,執(zhí)行PUSHAX(SP)低地址高地址(SP)

07H21H低地址高地址********PUSHAX執(zhí)行前PUSHAX執(zhí)行后進棧操作:先SP減2,再內(nèi)容進棧。進棧方向例:POPBX(SP)低地址高地址(SP)07H21H低地址高地址

(BX)=2107HPOPBX執(zhí)行前POPBX執(zhí)行后********出棧方向07H21H出棧操作:先棧頂內(nèi)容出棧,再修改SP,使SP加2。(字操作)例:PUSHAXPUSHBXPUSHCX……;其間用到AX、BX、CXPOPCX;后進先出POPBXPOPAX交換指令

XCHGOPR1,OPR2執(zhí)行操作:(OPR1)(OPR2)注意:

*不影響標志位*不允許使用段寄存器 *兩操作數(shù)不能均為內(nèi)存單元例:XCHGBX,[BP+SI]XCHGAL,BH2

累加器專用傳送指令(只限使用AX或AL)

輸入指令I(lǐng)N(I/OCPU)

直接尋址:INAL,PORT(字節(jié))INAX,PORT(字)執(zhí)行操作:(AL)(PORT)(字節(jié))(AX)(PORT+1,PORT)(字)間接尋址:INAL,DX(字節(jié))INAX,DX(字)執(zhí)行操作:(AL)((DX))(字節(jié))(AX)((DX)+1,(DX))(字)

輸出指令OUT(CPUI/O)直接尋址:OUTPORT,AL(字節(jié))OUTPORT,AX(字)執(zhí)行操作:(PORT)(AL)(字節(jié))(PORT+1,PORT)(AX)(字)間接尋址:OUTDX,AL(字節(jié))OUTDX,AX(字)執(zhí)行操作:((DX))(AL)(字節(jié))((DX)+1,(DX))(AX)(字)注意:

*不影響標志位*

前256個端口號00H~FFH可直接在指令中指定(直接尋址)*如果端口號256,端口號

DX(間接尋址)例:INAX,28H;MOVDX,28H;INAX,DXMOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX例:OUT5,AL例:測試某狀態(tài)寄存器(端口號27H)的第2位是否為1INAL,27HTESTAL,00000100BJNZERROR;若第2位為1,轉(zhuǎn)ERROR處理換碼指令:將一種字節(jié)代碼轉(zhuǎn)換成另一種字節(jié)代碼XLAT或XLATOPR執(zhí)行操作:(AL)((BX)+(AL))例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLAT指令執(zhí)行后(AL)=33H注意:

*不影響標志位*字節(jié)表格(長度不超過256)

首地址(BX)*需轉(zhuǎn)換的代碼位移量(AL)(BX)30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H3.地址傳送指令

有效地址送寄存器指令:LEAREG,SRC執(zhí)行操作:(REG)SRC

指針送寄存器和DS指令:LDSREG,SRC執(zhí)行操作:(REG)(SRC)(DS)(SRC+2)

相繼二字寄存器(通常是SI)、DS

指針送寄存器和ES指令:LESREG,SRC執(zhí)行操作:(REG)(SRC)(ES)(SRC+2)

相繼二字寄存器(通常是DI)、ES例:40H00H00H30H

TABLE(DS):1000HMOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE

;(BX)=1000HLEABX,TABLE

;(BX)=1000HLDSBX,TABLE;(BX)=0040H

;(DS)=3000HLESBX,TABLE;(BX)=0040H

;(ES)=3000H注意:

*不影響標志位*REG不能是段寄存器*SRC必須為存儲器尋址方式例:LEAAX,[2728H];(AX)=2728LEACX,[BX][DI]若執(zhí)行前:(BX)=1000H,(DI)=500H則執(zhí)行后:(CX)=1000+500=1500HLDSSI,[500H]若執(zhí)行前:(DS)=2000H則執(zhí)行后:(SI)=1234H(DS)=3000HLESDI,50H[BX]若執(zhí)行前:(DS)=2000H,(BX)=200H(20250H)=0237H,(20252)=40000H則執(zhí)行后:(DI)=0237H(ES)=4000H34H12H00H30H

20500H20502H圖LEA和LDS指示執(zhí)行示意(a)LEABX,[BX+SI+jjkk]圖4.13LEA和LDS指示執(zhí)行示意(b)LDSSI,[jjkk]4.標志傳送指令圖LAHF指令的功能↓↓標志寄存器傳送指令

標志送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*影響標志位

PUSHF和POPF指令一般用在子程序和中斷處理程序的首尾,用以保存主程序標志和恢復主程序標志。有時還被用于改變陷阱標志TF的狀態(tài)。PUSHF ;將Flag各標志位壓入堆棧。POPAX ;彈出標志至AX中。ORAH,01H;TF位置“1”。PUSHAX ;修改后的標志,各位壓入堆棧。POPF ;從堆棧中彈出一個字(此時為修改后的16 位標志),送入標志寄存器。5.3.2算術(shù)運算指令

加法指令

ADD、ADC、INC

減法指令

SUB、SBB、DEC、NEG、CMP

乘法指令

MUL、IMUL

除法指令

DIV、IDIV加法指令

加法指令:ADDDST,SRC執(zhí)行操作:(DST)(SRC)+(DST)

帶進位加法指令:ADCDST,SRC執(zhí)行操作:(DST)(SRC)+(DST)+CF

加1指令:INCOPR執(zhí)行操作:(OPR)(OPR)+1注意:

*除INC指令不影響CF標志外,均對條件標志位有影響。加法指令對條件標志位的影響CF位表示無符號數(shù)相加的溢出。OF位表示帶符號數(shù)相加的溢出。1結(jié)果為負0否則SF=1結(jié)果為00否則ZF=1和的最高有效位有向高位的進位0否則CF=1兩個操作數(shù)符號相同,而結(jié)果符號與之相反0否則OF=舉例:n=8bit帶符號數(shù)(-128~127),無符號數(shù)(0~255)

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

OF=1無:9+124=133CF=0帶符號數(shù)溢出無符號數(shù)溢出00000111+11111011100000010帶:(+7)+(-5)=+2OF=0無:7+251=2

CF=1帶符號數(shù)和無符號數(shù)都溢出10000111+11110101101111100帶:(-121)+(-11)=+124

OF=1無:135+245=124

CF=1例:雙字的加法

(DX)=0002H(AX)=0F365H

(BX)=0005H(CX)=8100H指令序列

ADDAX,CX;(1)

ADCDX,BX;(2)

(1)執(zhí)行后,(AX)=7465H

CF=1OF=0SF=0ZF=0(2)執(zhí)行后,(DX)=0008HCF=0OF=0SF=0ZF=0ADD指令的常用形式還有:ADDCX,2000H ;立即數(shù)與寄存器內(nèi)容相加。ADD[BX],67H ;存儲單元與立即數(shù)相加。ADDAX,[BX+SI] ;存儲單元與寄存器內(nèi)容相加。ADDAX,BX ;寄存器之間相加。ADD[BX+6000H],AX;寄存器與“基地址加位移量”之 存儲單元內(nèi)容相加。2.減法指令減法指令: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標志外,均對條件標志位有影響。減法指令對條件標志位(CF/OF/ZF/SF)的影響:CF位表示無符號數(shù)減法的溢出。OF位表示帶符號數(shù)減法的溢出。1被減數(shù)的最高有效位有向高位的借位0否則CF=1兩個操作數(shù)符號相反,而結(jié)果的符號與減數(shù)相同0否則OF=1減法轉(zhuǎn)換為加法運算時無進位0否則CF=或NEG(取補)指令對CF/OF的影響0操作數(shù)為01否則CF=1操作數(shù)為-128(字節(jié)運算)或操作數(shù)為-32768(字運算)0否則OF=例:x、y、z均為雙精度數(shù),分別存放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲單元中,用指令序列實現(xiàn)wx+y+24-z,并用W,W+2單元存放wMOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24SUBAX,ZSBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;結(jié)果存入W,W+2單元例SUB[SI+14H],0136H;指令功能為求出目的數(shù)有效地址EA=SI+14H,將(EA)-0136H→EA。設(shè)DS=3000H,SI=0040H,則EA=0054H,目的數(shù)的物理地址為30054H,其內(nèi)容設(shè)為4336H,則此指令的結(jié)果及對標志位的影響如下所示。比較指令CMPA-B(1)兩個無符號數(shù)比較判斷方法ZF=1,A=BZF=0,CF=0則A>BCF=1則A<B(2)帶符號數(shù)比較ZF=1,A=BZF=0OF=0SF=0則A>BSF=1則A<BOF=1SF=0則A<BSF=1則A>BOF=0SF=0,OF=1SF=1A>B(OFSF=0)OF=0SF=1,OF=1SF=0A<B(OFSF=1)例:比較54與24的大小A>0,B>0解:54-24=54+(-24)[-24]補=11101000,[54]補=0011011000110110+11101000100011110OF=0,SF=0,則目的>源,即54>24例:比較112D與-64D的大小A>0,B<0解:112-(-64)=112+64=176[-64]補=11000000011100000100000010110000OF=1,SF=1,則目的>源,即120>-74例:比較24與54的大小解:24-54=24+(-54)0001100024的補碼+11001010-54的補碼11100010OF=0,SF=1,則目的<源,即24<54例:比較-64D與112D的大小A<0,B>0解:-64-112=[-64]補+[-112]補11000000=[-64]補+10010000=[-112]補101010000OF=1,SF=0,則目的<源,即-64<1123乘法指令

無符號數(shù)乘法指令:MULSRC帶符號數(shù)乘法指令:IMULSRC執(zhí)行操作:字節(jié)操作數(shù)(AX)(AL)*(SRC)字操作數(shù)(DX,AX)(AX)*(SRC)注意:

*AL(AX)為隱含的乘數(shù)寄存器。*AX(DX,AX)為隱含的乘積寄存器。*SRC不能為立即數(shù)。*除CF和OF外,對條件標志位無定義。圖4.17乘法運算的操作數(shù)及運算結(jié)果乘法指令對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=100乘積的高一半為零11否則MUL指令:CF,OF=00乘積的高一半是低一半的符號擴展11否則

IMUL指令:CF,OF=1010010101011011A5H對應原碼的絕對值再求補碼4.除法指令

無符號數(shù)除法指令:DIVSRC帶符號數(shù)除法指令:IDIVSRC執(zhí)行操作:字節(jié)操作(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余數(shù)字操作(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余數(shù)注意:

*AX(DX,AX)為隱含的被除數(shù)寄存器。*AL(AX)為隱含的商寄存器。*AH(DX)為隱含的余數(shù)寄存器。*SRC不能為立即數(shù)。*對所有條件標志位均無定義。除法運算的操作數(shù)和運算結(jié)果(a)8位源操作數(shù);(b)16位源操作數(shù)

符號擴展指令:

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)=0BA45H例:x,y,z,v均為16位帶符號數(shù),計算(v-(x*y+z–540))/xMOVAX,XIMULY;x*y→(DX,AX)MOVCX,AXMOVBX,DXMOVAX,ZCWD;Z→(DX,AX)ADDCX,AXADCBX,DX;x*y+z→(BX,CX)SUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWD;V→(DX,AX)SUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x→(AX) 余數(shù)→(DX)3.3.3邏輯運算和移位指令

邏輯運算指令

AND、OR、NOT、XOR、TEST

移位指令

SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR邏輯非指令: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ù)運算結(jié)果設(shè)置1.邏輯運算指令例:屏蔽AL的第0、1兩位

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

ORAL,20H

例:使AL的第0、1位變反

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

TESTAL,1JZEVEN

********OR00100000**1*****

******01XOR00000011

******10

********AND11111100******00********AND000000010000000*例如,傳輸ASCII碼給某臺外部設(shè)備或另一臺微型計算機時,常將其最高位作為奇/偶校驗位使用,特別在串行傳送時可以有效地判別傳輸過程是否產(chǎn)生差錯。假定7位ASCII碼已存入AL中,AL的最高位初始態(tài)為0。現(xiàn)采用偶校驗,則采用下列程序段可以完成補偶操作:ANDAL,AL;(AL)與(AL)進行與操作,僅用以影響標志位PF。JPNEXT;若PF=1,則轉(zhuǎn)至NEXT指令處若PF=0,則順序執(zhí)行。ORAL,10000000B;最高位(奇偶校驗位)補“1”,以使傳送操作數(shù)字節(jié)中1的個數(shù)為偶數(shù)。NEXT:;補偶后往下執(zhí)行程序?!壿嬤\算指令,可以通過選用不同的源操作數(shù)的各位代碼,使目的操作數(shù)的某些位置1、清0和測試目的操作數(shù)的某些位。例如:ORCL,03H ;將CL的位0、位1置1,其余位不變。ANDAL,0F5H ;將AL中的位1、位3清0,其余位不變。XORAH,0FH ;將AH中高4位不變,低4位取反。ANDDX,[BX+SI] ;DX和兩存儲單元的內(nèi)容相“與”,其內(nèi)存單元地址由 BX+SI和BX+SI+1指出,結(jié)果存在DX中。ORAX,00F0H ;AX和00F0H相“或”,結(jié)果存在AX中。XORAX,AX ;AX的內(nèi)容本身進行“異或”,結(jié)果AX清零。2.移位與循環(huán)移位指令邏輯左移SHLOPR,CNT邏輯右移SHROPR,CNT算術(shù)左移SALOPR,CNT(同邏輯左移)算術(shù)右移SAROPR,CNT

CF0

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

CFCFCF注意:

*OPR可用除立即數(shù)以外的任何尋址方式*CNT=1,SHLOPR,1CNT>1,MOVCL,CNTSHLOPR,CL;以SHL為例*條件標志位:

CF=移入的數(shù)值

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

移位指令:

SF、ZF、PF根據(jù)移位結(jié)果設(shè)置,AF無定義

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

不影響SF、ZF、PF、AFOF=圖4.17移位/循環(huán)移位指令執(zhí)行流程例:(AX)=0012H,(BX)=0034H,把它們裝配成(AX)=1234H例:(BX)=84F0H

(1)(BX)為無符號數(shù),求(BX)/2

SHRBX,1

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

SALBX,1

;(BX)=09E0H,OF=1(3)(BX)為帶符號數(shù),求(BX)/4MOVCL,2 SARBX,CL;(BX)=0E13CHMOVCL,8ROLAX,CLADDAX,BXMOVCH,4;循環(huán)次數(shù)MOVCL,4;移位次數(shù)NEXT:ROLBX,CLMOVAX,BXANDAX,0FHPUSHAXDECCHJNZNEXT00080004000F0000(SP)(3)(BX)=84F0H,把

(BX)

中的16位數(shù)每4位壓入堆棧串操作指令:

設(shè)置方向標志指令

CLD、STD

串處理指令

串重復前綴

MOVSB/MOVSWREPSTOSB/STOSWREPE/REPZLODSB/LODSWREPNE/REPNZ

CMPSB/CMPSWSCASB/SCASW

與REP配合工作的MOVS/STOS

REPMOVS/STOS執(zhí)行操作:(1)如(CX)=0則退出REP,否則轉(zhuǎn)(2)(2)(CX)(CX)-1(3)執(zhí)行MOVS/STOS(4)重復(1)~(3)MOVS串傳送指令: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)(SI)(DI)

DF=0DF=1數(shù)據(jù)段附加段(SI)(DI)

datasegmentmess1db‘personal_computer’dataendsextrasegmentmess2db17dup(?)extraendscodesegmentmovax,datamov ds,axmov ax,extramoves,ax

leasi,mess1leadi,mess2movcx,17cldrepmovsb…codeendsleasi,mess1+16leadi,mess2+16movcx,17stdrepmovsbSTOS存入串指令:STOSDSTSTOSB(字節(jié))STOSW(字)執(zhí)行操作:

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

例:把附加段中的10個字節(jié)緩沖區(qū)置為20Hleadi,mess2moval,20Hmovcx,10cldrepstosbleadi,mess2movax,2020Hmovcx,5cldrepstosw例如,若要對某一數(shù)據(jù)緩沖區(qū)清零,并設(shè)(ES)=3000H,數(shù)據(jù)緩沖區(qū)首地址DI=0200H,緩沖區(qū)長度為100個字節(jié),則可用以下的程序段:CLDMOV AX,3000H ;對段寄存器賦值。MOV ES,AXMOV DI,0200H ;數(shù)據(jù)緩沖區(qū),首地址→DI。MOV CX,100 ;數(shù)據(jù)緩沖區(qū)長度為100字節(jié)→CX。MOV AL,00 ;對100個字節(jié)數(shù)據(jù)緩沖區(qū)單元清零。REP STOSBLODS從串取指令:

LODSSRCLODSB(字節(jié))LODSW(字)執(zhí)行操作:字節(jié)操作:(AL)←((SI)),(SI)←(SI)±1字操作:(AX)←((SI)),(SI)←(SI)±2注意:*LODS指令一般不與REP聯(lián)用*源串一般在數(shù)據(jù)段中(允許使用段跨越前綴來修改),目的串必須在附加段中*不影響條件標志位例如,編制一程序段,要求將0700H單元開始的5個字節(jié)的內(nèi)容逐一裝入累加器中進行處理,處理完后,再送入0700H為首址的內(nèi)存區(qū)中。 CLD ;方向標志DF=0,地址為增量。 MOVSI,0700H ;SI的首地址。MOVDI,SI MOVCX,5 ;處理的字節(jié)數(shù)為5。LOOP1:LODSB ;取一個字節(jié)到AL中,(SI)+1→(SI)。 PUSHCX ;保留計數(shù)值。 … ;字符處理。 POPCX ;恢復計數(shù)值。 DECCX ;計數(shù)值減1。 MOV[DI],AL ;送回處理結(jié)果。 JNZLOOP1 ;如未處理完,則繼續(xù)。與REPE/REPZ(REPNE/REPNZ)配合工作的

CMPS和SCAS

REPE/REPZREPNE/REPNZ

執(zhí)行操作:(1)如(CX)=0或ZF=0(ZF=1)則退出串操作,否則轉(zhuǎn)(2)(2)(CX)←(CX)-1(3)執(zhí)行CMPS/SCAS(4)重復(1)~(3)CMPS串比較指令:

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

執(zhí)行操作:

(1)((SI))-((DI))根據(jù)比較結(jié)果置條件標志位:相等ZF=1不等ZF=0(2)字節(jié)操作:(SI)←(SI)±1,(DI)←(DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2SCAS串掃描指令:

SCASDSTSCASB(字節(jié))SCASW(字)執(zhí)行操作:

字節(jié)操作:(AL)-((DI)),(DI)←(DI)±1字操作:(AX)-((DI)),(DI)←(DI)±2例:從一個字符串中查找一個指定的字符messdb‘COMPUTER’leadi,messmoval,‘T’movcx,8cld

repnescasbCOMPUTER(di)

(di):相匹配字符的下一個地址(cx):剩下還未比較的字符個數(shù)(di)(CX)=2例:比較兩個字符串,找出它們不相匹配的位置例:反向傳送leasi,mess1leadi,mess2movcx,8cldrepecmpsbleasi,mess1+7leadi,mess2+7movcx,8STdrepmovsbCOMPUTERCOMPUTER

控制轉(zhuǎn)移類指令:

無條件轉(zhuǎn)移指令

JMP

條件轉(zhuǎn)移指令JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、JLE/JNLE、JCXZ

循環(huán)指令

LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE

子程序調(diào)用和返回指令

CALL、RET

中斷與中斷返回指令

INT、INTO、IRET無條件轉(zhuǎn)移指令:段內(nèi)直接短轉(zhuǎn)移:JMPSHORTOPR執(zhí)行操作:(IP)←(IP)+8位位移量段內(nèi)直接近轉(zhuǎn)移:JMPNEARPTROPR執(zhí)行操作:(IP)←(IP)+16位位移量段內(nèi)間接轉(zhuǎn)移:JMPWORDPTROPR執(zhí)行操作:(IP)←(EA)段間直接遠轉(zhuǎn)移:JMPFARPTROPR執(zhí)行操作:(IP)←OPR的段內(nèi)偏移地址(CS)←OPR所在段的段地址段間間接轉(zhuǎn)移:JMPDWORDPTROPR執(zhí)行操作:(IP)←(EA)

(CS)←(EA+2)條件轉(zhuǎn)移指令:注意:只能使用段內(nèi)直接尋址的8位位移量(1)根據(jù)單個條件標志的設(shè)置情況轉(zhuǎn)移

格式

測試條件JZ(JE)OPRZF=1JNZ(JNE)OPRZF=0JSOPRSF=1JNSOPRSF=0JOOPROF=1JNOOPROF=0JPOPRPF=1JNPOPRPF=0JCOPRCF=1JNCOPRCF=0(2)比較兩個無符號數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移*

格式

測試條件

<JB(JNAE,JC)OPRCF=1≥JNB(JAE,JNC)OPRCF=0≤

JBE(JNA)OPRCF∨ZF=1>JNBE(JA)OPRCF∨ZF=0*

適用于地址或雙精度數(shù)低位字的比較(3)比較兩個帶符號數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移*

格式

測試條件

<JL(JNGE)OPRSFOF=1

≥JNL(JGE)OPRSFOF=0

≤JLE(JNG)OPR(SFOF)∨ZF=1>JNLE(JG)OPR(SFOF)∨ZF=0*

適用于帶符號數(shù)的比較(4)測試CX的值為0則轉(zhuǎn)移

格式測試條件

JCXZOPR(CX)=0例:如果X>50,轉(zhuǎn)到TOO_HIGH;否則|X-Y|→RESULT,如果溢出轉(zhuǎn)到OVERFLOW,

JGJOJNS

MOVAX,XCMPAX,50TOO_HIGHSUBAX,YOVERFLOWNONNEGNEGAXNONNEG:MOVRESULT,AXTOO_HIGH:……OVERFLOW:……例:、是雙精度數(shù),分別存于DX,AX及BX,CX中,

>時轉(zhuǎn)L1,否則轉(zhuǎn)L2

CMPDX,BXJGL1JLL2CMPAX,CXJAL1L2:……L1:……例設(shè)有10個數(shù)據(jù)存放在以2000H單元為首地址的數(shù)據(jù)緩沖區(qū)中,試編出要求找出其中的最大的數(shù),并存入2100H單元的程序。解:

MAXSTA:MOVBX,2000H ;首址2000H→BX中。MOVAL,[BX] ;取第一

溫馨提示

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

評論

0/150

提交評論