匯編語言各種指令的解釋與用法_第1頁
匯編語言各種指令的解釋與用法_第2頁
匯編語言各種指令的解釋與用法_第3頁
匯編語言各種指令的解釋與用法_第4頁
匯編語言各種指令的解釋與用法_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

【數(shù)據(jù)傳輸指令】一、通用數(shù)據(jù)傳送指令1、傳送指令MOV(move)

指令的匯編格式:MOVDST,SRC

指令的根本功能:(DST)<-(SRC)將原操作數(shù)(字節(jié)或字)傳送到目的地址。

指令支持的尋址方式:目的操作數(shù)和源操作數(shù)不能同時用存儲器尋址方式,這個限制適用于所有指令。指令的執(zhí)行對標志位的影響:不影響標志位。

指令的特殊要求:目的操作數(shù)DST和源操作數(shù)SRC不允許同時為段存放器;

目的操作數(shù)DST不能是CS,也不能用立即數(shù)方式。

2、進棧指令PUSH(pushontothestack)

出棧指令POP(popfromthestack)

指令的匯編格式:PUSHSRC;POPDST

指令的根本功能:PUSH指令在程序中常用來暫存某些數(shù)據(jù),而POP指令又可將這些數(shù)據(jù)恢復。PUSHSRC(SP)<-(SP)-2;(SP)<-(SRC)

POPDST(DST)<-((SP));(SP)<-(SP)

指令支持的尋址方式:push和pop指令不能不能使用立即數(shù)尋址方式。

指令對標志位的影響:PUSH和POP指令都不影響標志位。

指令的特殊要求:PUSH和POP指令只能是字操作,因此,存取字數(shù)據(jù)后,SP的修改必須是+2或者-2;POP指令的DST不允許是CS存放器;

3、交換指令XCHG(exchange)

指令的匯編格式:XCHGOPR1,OPR2

指令的根本功能:(OPR1)<->(OPR2)

指令支持的尋址方式:一個操作數(shù)必須在存放器中,另一個操作數(shù)可以在存放器或存儲器中。

指令對標志位的影戲:不影響標志位。

指令的特殊要求:不允許使用段存放器。

二、累加器專用傳送指令4、輸入指令IN(input)

輸出指令OUT(output)

指令的匯編格式:INac,portport<=0FFH

INac,DXport>0FFH

OUTport,acport<=0FFH

OUTDX,acport>0FFH

指令的根本功能:對8086及其后繼機型的微處理機,所有I/O端口與CPU之間的通信都由輸入輸出指令IN和OUT來完成。IN指令將信息從I/O輸入到CPU,OUT指令將信息從CPU輸出到I/O端口,因此,IN和OUT指令都要指出I/O端口地址。

INac,portport<=0FFH(AL)<-(port)傳送字節(jié)或(AX)<-(port+1,port)傳送字

INac,DXport>0FFH(AL)<-((DX))傳送字節(jié)或(AX)<-((DX)+1,(DX))傳送字

OUTport,acport<=0FFH(port)<-(AL)傳送字節(jié)或(port+1,port)<-(AX)傳送字

OUTDX,acport>0FFH(DX)<-(AL)傳送字節(jié)或((DX)+1,(DX))<-(AX)傳送字

指令對標志位的影響:不影響標志位。指令的特殊要求:只限于在AL或AX與I/O端口之間傳送信息。傳送16位信息用AX,傳送8位信息用AL,這取決于外設端口的寬度。

5、換碼指令XLAT(translate)

指令的匯編格式:XLATopr或XLAT

指令的根本功能:這條指令根據(jù)AL存放器提供的位移量,將BX指使的字節(jié)表格中的代碼換存在AL中。(AL)<-((DS)*16+(BX)+(AL))

指令對標志位的影響:不影響標志位。

指令的特殊要求:所建字節(jié)表格的長度不能超過256字節(jié),因為存放位移量的是8位存放器AL。opr為表格的首地址,因為opr所表示的偏移地址已存入BX存放器,所以opr在換碼指令中可有可無,有那么提高程序的可讀性。

三、地址傳送指令

6、有效地址傳送器LEA(loadeffectiveaddress)

指令的匯編格式:LEAreg,src

指令的根本功能:LEA指令把源操作數(shù)的有效地址送到指定的存放器,這個有效地址是由src選定的一種存儲器尋址方式確定的。

指令支持的尋址方式:各種存儲器尋址方式。

指令對標志位的影響:不影響標志位。

指令的特出要求:指令中reg不能是段存放器;

7、指針送存放器和DSLDS(loadDSwithpoint)

指針送存放器和ESLES(loadESwithpoint)

指令的匯編格式:LDSreg,srcLESreg,src

指令的根本功能:LDS和LES指令把確定內存單元位置的偏移地址送存放器,段地址DS或ES。這個偏移地址和段地址〔也稱地址指針〕是由src指定的兩個相繼字單元提供的。

LDSreg,src(reg)<-(src)(DS)<-(src+2)

LESreg,src(reg)<-(src)(ES)<-(src+2)

指令支持的尋址方式:src必須為存儲器尋址方式

指令對標志位的影響:不影響標志位。

指令的特殊要求:指令中REG不能是段存放器;

四、標志存放器傳送指令8、標志存放器的低字節(jié)送AHLAHF(loadAHwithFLAGS)

指令的匯編格式:LAHF

指令的根本功能:(AH)<-(FLAGS)0-7

指令對標志位的影響:不影響標志位

9、AH送標志存放器低字節(jié)SAHF(storeAHintoFLAGS)

指令的格式:SAHF

指令的根本功能:(FLAGS)0-7<-(AH)

指令對標志位的影響:由裝入值來確定標志位的值。

10、標志進棧PUSHF(pushtheflags)

指令的匯編格式:PUSHF

指令的根本功能:(SP)<-(SP)-2((SP)+1,(SP))<-(FLAGS)0-15

指令對標志位的影響:不影響標志位。

11、標志出棧POPF(poptheFLAGES)

指令的匯編格式:POPF

指令的根本功能:(FLAGS)0-15<-((SP)+1,(SP))(SP)<-(SP)+2

指令對標志位的影響:由裝入值來確定標志位的值。【算術指令】

一、加法指令

12、加法指令ADD(addition)

指令的匯編格式:adddst,src

指令的根本功能:(dst)<-(src)+(dst)

指令支持的尋址方式:他們兩個操作數(shù)不能同時為存儲器尋址。即為除源操作數(shù)為立即數(shù)的情況外,源操作數(shù)和目地操作數(shù)必須有一個存放器尋址方式。

指令對標志位的影響:SF=1加法結果為負數(shù)〔符號位為1〕

SF=0加法結果為正數(shù)〔符號位為0〕

ZF=1加法結果為零

ZF=0加法結果不為零

CF=1最高有效位向高位有進位

CF=0最高有效位向高位無進位

OF=1兩個同符號數(shù)相加〔正數(shù)+正數(shù)或負數(shù)+負數(shù)〕,結果符號與其相反。

OF=0兩個不同符號數(shù)相加,或同符號數(shù)相加,結果符號與其相同。

13、帶進為加法指令ADC(addwithcarry)

指令的匯編格式:ADDdst,src

指令的根本功能:(dst)<-(src)+(dst)+CF

指令支持的尋址方式:他們兩個操作數(shù)不能同時為存儲器尋址。即為除源操作數(shù)為立即數(shù)的情況外,源操作數(shù)和目地操作數(shù)必須有一個存放器尋址方式。

指令對標志位的影響:SF=1加法結果為負數(shù)

SF=0加法結果為正數(shù)

ZF=1加法結果為零

ZF=0加法結果不為零

CF=1最高有效位向高位有進位

CF=0最低有效位相高位無進位

OF=1兩個同符號數(shù)相加,結果符號與其相反,

OF=0兩個同符號數(shù)相加,或同符號相加,結果符號與其相同

14、加1指令INC(increament)

指令的匯編格式:INCopr

指令的根本功能:(opr)<-(opr)

指令支持的尋址方式可以使用除立即數(shù)方式外的任何尋址方式

指令對標志位的影響:SF=1加法結果為負數(shù)

SF=0加法結果為正數(shù)

ZF=1加法結果為零

ZF=0加法結果不為零

OF=1兩個同符號數(shù)相加,結果符號與其相反,

OF=0兩個同符號數(shù)相加,或同符號相加,結果符號與其相同。

二、減法指令

15、減法指令SUB(subtract)

指令的匯編格式:SUBdst,src

指令的根本功能:(dst)<-(dst)-(src)

指令支持的尋址方式:他們兩個操作數(shù)不能同時為存儲器尋址。即為除源操作數(shù)為立即數(shù)的情況外,源操作數(shù)和目地操作數(shù)必須有一個存放器尋址方式。

指令對標志位的影響:SF=1減法結果為負數(shù)〔符號位為1〕

SF=0減法結果為正數(shù)〔符號位為0〕

ZF=1減法結果為零

ZF=0減法結果不為零

CF=1二進制減法運算中最高有效位向高位有借位〔被減數(shù)小于減數(shù),不夠減的情況〕

CF=0二進制減法運算中最高有效為向高位無借位〔被減數(shù)〉=減數(shù),夠減的情況〕

OF=1兩數(shù)符號相反〔正數(shù)-負數(shù),或負數(shù)-正數(shù)〕,而結果符號與減數(shù)相同。

OF=0同符號數(shù)相減時,或不同符號數(shù)相減,其結果符號與減數(shù)不同。

16、帶借位減法指令SBB(subtractwithborrow)

指令的匯編格式:SBBdst,src

指令的根本功能:(dst)<-(dst)-(src)-CF

指令支持的尋址方式:他們兩個操作數(shù)不能同時為存儲器尋址。即為除源操作數(shù)為立即數(shù)的情況外,源操作數(shù)和目地操作數(shù)必須有一個存放器尋址方式。

指令對標志位的影響:SF=1減法結果為負數(shù)〔符號位為1〕

SF=0減法結果為正數(shù)〔符號位為0〕

ZF=1減法結果為零

ZF=0減法結果不為零

CF=1二進制減法運算中最高有效位向高位有借位〔被減數(shù)小于減數(shù),不夠減的情況〕

CF=0二進制減法運算中最高有效為向高位無借位〔被減數(shù)〉=減數(shù),夠減的情況〕

OF=1兩數(shù)符號相反〔正數(shù)-負數(shù),或負數(shù)-正數(shù)〕,而結果符號與減數(shù)相同。

OF=0同符號數(shù)相減時,或不同符號數(shù)相減,其結果符號與減數(shù)不同。

17、減1指令DEC(decrement)

指令的匯編格式:DECopr

指令的根本功能:(opr)<-(opr)-1

指令支持的尋址方式:可以使用除立即數(shù)方式外的任何尋址方式。

指令對標志位的影響:SF=1減法結果為負數(shù)〔符號位為1〕

SF=0減法結果為正數(shù)〔符號位為0〕

ZF=1減法結果為零

ZF=0減法結果不為零

OF=1兩數(shù)符號相反〔正數(shù)-負數(shù),或負數(shù)-正數(shù)〕,而結果符號與減數(shù)相同。

OF=0同符號數(shù)相減時,或不同符號數(shù)相減,其結果符號與減數(shù)不同。

18、比擬指令CMP(compare)

指令的匯編格式:CMPopr1,opr2

指令的根本功能:(opr1)-(opr2),根據(jù)相減結果設置條件碼,但不回送結果。

指令支持的尋址方式:他們兩個操作數(shù)不能同時為存儲器尋址。即為除源操作數(shù)為立即數(shù)的情況外,源操作數(shù)和目地操作數(shù)必須有一個存放器尋址方式。

指令對標志位的影響:SF=1減法結果為負數(shù)〔符號位為1〕

SF=0減法結果為正數(shù)〔符號位為0〕

ZF=1減法結果為零

ZF=0減法結果不為零

CF=1二進制減法運算中最高有效位向高位有借位〔被減數(shù)小于減數(shù),不夠減的情況〕

CF=0二進制減法運算中最高有效為向高位無借位〔被減數(shù)〉=減數(shù),夠減的情況〕

OF=1兩數(shù)符號相反〔正數(shù)-負數(shù),或負數(shù)-正數(shù)〕,而結果符號與減數(shù)相同。

OF=0同符號數(shù)相減時,或不同符號數(shù)相減,其結果符號與減數(shù)不同。

19、求補指令NEG(negate)

指令的匯編格式:NEGopr

指令的根本功能:(opr)<--(opr)

指令支持的尋址方式:可以使用除立即數(shù)方式外的任何尋址方式。

指令對標志位的影響:CF=1不為0的操作數(shù)求補時

CF=0為0的操作數(shù)求補時

OF=1操作數(shù)為-128〔字節(jié)運算〕或操作數(shù)為-32768〔字運算〕

OF=0當求補運算的操作數(shù)不為-128〔字節(jié)〕或-32768〔字〕時三、乘法指令

20、無符號乘法指令NUL(unsignedmultiple)

有符號乘法指令IMUL(signedmuliple)

指令的匯編格式:NULsrcIMULsrc

指令的根本功能:(AX)<-(AL)*(src)(DX,AX)<-(AX)*(src)

指令支持的尋址方式:src可以使用除立即數(shù)方式以外的任一種尋址方式。

指令對標志位的影響:乘法指令只影響標志位CF和OF,其他條件碼位無定義。

MUL指令的條件碼設置為:

CFOF=00乘積的高一半為0〔字節(jié)操作的〔AH〕或字操作的〔DX〕〕

CFOF=11乘積的高一半不為0

IMUL指令的條件碼設置為:

CFOF=00乘積的高一半為低一半的符號擴展.

CFOF=11其他情況

指令的特殊要求:MUL和IMUL指令的區(qū)別僅在于操作數(shù)是無符號還是帶符號數(shù),它們的共同點是,指令中只給出源操作數(shù)src,目的操作數(shù)是隱含的,它只能是累加器〔字運算為AX,字節(jié)運算為AL〕。隱含的乘積存放器是AX或DX〔高位〕和AX〔低位〕。

四、符號擴展指令21、節(jié)擴展為字CBW(convertbytetoword)

指令的匯編格式:CBW

指令的根本功能:(AH)=00H當(AL)的最高有效位為0時

(AH)=FFH當(AL)的最高有效位為1時

指令對標志位的影響:不影響標志位

指令的特殊要求:這是條無操作數(shù)的指令,進行符號擴展的操作數(shù)必須存放在AL存放器AX存放器中。

22、字擴展為雙字CWD(convertwordtodoubleword)

指令的匯編格式:CWD

指令的根本功能:(DX)=0000H當(AX)的最高有效位為0時

(DX)=FFFFH當(AX)的最高有效位為1時

指令對標志位的影響:不影響標志位

指令的特殊要求:這是條無操作數(shù)的指令,進行符號擴展的操作數(shù)必須存放在AL存放器或AX存放器中。

五、除法指令

23、無符號數(shù)除法DIV(unsigneddivide)

帶符號數(shù)除法IDIV(singeddivide)

指令的匯編格式:DIVsrcIDIVsrc

指令的根本功能:字操作

(AL)<-(AX)/src的商(AH)<-(AX)/src的余數(shù)

字節(jié)操作

(AX)<-(DX,AX)/src的商(DX)<-(DX,AX)/src的余數(shù)

指令支持的尋址方式:src作為除數(shù),可用除立即數(shù)以外的任一種尋址方式來取得。

指令對標志位的影響:不影響條件碼。

指令的特殊要求:除法指令要求字操作時,被除數(shù)必須為32位,除數(shù)是16位,商和余數(shù)是16位的;字節(jié)操作時,被除數(shù)必須為16位,除數(shù)是8位,得到的商和余數(shù)是8位的。六、十進制調整指令【邏輯指令】一、邏輯運算

指令的格式:ANDdst,src

指令的根本功能:(dst)<-(dst)與(src)

指令支持的尋址方式:兩個操作數(shù)不能同時為存儲器尋址。即為除源操作數(shù)為立即數(shù)的情況外,源操作數(shù)和目地操作數(shù)必須有一個存放器尋址方式。

指令對標志位的影響:指令執(zhí)行后CF和OF置零,AF無定義。

SF=1指令執(zhí)行后的結果為負數(shù)〔符號位為1〕

SF=0指令執(zhí)行后的結果為正數(shù)〔符號位為0〕

ZF=1指令執(zhí)行后的結果為零

ZF=0指令執(zhí)行后的結果不為零

PF=1結果操作數(shù)中1的個數(shù)為偶數(shù)時置1

PF=0結果操作數(shù)中1的個數(shù)為奇數(shù)時置0

25、邏輯或OR(logicor)

指令的匯編格式:ORdst,src

指令的根本功能:(dst)<-(dst)或(src)

指令支持的尋址方式:兩個操作數(shù)不能同時為存儲器尋址。即為除源操作數(shù)為立即數(shù)的情況外,原操作數(shù)和目的操作數(shù)必須有一個存放器尋址方式。

指令對標志位的影響:令執(zhí)行后CF和OF置零,AF無定義。

SF=1指令執(zhí)行后的結果為負數(shù)〔符號位為1〕

SF=0指令執(zhí)行后的結果為正數(shù)〔符號位為0〕

ZF=1指令執(zhí)行后的結果為零

ZF=0指令執(zhí)行后的結果不為零

PF=1結果操作數(shù)中1的個數(shù)為偶數(shù)時置1

PF=0結果操作數(shù)中1的個數(shù)為奇數(shù)時置0

26、邏輯非NOT(logicnot)

指令的匯編格式:NOTorc

指令的根本功能:(dst)<-(opr)

指令支持的尋址方式:除立即數(shù)尋址方式以外的其余尋址方式

指令對標志位的影響:對標志位無影響

27、異或XOR(exclusiceor)

指令的匯編格式:XORdst,src

指令的根本功能:(dst)<-(dst)異或(src)

指令支持的尋址方式:兩個操作數(shù)不能同時為存儲器尋址。即為除源操作數(shù)為立即數(shù)的情況外,原操作數(shù)和目的操作數(shù)必須有一個存放器尋址方式。

指令對標志位的影響:令執(zhí)行后CF和OF置零,AF無定義。

SF=1指令執(zhí)行后的結果為負數(shù)〔符號位為1〕

SF=0指令執(zhí)行后的結果為正數(shù)〔符號位為0〕

ZF=1指令執(zhí)行后的結果為零

ZF=0指令執(zhí)行后的結果不為零

PF=1結果操作數(shù)中1的個數(shù)為偶數(shù)時置1

PF=0結果操作數(shù)中1的個數(shù)為奇數(shù)時置0

28、測試指令TEST指令的匯編格式:TESTopr1,opr2

指令的根本功能:(opr1)與(opr2)

指令支持的尋址方式:兩個操作數(shù)不能同時為存儲器尋址,即為除源操作數(shù)為立即數(shù)的情況外,源操作數(shù)和目的操作數(shù)必須有一個存放器尋址方式。

指令對標志位的影響:令執(zhí)行后CF和OF置零,AF無定義。

SF=1指令執(zhí)行后的結果為負數(shù)〔符號位為1〕

SF=0指令執(zhí)行后的結果為正數(shù)〔符號位為0〕

ZF=1指令執(zhí)行后的結果為零

ZF=0指令執(zhí)行后的結果不為零

PF=1結果操作數(shù)中1的個數(shù)為偶數(shù)時置1

PF=0結果操作數(shù)中1的個數(shù)為奇數(shù)時置0

二、移位指令

29、邏輯左移SHL(shiftlogicalleft)

指令的匯編格式:SHLdst,cnt

指令的根本功能:SHL指令向左逐位移動cnt次,每次逐位移動后,最低位用0來補充,最高位移入CF。

指令支持的尋址方式:目的操作數(shù)dst可以是除立即數(shù)外的任何尋址方式。移位次數(shù)〔或位數(shù)〕cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL存放器中。

指令對標志位的影響:CF=移入的數(shù)值

OF=1當cnt=1時,移動后最高位的值發(fā)生變化。

OF=0當cnt=1時,移動時最高位的值未發(fā)生變化。

SF、ZF、PF根據(jù)移動后的結果設置30、邏輯右移SHR(shiftlogicalright)

指令的匯編格式:SHRdst,cnt

指令的根本功能:SHR指令向右逐位移動cnt次,每次逐位移動后,最高位用0來補充,最低位移入CF。

指令支持的尋址方式:目的操作數(shù)dst可以是除立即數(shù)外的任何尋址方式。移位次數(shù)〔或位數(shù)〕cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL存放器中。

指令對標志位的影響:CF=移入的數(shù)值

OF=1當cnt=1時,移動后最高位的值發(fā)生變化。

OF=0當cnt=1時,移動時最高位的值未發(fā)生變化。

SF、ZF、PF根據(jù)移動后的結果設置。

31、算術左移SAL(shiftarithmeticleft)

指令的匯編格式:SALdstcnt

指令的根本功能:SAL指令向左逐位移動cnt次,每次逐位移動后,最低位用0來補充,最高位移入CF。

指令支持的尋址方式:目的操作數(shù)dst可以是除立即數(shù)外的任何尋址方式。移位次數(shù)〔或位數(shù)〕cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL存放器中。

指令對標志位的影響:CF=移入的數(shù)值

OF=1當cnt=1時,移動后最高位的值發(fā)生變化。

OF=0當cnt=1時,移動時最高位的值未發(fā)生變化。

SF、ZF、PF根據(jù)移動后的結果設置。

32、算術右移SAR(shiftarithmeticright)

指令的匯編格式:SARdst,cnt

指令的根本功能:SAR指令向右逐位移動cnt次,每次逐位移動后,最高位用符號位來補充,最低位移入CF。

指令支持的尋址方式:目的操作數(shù)dst可以是除立即數(shù)外的任何尋址方式。移位次數(shù)〔或位數(shù)〕cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL存放器中。

指令對標志位的影響:CF=移入的數(shù)值

OF=1當cnt=1時,移動后最高位的值發(fā)生變化。

OF=0當cnt=1時,移動時最高位的值未發(fā)生變化。

SF、ZF、PF根據(jù)移動后的結果設置。

33、循環(huán)左移ROL(rotateleft)

指令的匯編格式:ROLdst,cnt

指令的根本功能:ROL對由dst指定的存放器或存儲器操作數(shù)左移循環(huán)移動cnt所指定的次數(shù),每左移一次,把最高位同時移入CF和操作數(shù)最低位。

指令支持的尋址方式:目的操作數(shù)dst可以是除立即數(shù)外的任何尋址方式。移動次數(shù)〔或位數(shù)〕cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL存放器中。

指令對標志位的影響:CF=移入的數(shù)值

OF=1當cnt=1時,移動后最高位的值發(fā)生變化。

OF=0當cnt=1時,移動時最高位的值未發(fā)生變化。

SF、ZF、PF根據(jù)移動后的結果設置。

34、循環(huán)右移ROR(rotateright)

指令的匯編格式:RORdst,cnt

指令的根本功能:ROR對由dst指定的存放器或存儲器操作數(shù)右移循環(huán)移動cnt所指定的次數(shù),每右移一次,把最低位同時移入CF和操作數(shù)最高位。

指令支持的尋址方式:目的操作數(shù)dst可以是除立即數(shù)外的任何尋址方式。移動次數(shù)〔或位數(shù)〕cnt=1時,1可以直接寫在指令中,cnt>1時,cnt必須放入CL存放器中。

指令對標志位的影響:CF=移入的數(shù)值

OF=1當cnt=1時,移動后最高位的值發(fā)生變化。

OF=0當cnt=1時,移動時最高位的值未發(fā)生變化。

SF、ZF、PF根據(jù)移動后的結果設置。

35、帶進位的循環(huán)左移RCL(rotateleftthroughcarry)

指令的匯編格式:RCLdst,cnt

指令的根本功能:RCL對由dst指定的存放器或存儲器操作數(shù),連同進位標志CF左循環(huán)移動,m所指定的次數(shù),每左移一次,把操作數(shù)的最高位移入CF,而CF中原有內容移入操作數(shù)的最低位。

指定支持的尋址方式:目的操作數(shù)dst可以是除立即數(shù)外的任何尋址方式。移動次數(shù)〔或位數(shù)〕cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL存放器中。

指令對標志位的影響:CF=移入的數(shù)值。

OF=1當cnt=1時,移動后最高位的值未發(fā)生變化。

OF=0當cnt=1時,移動后最高位的值發(fā)生變化。

SF、ZF、PF標志位不受影響。

36、帶進位的循環(huán)右移RCR(rotaterightthroughcarry)

指令的匯編格式:RCRdst,cnt

指令的根本功能:RCR對由dst指定的存放器或存儲器操作數(shù),連同進位標志CF右循環(huán)移動,m所指定的次數(shù),每右移一次,把操作數(shù)的最上下位移入CF,而CF中原有內容移入操作數(shù)的最高位。

指令支持的尋址方式:目的操作數(shù)dst可以是除立即數(shù)外的任何尋址方式。移動次數(shù)〔或位數(shù)〕cnt=1時,1可以直接寫入指令中,cnt〉1時,cnt必須放入CL存放器中。

指令對標志位的影響:CF=移入的數(shù)值。

OF=1當cnt=1時,操作數(shù)最高位的值未發(fā)生變化。

OF=0當cnt=1時,操作數(shù)最高位的值發(fā)生變化。

SF、ZF、PF標志位不受影響?!敬幚碇噶睢?/p>

一、設置方向標志指令

37、DF置零CLD(cleardirectionflag)

DF置一STD(setdirectionflag)

指令的匯編格式:CLD

STD

指令的根本功能:CLDDF=0

STDDF=1

二、串處理指令

38、串傳送MOVSB/MOVSW(movestringbyte/word)

指令的匯編格式:MOVSB

MOVSW

指令的根本功能:(ES:DI)<-(DS:SI)

(SI)<-(SI)+/-1(字節(jié))或+/-2(字)

(DI)<-(DI)+/-1(字節(jié))或+/-2(字)

指令對條件碼的影響:不影響條件碼。

指令的特殊要求:源串必須在數(shù)據(jù)段中,目的串必須在附加段中,串處理指令隱含的尋址方式是SI和DI存放器的間接尋址方式。源串允許使用段跨越前綴來指定段。

39、存串STOSB/STOSW(stroefromstringbyte/word)

指令的匯編格式:STOSB

STOSW

指令的根本功能:(ES:DI)<-(AL)或(AX)

(DI)<-(DI)+/-1(字節(jié))或+/-2(字)

指令對條件碼的影響:不影響條件碼。

指令的特殊要求:源串必須在數(shù)據(jù)段中,目的串必須在附加段中,串處理指令隱含的尋址方式是SI和DI存放器的間接尋址方式。源串允許使用段跨越前綴來指定段。

40、取串LODSB/LODSW(loadfromstringbyte/word)

指令的匯編格式:LODSB

LODSW

指令的根本功能:(AL)或(AX)<-(DS:SI)

(SI)<-(SI)+/-1(字節(jié))或+/-2(字)

指令對條件碼的影響:不影響條件碼。

指令的特殊要求:源串必須在數(shù)據(jù)段中,目的串必須在附加段中,串處理指令隱含的尋址方式是SI和DI存放器的間接尋址方式。源串允許使用段跨越前綴來指定段。

41、串比擬CMPSB/CMPSW(comparestringbyte/word)

指令的匯編格式:CMPSB

CMPSW

指令的根本功能:(DS:SI)-(ES:DI)根據(jù)比擬結果設置條件碼

(SI)<-(SI)+/-1(字節(jié))或+/-2(字)

(DI)<-(DI)+/-1(字節(jié))或+/-2(字)

指令對條件碼的影響:SF=1減法結果為負數(shù)〔符號位為1〕

SF=0減法結果為正數(shù)〔符號位為0〕

ZF=1減法結果為零

ZF=0減法結果不為零

CF=1二進制減法運算中最高有效位向高位有借位〔被減數(shù)小于減數(shù),不夠減的情況〕

CF=0二進制減法運算中最高有效為向高位無借位〔被減數(shù)〉=減數(shù),夠減的情況〕

OF=1兩數(shù)符號相反〔正數(shù)-負數(shù),或負數(shù)-正數(shù)〕,而結果符號與減數(shù)相同。

OF=0同符號數(shù)相減時,或不同符號數(shù)相減,其結果符號與減數(shù)不同。

42、串掃描SCASB/SCASW(scanstringbyte/word)

指令的格式:SCASB

SCASW

指令的根本功能:(AL)<-(ES:DI)或(AX)<-(ES:DI)根據(jù)掃描比擬的結果設置條件碼。

(DI)<-(DI)+/-1(字節(jié))或+/-2(字)

指令對條件碼的影響:SF=1結果為負數(shù)〔符號位為1〕

SF=0結果為正數(shù)〔符號位為0〕

ZF=1結果為零

ZF=0結果不為零

CF=1二進制減法運算中最高有效位向高位有借位〔被減數(shù)小于減數(shù),不夠減的情況〕

CF=0二進制減法運算中最高有效為向高位無借位〔被減數(shù)〉=減數(shù),夠減的情況〕

OF=1兩數(shù)符號相反〔正數(shù)-負數(shù),或負數(shù)-正數(shù)〕,而結果符號與減數(shù)相同。

OF=0同符號數(shù)相減時,或不同符號數(shù)相減,其結果符號與減數(shù)不同。

三、串重復前綴

43、重復執(zhí)行串REP

指令的匯編格式:REP(CX)=重復次數(shù)

指令的根本功能:①(CX)=0時,串指令執(zhí)行完畢,否那么執(zhí)行②~④

②(CX)←(CX)-1③執(zhí)行串指令〔MOVS或STOS〕④重復執(zhí)行①

44、相等/為零時重復執(zhí)行串指令REPE/REPZ

指令的匯編格式:REPE/REPZ(CX)=比擬/掃描的次數(shù)

指令的根本功能:①(CX)=0或ZF=0時,結束執(zhí)行串指令,否那么繼續(xù)②~④

②(CX)←(CX)-1③執(zhí)行串指令〔CMPS或SCAS〕④重復執(zhí)行①

45、不等/不為零時重復執(zhí)行串指令REPNE/PEPNZ

指令的匯編格式:REPNE/PEPNZ(CX)=比擬/掃描的次數(shù)

指令的根本功能:①(CX)=0或ZF=1,結束執(zhí)行串指令,否那么繼續(xù)②~④

②(CX)←(CX)-1③執(zhí)行串指令〔CMPS或SCAS〕④重復執(zhí)行①【控制轉移指令】

一、無條件轉移指令

46、短轉移JMPSHORTlabel(shortjump)

指令的匯編格式:JMPSHORTlabel

指令的根本功能:(IP)<-當前(IP)+8位位移量8位位移量是匯編程序在匯編源程序時,根據(jù)目標地址和當前IP之間的距離自動生成的。

指令對條件碼的影響:對標志位無影響。

47、近轉移JMPNEARPTRlabel(nearjump)

指令的匯編格式:直接轉移JMPlabel(directjump)

存放器間接轉移JMPreg(registerindirectjump)

存儲器間接轉移JMPWORDPTROPR(memoryindirectjump)

指令的根本功能:JMPlabel(IP)<-OFFSETlabel=(IP)當前+16位位移量

JMPreg(IP)<-(reg)

JMPWORDPTROPR(IP)<-(PA+1,PA)

指令支持的尋址方式:指令中的轉向地址可以是直接尋址方式、存放器尋址方式、存放器間接尋址方式和存儲器尋址方式。

指令對條件碼的影響:對標志位無影響。

48、遠轉移JMPFARPTRlabel(forjump)

指令的匯編格式:JMPFARPTRlabel

指令的根本功能:(IP)<-label的段內偏移地址(CS)<-label所在段的段地址

指令支持的尋址方式:遠轉移的目的地址可以使用除立即尋址方式外的任何尋址方式來表示。指令對條件碼的影響:對標志位無影響。

二、條件轉移指令

指令的匯編格式及功能

根據(jù)條件碼的值轉移:

49、JZ(JE)OPRZF=1

ZF=0〔運算結果為0,ZF就置1〕

50、JNZ(JNE)OPRZF=0

51、JSOPRSF=1

SF=0〔二進制最高位是什么,SF就是什么,如最高位為1那么SF=1〕

52、JNSOPRSF=0

53、JOOPROF=1

OF=1(兩個負數(shù)相加變成正數(shù),溢出〕

54、JNOOPROF=0

55、JPOPRPF=1

PF=0(反映結果“1”的個數(shù),奇數(shù)?0偶數(shù)個?1〕

56、JNPOPRPF=0

57、JCOPRCF=1

CF=1〔最高位有進位或借位就置1〕

58、JNCOPRCF=0

比擬兩個無符號數(shù),根據(jù)比擬的結果轉移

59、JB(JNAE,JC)OPRCF=1被減數(shù)小于減數(shù)那么轉移

60、JNB(JAE,JNC)OPRCF=0被減數(shù)大于或等于減數(shù)那么轉移

61、JBE(JNA)OPRCF或ZF=1被減數(shù)小于或等于減數(shù)那么轉移

62、JNBE(JA)OPRCF或ZF=0被減數(shù)大于減數(shù)那么轉移

比擬兩個帶符號數(shù),根據(jù)比擬結果轉移

63、JL/JNGEOPRSF異或OF=1被減數(shù)小于減數(shù)那么轉移

64、JNL/JGESF異或OF=0被減數(shù)不小于減數(shù)那么轉移

65、JLE/JNE(SF異或OF)與ZF=1被減數(shù)不大于減數(shù)那么轉移

66、JNLE/JG(SF異或OF)與ZF=0被減數(shù)大于減數(shù)那么轉移

根據(jù)CX存放器的值轉移

67、JCXZ(CX)=0CX內容為零那么轉移

指令的特殊要求:所有條件轉移指令都是短轉移指令,轉移的目標地址必須在當前IP地址的-128至+127字節(jié)范圍之內,因此條件轉移指令是2字節(jié)指令。

三、循環(huán)指令

68、循環(huán)LOOP(loop)

指令的匯編格式:LOOPlabel

指令的根本功能:①(CX)←(CX)-1②假設(CX)≠0,那么(IP)←(IP)當前+位移量,否那么循環(huán)結束。

指令的特殊要求:循環(huán)指令都是短轉移格式的指令,也就是說,位移量是用8位帶符號數(shù)來表示的,轉向地址在相對于當前IP值的-128~+127字節(jié)范圍之內。

69、為零/相等時循環(huán)LOOPZ/LOOPE(loopwhilenonzeroorequal)

指令的匯編格式:LOOPNZ/LOOPNElabel

指令的根本功能:①(CX)←(CX)-1

②假設ZF=1且(CX)≠0,那么(IP)←(IP)當前+位移量,否那么循環(huán)結束。

指令的特殊要求:循環(huán)指令都是短轉移格式的指令,也就是說,位移量是用8位帶符號數(shù)來表示的,轉向地址在相對于當前IP值的-128~+127字節(jié)范圍之內。

70、不為零/不相等時循環(huán)LOOPNZ/LOOPNE(loopwhilenonzeroornotequal)

指令的匯編格式:LOOPNZ/LOOPNElabel

指令的根本功能:①(CX)←(CX)-1

②假設ZF=0且(CX)≠0,那么(IP)←(IP)當前+位移量,否那么循環(huán)結束。

指令的特殊要求:循環(huán)指令都是短轉移格式的指令,也就是說,位移量是用8位帶符號數(shù)來表示的,轉向地址在相對于當前IP值的-128~+127字節(jié)范圍之內。

四、子程序調用

71、段內直接近調用CALLSUBROUT

指令的根本功能:(SP)<-(SP)-2

((SP)+1,(sp))<-(IP)

(IP)<-(IP)+16位位移量

段內間接近調用CALLDESTIN

指令的根本功能:(SP)<-(SP)-2

((SP)+1,(SP))<-(IP)

(IP)<-(EA)

72、段間直接調用CALLFARPTRSUBROUT

指令的根本功能:(SP)<-(SP)-2,((SP))<-(CS)當前

(SP)<-(SP)-2,((SP))<-(IP)當前

(IP)<-偏移地址(在指令的第2、3個字節(jié))

(CS)<-段地址(在指令的第4、5個字節(jié))

五、返回指令

73、段內返回(近返回)RET

指令的根本功能:(IP)<-((SP)+1,(SP))

(SP)<-(SP)+2

段間返回(遠返回)RET

指令的根本功能:(IP)<-((SP)),(SP)<-(SP)+2

(CS)<-((SP)),(SP)<-(SP)+2

帶立即數(shù)返回RETN

執(zhí)行操作:①返回地址出棧〔操作同段內或段間返回〕②修改堆棧指針:(SP)←(SP)+N

六、中斷及中斷返回指令

74、INTn中斷指令〔interrupt〕,n為中斷類型號

執(zhí)行操作:①入棧保存FLAGS:(SP)←(SP)-2,((SP))←(FLAGS)

②入棧保存返回地址:(SP)←(SP)-2,((SP))←(CS)

(SP)←(SP)-2,((SP))←(IP)

③轉中斷處理程序:(IP)←(n×4)

(CS)←(n×4+2)

75、IRET中斷返回指令〔returnfrominterrupt〕

執(zhí)行操作:①返回地址出棧:(IP)←((SP)),(SP)←(SP)+2

(CS)←((SP)),(SP)←(SP)+2

②FLAGS出棧:(FLAGS)←((SP)),(SP)←(SP)+2

76、INTO溢出那么中斷〔中斷類型為4〕

執(zhí)行操作:假設OF=1〔有溢出〕,那么:

①入棧保存FLAGS:(SP)←(SP)-2,((SP))←(FLAGS)

②入棧保存返回地址:(SP)←(SP)-2,((SP))←(CS)

(SP)←(SP)-2,((SP))←(IP)

③轉中斷處理程序:(IP)←(4×4)=(10H)

(CS)←(4×4+2)=(12HHELLO,WORLD進階匯編程序系列Editor:adminTime:2004-3-2112:49Read:9785Score:8PrintWriter:LLUCTExcerpt:80x86匯編小站Preface:感謝網(wǎng)友lluct為本站提供原創(chuàng)......適合初學者學習哦Content:TITLE***HELLO,WORLD進階程序之選擇分支BYLLUCT***DATASEGMENT;定義數(shù)據(jù)段MSG1DB'***WELCOMETOMYPROGRAMBYLLUCT***','$';定義輸出的第一個字符串信息,字符串必須用DB定義,$為結束標志MSG2DB'1:BASICMESSAGE2:ADVANCEDMESSAGE','$';定義輸出的字符串信息:選擇菜單MSG3DB'PLEASECHOOSE:','$';定義輸出的字符串信息:選擇前綴MSG4DB'HELLO,WORLD!^-^','$';定義輸出的字符串信息:分支1的信息MSG5DB'THISISMYFIRSTASM_86PROGRAM!@^-^@','$';定義輸出的字符串信息:分支2的信息ERRMSGDB'CHOOSEERROR!-_-b','$';定義輸出的字符串信息:選擇錯誤信息DATAENDS;數(shù)據(jù)段結尾CODESEGMENT;定義代碼段ASSUMECS:CODE;規(guī)定CS的內容ASSUMEDS:DATA;規(guī)定DS的內容START:MOVAX,DATA;程序從START開始MOVDS,AX;DS置初值,DATA的段地址CALLENTER;調用顯示回車換行子程序LEADX,MSG1;輸出第一個字符串的偏移地址CALLDISPCHS;調用顯示字符串子程序CALLENTER;調用顯示回車換行子程序CALLENTER;這個...同上啊^-^LEADX,MSG2;輸出第二個字符串的偏移地址CALLDISPCHS;調用顯示字符串子程序AGAIN:CALLENTER;定義AGAIN標號.用于選擇錯誤循環(huán)LEADX,MSG3;輸出第三個字符串的偏移地址CALLDISPCHS;調用顯示字符串子程序MOVAH,01H;調用1號功能:從鍵盤輸入一個字符并回顯INT21H;完成輸入回顯CMPAL,'1';輸入的字符和1相比擬JEBASICP;如果相等,轉移到BASICP標號(JE=JumpifEqual)CMPAL,'2';輸入的字符和2相比擬||JEADVANP;如果相等,轉移到ADVANP標號(JE=如果相等就轉移)JMPERROR;否那么就無條件轉移到ERROR標號EXIT:MOVAH,4CH;4C號功能調用:終止當前程序并返回調用程序INT21H;返回DOSBASICP:CALLENTER;什么,還要解釋啊.暈-_-!!!LEADX,MSG4;輸出第三個字符串的偏移地址CALLDISPCHS;調用顯示字符串子程序CALLENTER;..........JMPEXIT;無條件轉移到EXIT標號ADVANP:CALLENTER;55555555LEADX,MSG5;解釋了四次,應該懂了吧CALLDISPCHS;調用顯示字符串子程序CALLENTER;再問就死給你看JMPEXIT;無條件轉移到EXIT標號ERROR:CALLENTERLEADX,ERRMSG;輸出選擇錯誤信息CALLDISPCHS;調用顯示字符串子程序MOVDL,07H;輸出ASCII碼的報警(響鈴)控制符BEL(07H)CALLDISPCH;調用顯示單個字符子程序CALLENTERJMPAGAINDISPCHPROCNEAR;顯示單個字符子程序,NEAR說明子程序和主程序在同一個代碼段中(現(xiàn)無主程序調用)MOVAH,02H;2號功能調用:顯示器輸出字符INT21H;完成輸出顯示RET;返回DISPCHENDP;子程序結尾ENTERPROCNEAR;顯示回車換行子程序MOVDL,0DH;輸出ASCII碼的回車控制符CR(0DH)CALLDISPCH;調用顯示單個字符子程序MOVDL,0AH;輸出ASCII碼的換行控制符LF(0AH)CALLDISPCH;調用顯示單個字符子程序RET;返回ENTERENDP;子程序結尾DISPCHSPROCNEAR;顯示字符串子程序,NEAR說明子程序和主程序在同一個代碼段中(現(xiàn)無主程序調用)MOVAH,09H;9號功能調用:顯示字符串INT21H;完成輸出顯示RETDISPCHSENDPCODEENDS;代碼段結尾ENDSTART;結束匯編;把以上代碼復制到記事本等文本程序中,并保存.(如helloch.asm);編譯:masmhelloch.asm;連接:linkhelloch.obj;執(zhí)行:helloch.exe======================================================title***hello,world進階之字符串輸入輸出bylluct***datasegment;定義數(shù)據(jù)段inputdb100dup(?);定義輸入的字符串,字符串必須用db定義,長度為100個字節(jié)msg1db'Hello,','$';定義輸出的前綴字符串信息,字符串必須用db定義,$為結束標志(24h)msg2db',Welcometohere!','$';定義輸出的后綴字符串信息headmsgdb'PLEASEINPUTYOURNAME:','$';開始顯示的字符串信息dataends;數(shù)據(jù)段結尾codesegment;定義代碼段assumecs:code;規(guī)定cs的內容assumeds:data;規(guī)定ds的內容start:movax,data;程序從start開始movds,ax;ds置初值,data的段地址movsi,0;變址存放器置初值0callenter;調用顯示回車換行子程序leadx,headmsg;輸出開始顯示的字符串的偏移地址calldispchs;調用顯示字符串子程序repeat:movah,01h;定義repeat標號,用于循環(huán)輸入單個字符.調用1號功能:從鍵盤輸入一個字符并回顯int21h;完成輸入回顯cmpal,0dh;輸入的字符和CR(回車)比擬jeexit;如果等于回車就轉移到exitmovinput[si],al;把al的值傳送到input的si地址中(好似是這樣吧)incsi;si加1jmprepeat;無條件轉移到repeatexit:callentermovinput[si],24h;給輸入完成的字符串加上結束標志($)callenterleadx,msg1;輸出前綴字符串的偏移地址calldispchs;調用顯示字符串子程序leadx,input;輸出剛剛輸入的字符串calldispchsleadx,msg2calldispchscallentermovah,4ch;4c號功能調用:終止當前程序并返回調用程序int21h;返回dosenterprocnear;顯示回車換行子程序movdl,0dh;輸出ascii碼的回車控制符cr(0dh)calldispchmovdl,0ah;輸出ascii碼的換行控制符lf(0ah)calldispchret;返回enterendp;子程序結束dispchprocnearmovah,02h;2號功能調用:顯示器輸出字符int21h;完成輸出顯示ret;返回dispchendpdispchsprocnearmovah,09h;9號功能調用:顯示字符串int21h;完成輸出顯示ret;返回dispchsendpcodeends;代碼段結尾endstart;結束匯編;把以上代碼復制到記事本等文本程序中,并保存.(如heinout.c);編譯:masmheinout.asm;連接:linkheinout.obj;執(zhí)行:heinout.exe中斷是指CPU對系統(tǒng)發(fā)生的某個事件作出的一種反響:CPU暫停正在執(zhí)行的程序,保存現(xiàn)場后自動轉去執(zhí)行相應的處理程序,處理完該事件后再返回斷點繼續(xù)執(zhí)行被"打斷"的程序在我們所用的電腦中,所有的硬件都需要執(zhí)行中斷請求的動作,簡單說它的作用就是用來停止其相關硬件的工作狀態(tài)。我們可以舉一個日常生活中的例子來說明,假設你正在給朋友寫信,鈴響了,這時你放下手中的筆去接,通話完畢再繼續(xù)寫信。這個例子就表現(xiàn)了中斷及其處理的過程:鈴聲使你暫時中止當前的工作,而去處理更為急需處理的事情——接,當把急需處理的事情處理完畢之后,再回過頭來繼續(xù)原來的事情。在這個例子中,鈴聲就可以稱為“中斷請求”,而你暫停寫信去接就叫作“中斷響應”,那么接的過程就是“中斷處理”。由此我們可以看出,在計算機執(zhí)行程序的過程中,由于出現(xiàn)某個特殊情況(或稱為“事件”),使得系統(tǒng)暫時中止現(xiàn)行程序,而轉去執(zhí)行處理這一特殊事件的程序,處理完畢之后再回到原來程序的中斷點繼續(xù)向下執(zhí)行,而這個過程就被稱為中斷。中斷的作用我們可以再舉一個例子來說明中斷的作用。假設有一個朋友來拜訪你,但是由于不知何時到達,你只能在門口等待,于是什么事情也干不了;但如果在門口裝一個門鈴,你就不必在門口等待而可以在家里去做其他的工作,朋友來了按門鈴通知你,這時你才中斷手中的工作去開門,這就防止了不必要的等待。而計算機也一樣,例如打印文稿的操作。因為cpu傳送數(shù)據(jù)的速度高,而打印機速度較慢,如果不采用中斷技術,cpu將經(jīng)常處于等待狀態(tài),這會使得電腦的工作效率極低。而采用了中斷方式后,cpu就可以在打印的同時進行其他的工作,而只在打印機緩沖區(qū)內的當前內容打印完畢,而發(fā)出中斷請求之后才予以響應,這時才暫時中斷當前的工作轉去執(zhí)行停止打印的操作,之后再返回執(zhí)行原來的程序。這樣就大大地提高了計算機系統(tǒng)的效率。irq中斷計算機中的中斷有好幾種,根據(jù)中斷信號產(chǎn)生的來源可以分為:硬件中斷和軟件中斷。硬件中斷多由外圍設備和計算機系統(tǒng)控制器發(fā)出,軟件中斷一般由軟件命令產(chǎn)生。在硬件中斷中又有“可屏蔽中斷”和“不可屏蔽中斷”之分。顧名思義,可屏蔽中斷可以由計算機根據(jù)系統(tǒng)的需要來決定是否進行接收處理或是延后處理(即屏蔽),而不可屏蔽中斷便是直接激活相應的中斷處理程序,它不能也不會被延誤。而irq中斷就是可屏蔽的硬件中斷,它的全稱為interruptrequest即“中斷請求”。在電腦的系統(tǒng)中,是由一個中斷控制器8259或是8259a的芯片(現(xiàn)在此芯片大都集成到其他的芯片內)來對系統(tǒng)中每個硬件的中斷進行控制。目前共有16組irq,去掉其中用來作橋接的一組irq,實際上只有15組irq可供硬件調用。而這些irq都有自己建議的配置。分配irq中斷我們日常所用的操作系統(tǒng)對于irq的設置也不盡相同,所以在安裝新硬件的時候,系統(tǒng)往往并不能自動檢測正確的irq來分配給所需調用的硬件,這就會造成此硬件設備或是原來的舊硬件出現(xiàn)不能正常工作的現(xiàn)象。其實這是系統(tǒng)自動將該硬件的irq分配給了其他與此irq相同的硬件上,從而發(fā)生沖突使硬件不能正常工作。一般如果遇到這種情況,只要將新舊兩個硬件的irq配置手動調開就可以解決了。對于一些常用的硬件一般都有其默認的irq數(shù)值。比方聲卡常常使用irq5或7。雖然這些配件使用其他的irq值大多數(shù)也能工作,但假設碰到特別“挑剔”的軟件或游戲等程序,例如只能識別irq值為5或7的聲卡,那么如果將它設成irq9就白費心機了。中斷的根本概念中斷(Interrupt)是指計算機在實行期間,系統(tǒng)內發(fā)生非尋常的或非預期的急需處理事件,使得CPU暫時中斷當前正在執(zhí)行的程序而轉去執(zhí)行響應的事件處理程序。待處理完畢后又返回原來中斷處繼續(xù)執(zhí)行或調度新的程序執(zhí)行的過程。

現(xiàn)代計算機系統(tǒng)一般都具有處理突發(fā)事件的能力。例如:從磁帶上讀入一組信息,當發(fā)現(xiàn)讀入信息有錯誤時,只要讓磁帶退回重讀該組信息就可能克服錯誤,而得到正確的信息。

這種處理突發(fā)事件的能力是由硬件和軟件協(xié)作完成的。首先由硬件的中斷裝置發(fā)現(xiàn)產(chǎn)生的事件,然后,中斷裝置中止現(xiàn)行程序的執(zhí)行,引出處理該事件的程序來處理。計算機系統(tǒng)不僅可以處理由于硬件或軟件錯誤而產(chǎn)生的事件,而且可以處理某種預定處理偽事件。例如:外圍設備工作結束時,也發(fā)出中斷請求,向系統(tǒng)報告它已完成任務,系統(tǒng)根據(jù)具體情況作出相應處理。引起中斷的事件稱為中斷源。發(fā)現(xiàn)中斷源并產(chǎn)生中斷的硬件稱中斷裝置。在不同的硬件結構中,通常有不同的中斷源和平不同的中斷裝置,但它們有一個共性,即:當中斷事件發(fā)生后,中斷裝置能改變處理器內操作執(zhí)行的順序。中斷源:引起中斷發(fā)生的事件被稱為中斷源。

中斷請求:中斷源向CPU發(fā)出的請求中斷處理信號。

中斷響應:CPU收到中斷請求后轉相應的事件處理程序。

禁止中斷〔關中斷〕:CPU內部的處理機狀態(tài)字PSW的中斷允許位已被去除,不允許CPU響應中斷。

開中斷:PSW的中斷允許位的設置。

中斷屏蔽:在中斷請求產(chǎn)生之后,系統(tǒng)用軟件方式有選擇地封鎖局部中斷而允許蓁局部的中斷仍能得到響應。中斷處理過程

中斷處理過程:

(1)CPU檢查響應中斷的條件是否滿足。CPU響應中斷的條件是:有來自于中斷源的中斷請求、CPU允許中斷。如果中斷響應條件不滿足,那么中斷處理無法進行。

(2)如果CPU響應中斷,那么CPU關中斷,使其進入不可再次響應中斷的狀態(tài)。

(3)保存被中斷進程現(xiàn)場。為了在中斷處理結束后能使進程正確地返回到中斷點,系統(tǒng)必須保存當前處理機狀態(tài)字PSW和程序計數(shù)器PC等的值。這些值一般保存在特定堆?;蛴布娣牌髦?。

(4)分析中斷原因,調用中斷處理子程序。在多個中斷請求同時發(fā)生時,處理優(yōu)先級最高的中斷源發(fā)出的中斷請求。

(5)執(zhí)行中斷處理子程序。對陷阱來說,在有些系統(tǒng)中那么是通過陷阱指令向當前執(zhí)行進程發(fā)軟中斷信號后調用對應的處理子程序執(zhí)行。

(6)退出中斷,恢復被中斷進程的現(xiàn)場或調度新進程占據(jù)處理機。

(7)開中斷,CPU繼續(xù)執(zhí)行。1.什么叫中斷?

簡單來說,中斷是一種使CPU中止正在執(zhí)行的程序而轉去處理特殊事件的操作。這些引起中斷的事件稱為中斷源,它們可能是來自外設的輸入輸出請求,也可能是計算機的一些異常事故或其它內部原因。

更具體地,我們定義CPU中斷為這樣一個過程:在特定的事件〔中斷源,也稱中斷請求信號〕觸發(fā)下引起CPU暫停正在運行的程序〔主程序〕,轉而先去處理一段為特定事件而編寫的處理程序〔中斷處理程序〕,等中斷處理程序處理完成后,再回到主程序被打斷的地方繼續(xù)運行。2.中斷的作用

一方面,有了中斷功能,PC系統(tǒng)就可以使CPU和外設同時工作,使系統(tǒng)可以及時地響應外部事件。而且有了中斷功能,CPU可允許多個外設同時工作。這樣就大大提高了CPU的利用率,也提高了數(shù)據(jù)輸入、輸出的速度。

另一方面,有了中斷功能,就可以使CPU及時處理各種軟硬件故障。計算機在運行過程中,往往會出現(xiàn)事先預料不到的情況或出現(xiàn)一些故障,如電源掉電、存儲出錯,運算溢出等等。計算機可以利用中斷系統(tǒng)自行處理,而不必停機或報告工作人員。3.中斷類型

在PC機系統(tǒng)中,根據(jù)中斷源的不同,中斷常分為兩大類:硬件中斷和軟件中斷。

硬件中斷也稱為外部中斷,它又可以分為兩種:

1〕.可屏蔽中斷:是可以被CPU屏蔽的由中斷電路發(fā)出的中斷請求信號在CPU的INTR端引起的中斷,它常常由PC機的外設或一些接口功能產(chǎn)生,如鍵盤、打印機、串行口等。可屏蔽意味著這類型中斷可以在CPU要處理其它緊急操作時,被軟件屏蔽或忽略。

2〕.非屏蔽中斷:是由CPU的NMI端引起的中斷,如當系統(tǒng)出現(xiàn)掉電、內存奇偶校驗錯誤等,系統(tǒng)都將使用非屏蔽中斷。非屏蔽是指CPU不能用軟件指令來禁止對這種中斷響應,也就是CPU必須響應由NMI端送來的中斷信號。

軟件中斷,又稱為內部中斷,是指程序中使用INT中斷指令引起的中斷。4.CPU響應中斷的條件

除了非屏蔽中斷外,其它中斷都可以用軟件來屏蔽或開放。系統(tǒng)只有具備如下的中斷條件,CPU才可能對中斷請求進行響應。

1)設置中斷請求觸發(fā)器

2)設置中斷屏蔽觸發(fā)器

3)設置中斷允許觸發(fā)器5.CPU處理中斷過程

當滿足了中斷的條件后,CPU就會響應中斷,轉入中斷程序處理。具體的工作過程如下所述。

1)關中斷

2)保存斷點

3)保護現(xiàn)場

4)給出中斷入口,轉入相應的中斷效勞程序

5)恢復現(xiàn)場

6)開中斷與返回6.中斷沖突

雖然現(xiàn)在Windows操作系統(tǒng)從Win9X開始已經(jīng)支持即插即用功能,大大簡化了用戶的操作,但是如果不能認出要安裝的新設備,那么自動分配中斷時就會產(chǎn)生沖突。現(xiàn)在新的硬件產(chǎn)品層出不窮,各種產(chǎn)品又相互兼容,功能類似,這就導致了操作系統(tǒng)常常不能正確檢測出新設備,中斷沖突也就不可防止了。7.中斷控制器8259A的結構

Intel8259A是與8088/8086系列兼容的可編程的中斷控制器。后來的微機系統(tǒng)也沿用這種中斷機制及其功能,只是因為集成芯片技術的提高,不單獨以8259A芯片的形式出現(xiàn),而是集成到一個叫做"南橋芯片"或"HUB芯片"的芯片里了。

8259A包括以下幾個局部:

1〕.中斷請求存放器IRR〔InterruptRequestRegister〕:有8條外界中斷請求線IR0~IR7,每一條請求線有一個相應的觸發(fā)器來保存請求信號。

2〕.中斷效勞存放器ISR〔INServiceRegister〕:保存正在效勞的中斷。

3〕.優(yōu)先權電路:對保存在IRR中的各個中斷請求,經(jīng)過判斷確定最高的優(yōu)先權,并在中斷響應周期把它選通至中斷效勞存放器。

4〕.中斷屏蔽存放器IMR〔InterruptMaskRegister〕:存放器的每一位,可以對IRR中的相應的中斷源進行屏蔽。但對于較高優(yōu)先權的輸入線實現(xiàn)屏蔽并不影響較低優(yōu)先權的輸入。

5〕.數(shù)據(jù)總線緩沖器:是8259A與系統(tǒng)數(shù)據(jù)總線的接口,它是8位的雙向三態(tài)緩沖器。但凡CPU對8259A編程時的控制字,都是通過它寫入8259A的,8259A狀態(tài)信息,也是通過它讀入CPU的;在中斷響應周期,8259A送至數(shù)據(jù)總線的CALL指令或中斷向量也是通過它傳送的。

6〕.讀/寫控制邏輯:CPU能通過它實現(xiàn)對8259A的讀出〔狀態(tài)信號〕和寫入〔初始化編程〕。

7〕.級連緩沖器:實現(xiàn)8259A芯片之間的級連,使得中斷源可由8級擴展至64級。

8〕.控制邏輯局部:對芯片內部的工作進行控制,使它按編程的規(guī)定工作。8.8259A的級連

在一個系統(tǒng)中,8259A可以級連,有一個主8259A,假設干個從8259A,最多可以有8個從8259A,把中斷源擴展到64個。非法傳送種種1.兩個操作數(shù)的類型不一致–-----例如源操作數(shù)是字節(jié),而目的操作數(shù)是字;或相反?絕大多數(shù)雙操作數(shù)指令,除非特別說明,目的操作數(shù)與源操作數(shù)必須類型一致,否那么為非法指令MOVAL,050AH;非法指令:050Ah為字,而AL為字節(jié)?存放器有明確的字節(jié)或字類型,有存放器參與的指令其操作數(shù)類型就是存放器的類型?對于存儲器單元與立即數(shù)同時作為操作數(shù)的情況,必須顯式指明;byteptr指示字節(jié)類型,wordptr指示字類型。2.兩個操作數(shù)不能都是存儲器–------傳送指令很靈活,但主存之間的直接傳送卻不允許?8086指令系統(tǒng)不允許兩個操作數(shù)都是存儲單元〔除串操作指令〕,要實現(xiàn)這種傳送,可通過存放器間接實現(xiàn)movax,buffer1;ax←buffer1〔將buffer1內容送ax〕movbuffer2,ax;buffer2←ax;這里buffer1和buffer2是兩個字變量、;實際表示直接尋址方式3.段存放器的操作有一些限制–----段存放器屬專用存放器,對他們的操作能力有限?不允許立即數(shù)傳送給段存放器MOVDS,100H;非法指令:立即數(shù)不能傳送段存放器?不允許直接改變CS值MOVCS,[SI];不允許使用的指令?不允許段存放器之間的直接數(shù)據(jù)傳送MOVDS,ES;非法指令:不允許段存放器間傳送MOVBL,AX〔數(shù)據(jù)長度不匹配〕MOVDS,2000H(不允許給段存儲器用立即數(shù)賦值)MOVCS,AX(禁止用MOV指令給CS賦值)MOV[AX],[2000H](禁止直接在存儲器間傳送)MOV[2000H],20H(數(shù)據(jù)長度不確切,應改為MOVBYTEPTR[2000H],20H)1、〔1〕狀態(tài)標志:CF-進位標志,ZF-零標志,SF-符號標志,PF-奇偶標志OF-溢出標志,AF-輔助進位標志?!玻病晨刂茦酥荆篋F-方向標志,IF-中斷允許標志,TF-陷井標志。2、8086機器代碼格式一般是:操作碼尋址方式偏移量立即數(shù)。3、〔1〕源操作數(shù)為立即尋址,目的操作數(shù)為存放器尋址?!玻病吃床僮鲾?shù)為存放器相對尋址,目的操作數(shù)為存放器尋址?!玻场吃床僮鲾?shù)為存放器尋址,目的操作數(shù)為存放器間接尋址?!玻础吃床僮鲾?shù)和目的操作數(shù)均為固定尋址。4、此題要求出物理地址,物理地址的計算公式為:段地址〔段首地址〕*10H+偏移地址〔有效地址〕〔1〕源操作數(shù)為立即尋址方式,操作數(shù)地址就在本條指令中?!玻病吃床僮鲾?shù)為直接尋址方式,其物理地址為DS*10H+100H=20100H〔3〕源操作數(shù)為存放器間接尋址,其物理地址為SS*10H+BP=15010H〔4〕源操作數(shù)為基址變址尋址,其物理地址為DS*10H+BX+SI+VAL=201E0H8086有14個16位存放器,這14個存放器按其用途可分為(1)通用存放器、(2)指令指針、(3)標志存放器和(4)段存放器等4類。

(1)通用存放器有8個,又可以分成2組,一組是數(shù)據(jù)存放器(4個),另一組是指針存放器及變址存放器(4個).

數(shù)據(jù)存放器分為:

AH&AL=AX(accumulator):累加存放器,常用于運算;在乘除等指令中指定用來存放操作數(shù),另外,所有的I/O指令都使用這一存放器與外界設備傳送數(shù)據(jù).

BH&BL=BX(base):基址存放器,常用于地址索引;

CH&CL=CX(count):計數(shù)存放器,常用于計數(shù);常用于保存計算值,如在移位指令,循環(huán)(loop)和串處理指令中用作隱含的計數(shù)器.

DH&DL=DX(data):數(shù)據(jù)存放器,常用于數(shù)據(jù)傳遞。

他們的特點是,這4個16位的存放器可以分為高8位:AH,BH,CH,DH.以及低八位:AL,BL,CL,DL。這2組8位存放器可以分別尋址,并單獨使用。

另一組是指針存放器和變址存放器,包括:

SP〔StackPointer〕:堆棧指針,與SS配合使用,可指向目前的堆棧位置;

BP〔BasePointer〕:基址指針存放器,可用作SS的一個相對基址位置;

SI〔SourceIndex〕:源變址存放器可用來存放相對于DS段之源變址指針;

DI〔DestinationIndex〕:目的變址存放器,可用來存放相對于ES段之目的變址指針。

這4個16位存放器只能按16位進行存取操作,主要用來形成操作數(shù)的地址,用于堆棧操作和變址運算中計算操作數(shù)的有效地址。

(2)指令指針I(yè)P(InstructionPointer)

指令指針I(yè)P是一個16位專用存放器,它指向當前需要取出的指令字節(jié),當BIU從內存中取出一個指令字節(jié)后,IP就自動加1,指向下一個指令字節(jié)。注意,IP指向的是指令地址的段內地址偏移量,又稱偏移地址(OffsetAddress)或有效地址(EA,EffectiveAddress)。

(3)標志存放器FR(FlagRegister)

8086有一個18位的標志存放器FR,在FR中有意義的有9位,其中6位是狀態(tài)位,3位是控制位。

OF:溢出標志位OF用于反映有符號數(shù)加減運算所得結果是否溢出。如果運算結果超過當前運算位數(shù)所能表示的范圍,那么稱為溢出,OF的值被置為1,否那么,OF的值被清為0。

DF:方向標志DF位用來決定在串操作指令執(zhí)行時有關指針存放器發(fā)生調整的方向。

IF:中斷允許標志IF位用來決定CPU是否響應CPU外部的可屏蔽中斷發(fā)出的中斷請求。但不管該標志為何值,CPU都必須響應CPU外部的不可屏蔽中斷所發(fā)出的中斷請求,以及CPU內部產(chǎn)生的中斷請求。具體規(guī)定如下:

(1)、當IF=1時,CPU可以響應CPU外部的可屏蔽中斷發(fā)出的中斷請求;

(2)、當IF=0時,CPU不響應CPU外部的可屏蔽中斷發(fā)出的中斷請求。

TF:跟蹤標志TF。該標志可用于程序調試。TF標志沒有專門的指令來設置或清楚。

〔1〕如果TF=1,那么CPU處于單步執(zhí)行指令的工作方式,此時每執(zhí)行完一條指令,就顯示CPU內各個存放器的當前值及CPU將要執(zhí)行的下一條指令。

〔2〕如果TF=0,那么處于連續(xù)工作模式。

SF:符號標志SF用來反映運算結果的符號位,它與運算結果的最高位相同。在微機系統(tǒng)中,有符號數(shù)采用補碼表示法,所以,SF也就反映運算結果的正負號。運算結果為正數(shù)時,SF的值為0,否那么其值為1。

溫馨提示

  • 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

提交評論