




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
匯編語言第三章指令系統(tǒng)與匯編語言程序設計匯編語言第三章指令系統(tǒng)與匯編語言程序設計指令第3.1節(jié)基本概念指令與指令系統(tǒng)(一)指令(Instruction)指令是微處理器執(zhí)行某種操作的命令。操作:傳送類加工處理類:算術(shù)運算、邏輯運算、移位循環(huán)控制類:轉(zhuǎn)移、調(diào)用、中斷串操作類指令第3.1節(jié)基本概念指令系統(tǒng)與尋址方式(二)指令系統(tǒng)(InstructionSet)微處理器全部指令的集合稱為指令系統(tǒng)。8086CPU包括133條指令(三)尋址方式一條指令通常包括兩部分操作碼:規(guī)定所要執(zhí)行的操作類型操作數(shù):所需要處理的數(shù)據(jù)或者數(shù)據(jù)的地址信息我們把獲得數(shù)據(jù)或者數(shù)據(jù)地址信息的方式稱為尋址方式例:MOVAX,1234H在這條指令中有兩個操作數(shù),按照在指令中所處的位置,將前者稱為目的操作數(shù),后者稱為源操作數(shù)。該指令將數(shù)據(jù)1234H傳送到數(shù)據(jù)寄存器AX中,源操作數(shù)是“立即”尋址方式,目的操作數(shù)是“寄存器”尋址方式。指令系統(tǒng)與尋址方式(二)指令系統(tǒng)(InstructionS隱含尋址第3.2節(jié)8086尋址方式尋址方式:尋找指令中操作數(shù)地址的方式。數(shù)據(jù)尋址方式(一)隱含尋址指令已經(jīng)默認對CPU中的某個寄存器進行操作,不用在指令中指明所使用的寄存器,即隱含了規(guī)定的操作數(shù),這樣的尋址方式稱為隱含尋址。例:DAA指令,只有操作碼,無操作數(shù),但已經(jīng)規(guī)定是對
AL中的內(nèi)容進行十進制調(diào)整隱含尋址第3.2節(jié)8086尋址方式立即尋址與寄存器尋址(二)立即尋址
操作數(shù)直接寫在指令中,在指令譯碼執(zhí)行時,可以立即得到,同時把操作數(shù)又稱作“立即數(shù)”例:MOVAL,5;(AL)5,操作數(shù)5采用的就是立即尋址(三)寄存器尋址操作數(shù)放在CPU內(nèi)部的寄存器中,在指令中直接指出寄存器的名字。例:MOVBX,AX;(BX)(AX)
以上三種尋址方式都是直接在處理器內(nèi)部獲得數(shù)據(jù),操作速度快。立即尋址與寄存器尋址(二)立即尋址存儲器尋址(四)存儲器操作數(shù)尋址操作數(shù)存放在存儲器中時,指令執(zhí)行時必須通過總線在存儲器中存取操作數(shù)。
執(zhí)行單元EU根據(jù)指令中給出的尋址方式計算出16位的偏移量,稱為有效地址(EA)送到總線接口單元BIU,經(jīng)過加法器生成20位實際物理地址,在存儲器讀寫總線周期對存儲器進行操作,一般在表示EA時,用[操作數(shù)]表示。由于計算EA需要時間,進行總線操作比較慢,因此存儲器操作尋址比前三種要慢。直接尋址指令中直接給出了操作數(shù)的有效地址例:MOVSI,[2000H];(SI)(2000H)
上例中默認使用數(shù)據(jù)段,若需使用其他段可使用段超越,MOVSI,ES:[2000H]存儲器尋址(四)存儲器操作數(shù)尋址間接尋址間接尋址指令中寄存器的值是操作數(shù)的有效地址,可間接尋址的寄存器有:BX、BP、SI、DI
例:MOVAL,[BX];(AL)((BX))BX用于間接尋址時,默認段寄存器為DS,允許段超越BP用于間接尋址時,默認段寄存器為SS,允許段超越SI用于間接尋址時,默認段寄存器為DS,允許段超越DI用于間接尋址時,只有在串操作指令中,默認段寄存器為ES,其余情況默認段寄存器均為DS,不允許段超越直接尋址時,默認段寄存器為DS,允許段超越注:IP只能在代碼段中(CS)尋址,SP只能在堆棧段(SS)中尋址間接尋址間接尋址相對尋址相對尋址基址尋址操作數(shù)的有效地址是一個基址寄存器的內(nèi)容加上一個8位或者16位的偏移量,基址寄存器是BX或者BP。例:MOVAX,[BX+1000H];(AX)((BX)+1000H)
有時也寫成MOVAX,1000H[BX]或MOVAX,[BX]1000H變址尋址操作數(shù)的有效地址是一個變址寄存器的內(nèi)容加上一個8位或者16位的偏移量,變址寄存器是SI和DI。例:MOVAX,ARRAY[SI];(AX)((SI)+ARRAY)
在C語言中,常使用全局數(shù)組,例如定義了一個全局數(shù)組A[3],具有三個元素,分別為A[0]、A[1]、A[2],實相對尋址相對尋址際上A在編譯時就轉(zhuǎn)換成具體的在數(shù)據(jù)段中分配的位置,例如1000H,下標0、1、2一般就存放在寄存器中,如SI,通過1000H[SI]就可以訪問到具體的數(shù)據(jù)?;纷冎穼ぶ凡僮鲾?shù)的有效地址是由基址寄存器和變址寄存器的內(nèi)容相加產(chǎn)生例:MOVAX,[BP+SI];(AX)((BP)+(SI))相對基址變址尋址操作數(shù)的有效地址是由基址寄存器、變址寄存器和偏移量三者相加產(chǎn)生。例:MOVAX,[BX+SI+3H]
;(AX)((BX)+(SI)+3H)
有時也可寫成MOVAX,3H[BX][SI]或MOVAX,3H[BX+SI]基址變址尋址際上A在編譯時就轉(zhuǎn)換成具體的在數(shù)據(jù)段中分配的位置,例如基址變I/O端口尋址數(shù)據(jù)串尋址
DS:SI指示源串,ES:DI指示目的串,串長度計數(shù)用CX,并自動修改指針和計數(shù)器值,只用于串操作命令。例:MOVSB;((ES:DI))((DS:SI)),(CX)=(CX)-1,
;(SI)=(SI)+1,(DI)=(DI)+1(五)I/O端口尋址操作數(shù)存放在I/O端口中,指令執(zhí)行時必須通過累加器(AX或AL)實現(xiàn)對端口的訪問。直接端口尋址指令直接提供8位端口的地址。例:INAL,63H;(AL)(0063H)
在端口尋址時,地址可以不需要加[],當端口地址用一個字節(jié)來表示時,可使用直接端口尋址I/O端口尋址數(shù)據(jù)串尋址I/O端口尋址間接端口尋址由DX寄存器給出16位端口地址。例:MOVDX,162HINAX,DX
從端口162H讀取一個字的數(shù)據(jù)到AX中,實質(zhì)是用DX間接表示端口地址。比較:MOVAX,DX;(AX)(DX)INAX,DX;(AX)((DX))I/O端口尋址間接端口尋址程序?qū)ぶ烦绦驅(qū)ぶ贩绞剑ㄒ唬┒蝺?nèi)直接尋址短跳轉(zhuǎn):把IP的內(nèi)容加上一個字節(jié)的補碼數(shù)作為新的
IP,往前最多跳-128個字節(jié),往后最多跳
127個字節(jié)。近跳轉(zhuǎn):把IP的內(nèi)容加上兩個字節(jié)的補碼數(shù)作為新的
IP,往前最多跳-32768個字節(jié),往后最多跳
32767個字節(jié)。(二)段內(nèi)間接尋址將寄存器或存儲器操作數(shù)的內(nèi)容賦給IP,程序?qū)ぶ烦绦驅(qū)ぶ贩绞匠绦驅(qū)ぶ罚ㄈ┒伍g直接尋址直接在指令中給出新的CS和IP內(nèi)容(四)段間間接尋址用存儲器操作數(shù)的內(nèi)容賦給CS和IP程序?qū)ぶ罚ㄈ┒伍g直接尋址第3.3節(jié)8086指令格式指令格式指令一般由1~6個字節(jié)組成,具體格式如下:76543210OPCODEDW76543210MODREGR/M字節(jié)1字節(jié)2字節(jié)3字節(jié)4LOWDISP或DATAHIGHDISP或DATA字節(jié)5字節(jié)6LOWDATAHIGHDATA(一)說明字節(jié)1OPCODE:指令操作碼D:操作數(shù)傳輸方向(立即數(shù)指令和串操作指令除外)D=0,Reg為源操作數(shù)D=1,Reg為目的操作數(shù)W:操作數(shù)字節(jié)長度W=0,字節(jié)操作W=1,字操作第3.3節(jié)8086指令格式指令格式76543210OPC指令格式字節(jié)2,尋址方式MOD:尋址方式字段00=存儲器方式,指令中無偏移量01=存儲器方式,指令中有8位偏移量10=存儲器方式,指令中有16位偏移量11=寄存器方式,指令中無偏移量Reg:寄存器編碼字段000=AL/AX 100=AH/SP001=CL/CX 101=CH/BP010=DL/DX 110=DH/SI011=BL/BX 111=BH/DI指令格式字節(jié)2,尋址方式指令格式R/M:寄存器/存儲器字段在MOD=11,寄存器模式下,R/M給出第二個操作數(shù)的寄存器編碼。在MOD≠11,存儲器模式下,R/M給出計算有效地址的方法。R/MW=0W=1R/MMOD=00MOD=01MOD=10000ALAX000BX+SIBX+SI+D8BX+SI+D16001CLCX001BX+DIBX+DI+D8BX+DI+D16010DLDX010BP+SIBP+SI+D8BP+SI+D16011BLBX011BP+DIBP+DI+D8BP+DI+D16100AHSP100SISI+D8SI+D16101CHBP101DIDI+D8DI+D16110DHSI110直接地址BP+D8BP+D16111BHDI111BXBX+D8BX+D16MOD=11MOD≠11有效地址計算方法指令格式R/M:寄存器/存儲器字段R/MW=0W=1R/MM指令格式字節(jié)3~字節(jié)6DISP:存儲器操作數(shù)地址偏移量,長度由MOD字段定義DATA:指令中的立即數(shù)例:MOVAX,[BX]
指令碼為:8B07MOV[BX+SI+2000H],2345H
指令碼為:C78000204523MOVAX,BX
指令碼為:89D8指令格式字節(jié)3~字節(jié)6第3.4節(jié)、8086指令系統(tǒng)一、操作數(shù)符號表示DST:目的操作數(shù)SRC:源操作數(shù)TARGET:循環(huán)、轉(zhuǎn)移和調(diào)用指令操作數(shù)reg:寄存器操作數(shù),字節(jié)或字reg8:寄存器操作數(shù),字節(jié)reg16:寄存器操作數(shù),字mem:存儲器操作數(shù),字節(jié)或字mem8:字節(jié)型存儲器操作數(shù)mem16:字型存儲器操作數(shù)mem32:雙字型存儲器操作數(shù)acc:累加器AL或AXseg_reg:段寄存器imm:立即操作數(shù),字節(jié)或字imm8:8位立即操作數(shù)imm16:16位立即操作數(shù)short_label:短標號(8位偏移量)near_label:近標號(16位地址或偏移)far_label:遠標號(32位地址)第3.4節(jié)、8086指令系統(tǒng)一、操作數(shù)符號表示acc:累加器二、數(shù)據(jù)傳送指令(一)通用數(shù)據(jù)傳送指令MOVDST,SRC;(DST)←(SRC)具體指令:movmem,accmovacc,memmovreg,regmovreg,memmovmem,regmovreg,immmovmem,immmovseg_reg,reg16;CS除外movseg_reg,mem16;CS除外movreg16,seg_regmovmem16,seg_reg例:合法指令:MOVAX,[SI];(AX)←((SI))MOVAL,[SI];(AL)←((SI))MOVDS,AX;(DS)←(AX)MOVAX,DS;(AX)←(DS)MOVSI,2000H;(SI)←2000HMOV[SI],20H;((SI))←20HMOVSI,[2000H];(SI)←(2000H)MOVSI,[SI+6];(SI)←((SI)+6)MOVAX,AX;(AX)←(AX)非法指令:MOV[SI],[2000H]MOVCS,BXMOVDS,2000H二、數(shù)據(jù)傳送指令(一)通用數(shù)據(jù)傳送指令例:(二)堆棧及堆棧操作1堆棧堆棧是一種按先進后出(FILO)原則存取的存儲器,它由堆棧指針寄存器SS:SP和RAM中的一部分組成,主要用于保護現(xiàn)場和恢復現(xiàn)場。SP的內(nèi)容總是指向棧頂,即最后推入信息所在單元。2進棧指令PUSHSRC;(SP)←(SP)-2,((SP)+1,(SP))←(SRC)具體指令:PUSHreg16PUSHseg_regPUSHmem163出棧指令POPDST;(DST)←((SP)+1,(SP)),
(SP)←(SP)+2)具體指令:POPreg16POPseg_regPOPmem16(二)堆棧及堆棧操作1堆棧2進棧指令4堆棧的應用主要用于子程序調(diào)用或中斷子程序的現(xiàn)場保護和恢復,以及參數(shù)傳遞等。例1、保護現(xiàn)場
fun:PUSHDSPUSHESPUSHAXPUSHBX;處理部分POPBXPOPAXPOPESPOPDSRET例2、用堆棧交換數(shù)據(jù)PUSHAXPUSHBXPOPAXPOPBX堆棧的應用4堆棧的應用fun:PUSHDS例2、用堆棧交換(三)交換指令(三)交換指令XCHGDST,SRC;(DST)<=>(SRC)具體指令:XCHGacc,regXCHGmem,regXCHGreg,reg例1:XCHGAX,BX;(AX)<=>(BX)XCHGAL,BL;(AL)<=>(BL)例2:使用3種方法完成將寄存器AX和BX內(nèi)容交換。方法1XCHGAX,BX;(AX)<=>(BX)方法2PUSHAXPUSHBXPOPAXPOPBX方法3:MOVCX,AXMOVAX,BXMOVBX,CX(三)交換指令(三)交換指令例2:使用3種方法完成將寄存器A1、輸入指令INAL,PORT;(AL)←(PORT)INAX,PORT;(AX)←(PORT)INAL,DX;(AL)←((DX))INAX,DX;(AX)←((DX))PORT為8位直接地址2、輸出指令OUTPORT,AL;(PORT)←(AL)OUTPORT,AX;(PORT)←(AX)OUTDX,AL;((DX))←(AL)OUTDX,AX;((DX))←(AX)(四)累加器專用傳送指令3、換碼指令XLATSRC;SRC僅做類型檢查或XLAT;(AL)←((BX)+(AL))例:MOVBX,offsetTABLEXLATTABLETABLE:DB0
DB1
DB4
DB9
DB16
DB251、輸入指令(四)累加器專用傳送指令3、換碼指令LEA(loadeffectiveaddress)LDS(loadDSwithpointer)LES(loadESwithpointer)1、有效地址傳送指令LEAreg16,SRC;(reg16)←SRC例:MSGdb‘Hello$’
LEADX,MSG;指令執(zhí)行后(DX)=2000H相當于:MOVDX,OFFSETMSG如果指令:MOVDX,MSG則:(DH)=‘e’,(DL)=‘H’(五)地址傳送指令LEA(loadeffectiveaddress2、指針送寄存器和DSLDSreg16,mem32;(reg16)←(mem32);(DS)←(mem32+2)把源操作數(shù)指定的4個字節(jié)傳送到指定的寄存器及DS寄存器中。例:VECTDW01F0HDW2018HLDSBX,VECT;執(zhí)行后:(DS)=2018H(BX)=01F0H3、指針送寄存器和ESLESreg16,mem32;(reg16)←(mem32);(ES)←(mem32+2)把源操作數(shù)指定的4個字節(jié)傳送到指定的寄存器及ES寄存器中。地址傳送指令2、指針送寄存器和DS3、指針送寄存器和ES地址傳送指令(六)標志寄存器傳送1、LAHF;(AH)←(flag低字節(jié))2、SAHF;(flag低字節(jié))←(AH)3、PUSHF;(SP)←(SP)-2,((SP)+1),(SP))←flag4、POPF;flag←((SP)+1),(SP)),(SP)←(SP)+2(六)標志寄存器傳送(六)標志寄存器傳送(六)標志寄存器傳送三、算術(shù)指令(一)加法指令1、ADDDST,SRC;(DST)←(SRC)+(DST)具體指令:ADDreg,regADDreg,memADDmem,regADDreg,immADDmem,immADDacc,imm2、ADCDST,SRC;(DST)←(SRC)+(DST)+CF具體指令:ADCreg,regADCreg,memADCmem,regADCreg,immADCmem,immADCacc,imm3、INCDST;(DST)←(DST)+1具體指令:INCreg16INCreg8INCmem三、算術(shù)指令(一)加法指令具體指令:算術(shù)類指令間接尋址程序:
LEASI,DATA1LEADI,DATA2LEABX,RESULTMOVAX,[SI]ADDAX,[DI]MOV[BX],AXMOVAX,[SI+2]ADCAX,[DI+2]MOV[BX+2],AX直接尋址程序:MOVAX,DATA1ADDAX,DATA2MOVRESULT,AXMOVAX,DATA1+2ADCAX,DATA2+2MOVRESULT+2,AX例:將數(shù)據(jù)段DATA1和DATA2中的32位二進制無符號數(shù)相加,結(jié)果存放在RESULT單元中算術(shù)類指令間接尋址程序:直接尋址程序:例:將數(shù)據(jù)段DATA1(二)減法指令1、SUBDST,SRC;(DST)←(DST)-(SRC)具體指令:SUBreg,regSUBreg,memSUBmem,regSUBreg,immSUBmem,immSUBacc,imm2、SBBDST,SRC;(DST)←(DST)-(SRC)-CF具體指令:SBBreg,regSBBreg,memSBBmem,regSBBreg,immSBBmem,immSBBacc,imm(二)減法指令1、SUBDST,SRC2、SBBDS5、CMPDST,SRC;(DST)-(SRC),僅影響標志具體指令:CMPreg,regCMPreg,memCMPmem,regCMPreg,immCMPmem,immCMPacc,imm3、DECDST;(DST)←(DST)-1具體指令:DECreg16DECreg8DECmem4、NEGDST;(DST)=0-(DST)具體指令:NEGregNEGmem(二)減法指令5、CMPDST,SRC3、DECDST4、NEG1、無符號數(shù)乘法MULSRC;(AX)←(AL)*(SRC)(DX,AX)←(AX)*(SRC)具體指令:MULreg8MULreg16MULmem8MULmem16(三)乘法指令2、有符號數(shù)乘法IMULSRC;(AX)←(AL)*(SRC)(DX,AX)←(AX)*(SRC)具體指令:IMULreg8IMULreg16IMULmem8IMULmem161、無符號數(shù)乘法(三)乘法指令2、有符號數(shù)乘法(四)除法指令1、無符號數(shù)除法指令DIVSRC;(AL)←(AX)/(SRC),(AH)←(AX)%(SRC)或(AX)←(DX,AX)/(SRC),(DX)
←(DX,AX)%(SRC)具體指令:DIVreg8DIVreg16DIVmem8DIVmem162、有符號數(shù)除法指令IDIVSRC;
操作與DIV相同具體指令:IDIVreg8IDIVreg16IDIVmem8IDIVmem163、字轉(zhuǎn)換成字節(jié)指令(有符號數(shù))CBW;若(AL)<80H則(AH)←0,否則(AH)←FFH。4、有符號字轉(zhuǎn)換成雙字指令CWD;若(AX)<8000H,則(DX)←0,否則(DX)←FFFFH.
(四)除法指令1、無符號數(shù)除法指令2、有符號數(shù)除法指令(五)BCD碼調(diào)整指令1、8086支持兩種BCD碼運算壓縮BCD碼,通常BCD碼。每個字節(jié)2位BCD碼。如:10010101B=95H,值為95非壓縮BCD碼,低4位為BCD碼,高4位為零。如:00000101B表示BCD碼5。加減運算非壓縮BCD碼高4位的值可不為0,乘除時高4位必須是0。2、壓縮BCD碼調(diào)整指令DAA;對加法運算結(jié)果(AL)進行BCD碼調(diào)整。DAS;對減法運算結(jié)果(AL)進行BCD碼調(diào)整。3、非壓縮BCD碼調(diào)整AAA;對加法運算非壓縮BCD碼進行調(diào)整,進位送(AH)中AAS;對減法運算非壓縮BCD碼進行調(diào)整AAM;對乘法運算非壓縮BCD碼進行調(diào)整AAD;對除法運算非壓縮BCD碼進行調(diào)整例:下列程序段執(zhí)行后(AL)=?CF=?MOVAL,89HADDAL,43HDAA(五)BCD碼調(diào)整指令1、8086支持兩種BCD碼運算3、非算術(shù)類指令例:將32位無符號數(shù)DATA1和DATA2相乘,結(jié)果存于RESULT中。DA1HDA1L*)DA2HDA2LDA1L2LHDA1L2LLDA1H2LHDA1H2LLDA2H1LHDA2H1LL+)DA1H2HHDA1H2HL算術(shù)類指令例:將32位無符號數(shù)DATA1和DATA2相乘,算術(shù)類指令LEASI,RESULTSUBAX,AXMOV[SI+4],AXMOV[SI+6],AXMOVAX,DATA1MULDATA2MOV[SI],AXMOV[SI+2],DXMOVAX,DATA1+2MULDATA2ADD[SI+2],AXADC[SI+4],DXADC[SI+6],0MOVAX,DATA1MULDATA2+2ADD[SI+2],AXADC[SI+4],DXADC[SI+6],0MOVAX,DATA1+2MULDATA2+2ADD[SI+4],AXADC[SI+6],DX算術(shù)類指令LEASI,RESULTMOVAX,DATA1四、邏輯指令2、ORDST,SRC;(DST)←(DST)|(SRC)具體指令ORreg,regORreg,memORmem,regORreg,immORmem,immORacc,imm3、NOTDST;(DST)←(DST)具體指令:NOTregNOTmem(一)邏輯運算指令1、ANDDST,SRC;(DST)←(DST)&(SRC)具體指令ANDreg,regANDreg,memANDmem,regANDreg,immANDmem,immANDacc,imm四、邏輯指令2、ORDST,SRC(一)邏輯運算指令邏輯指令4、XORDST,SRC;(DST)←(DST)^(SRC)具體指令XORreg,regXORreg,memXORmem,regXORreg,immXORmem,immXORacc,imm5、TESTDST,SRC;(DST)&(SRC),僅影響標志具體指令TESTreg,regTESTreg,memTESTreg,immTESTmem,immTESTacc,imm邏輯指令4、XORDST,SRC5、TESTDST,(二)移位指令1、邏輯左移指令SHLDST,count;;count可以為1,;也可以為CL做移位計數(shù)。具體指令:SHLreg,1SHLreg,CLSHLmem,1SHLmem,CL;移位和循環(huán)指令均雷同。2、算術(shù)左移指令SALDST,count;例:寫出3條指令將寄存器AX中的數(shù)據(jù)乘2。SALAX,1SHLAX,1ADDAX,AX(二)移位指令1、邏輯左移指令2、算術(shù)左移指令例:寫出3條指3、邏輯右移指令SHRDST,count;4、算術(shù)右移指令SARDST,count;5、循環(huán)左移指令ROLDST,count;6、循環(huán)右移指令RORDST,count;7、帶進位循環(huán)左移指令RCLDST,count;8、帶進位循環(huán)右移指令RCRDST,count;3、邏輯右移指令6、循環(huán)右移指令五、串處理指令(一)數(shù)據(jù)串傳送指令1、串傳送指令MOVSDST,SRC;DST與SRC做類型檢查,具體指令:MOVSB;((ES:DI))←((DS:SI)),(SI)←(SI)±1,(DI)←(DI)±1MOVSW;((ES:DI))←((DS:SI)),(SI)←(SI)±2,(DI)←(DI)±2其中,加、減地址指針SI和DI由FLAG中的DF決定,DF=0地址增加,DF=1地址減少。2、建立方向標志指令CLD;DF←0STD;DF←13、重復串操作直到
(CX)=0在串操作指令前,可加重復操作REP前綴,使串連續(xù)操作直到(CX)=0.例:REPMOVSB;以CX寄存器做計數(shù)器,每傳送一個數(shù)(CX)減1,直到(CX)為0。五、串處理指令(一)數(shù)據(jù)串傳送指令3、重復串操作直到串操作類指令例1:將1000H開始的10個字節(jié)移動到2000H開始的單元
MOV SI,1000H;置源操作數(shù)起始地址
MOV DI,2000H;置目的操作數(shù)起始地址
MOV AX,DS ;將DS和ES段統(tǒng)一,比PUSHDSMOVES,AX ;POPES要快
MOVCX,0AH ;初始化CX為10,移動10個字節(jié)
CLD ;使DF=0,使地址作增量變化
REPMOVSB ;(ES:DI)←(DS:SI),SI←SI+1,;(DI)←(DI)+1INT3 ;斷點指令串操作類指令例1:將1000H開始的10個字節(jié)移動到20004、存入串指令STOSDST;DST做類型檢查具體指令:STOSB;((ES:DI))←(AL),(DI)←(DI)±1STOSW;((ES:DI))←(AX),(DI)←(DI)±2由DF決定方向,可加入前綴REP。5、從串中取指令LODSSRC;SRC做類型檢查具體指令:LODSB;(AL)←((DS:SI)),(SI)←(SI)±1LODSW;(AX)←((DS:SI)),(SI)←(SI)±2地址增減由DF決定。串操作類指令4、存入串指令5、從串中取指令串操作類指令1、串比較指令CMPSSRC,DST;SRC和DST僅做類型檢查具體指令:CMPSB;((DS:SI))-((ES:DI)),(SI)←(SI)±1,(DI)←(DI)±1CMPSW;((DS:SI))-((ES:DI)),(SI)←(SI)±2,(DI)←(DI)±2串比較僅影響標志。地址增減由DF決定。2、條件重復前綴(1)相等或為0時重復REPZREPE執(zhí)行操作:若(CX)=0或ZF=0(比較不相等)時退出,否則繼續(xù)執(zhí)行。(2)不相等或不為0時重復REPNZREPNE執(zhí)行操作:若(CX)≠0且ZF=0(比較不相等)時繼續(xù)執(zhí)行,否則退出。(二)字符串掃描和比較指令1、串比較指令2、條件重復前綴(二)字符串掃描和比較指令3、串掃描指令SCASDST;DST做類型檢查具體指令:SCASB;(AL)-((ES:DI)),;(DI)←(DI)±1,影響標志SCASW;(AX)-((ES:DI)),;(DI)←(DI)±2,影響標志地址增減由DF決定??杉訔l件前綴。例:REPNZSCASB例:以ds:si為起始地址以NULL結(jié)束標志的字符串,計算其長度,結(jié)果存于(AX)中
movdi,si;movax,ds;moves,ax;es:di指向字符串
xoral,al;(al)清零
movcx,0ffffh;(cx)置初值
cldrepnzscasb;查找結(jié)束符
movax,cxnotax;(cx)含結(jié)束符長度
decax;去掉結(jié)束符
ret3、串掃描指令例:以ds:si為起始地址以NULL結(jié)束標志六、控制轉(zhuǎn)移指令(一)無條件轉(zhuǎn)移指令JMPTARGET;轉(zhuǎn)移到目的地址具體指令:JMPshort_label;(IP)<-(IP)+short_labelJMPnear_label;(IP)<-(IP)+near_labelJMPfar_label;(CS:IP)<-far_labelJMPmem16;間接轉(zhuǎn)移;(IP)<-(mem16)JMPreg16;間接轉(zhuǎn)移;(IP)<-(reg16)JMPmem32;間接轉(zhuǎn)移;(IP)<-(mem32),;(CS)<-(mem32+2)(二)條件轉(zhuǎn)移指令1、根據(jù)單個標志轉(zhuǎn)移JZshort_label;結(jié)果為0轉(zhuǎn)移JEshort_label;結(jié)果相等轉(zhuǎn)移測試條件:ZF=1JNZshort_label;結(jié)果不為0則轉(zhuǎn)移JNEshort_label;結(jié)果不相等則轉(zhuǎn)移測試條件:ZF=0六、控制轉(zhuǎn)移指令(一)無條件轉(zhuǎn)移指令(二)條件轉(zhuǎn)移指令JSshort_label;結(jié)果為負則轉(zhuǎn)移測試條件:SF=1JNSshort_label;結(jié)果非負則轉(zhuǎn)移測試條件:SF=0JNOshort_label;結(jié)果不溢出則轉(zhuǎn)移測試條件:OF=0JOshort_label;結(jié)果溢出則轉(zhuǎn)移測試條件:OF=1JPshort_label;奇偶為1則轉(zhuǎn)移JPEshort_label;偶轉(zhuǎn)移測試標志:PF=1JNPshort_label;奇偶為0則轉(zhuǎn)移JPOshort_label;奇轉(zhuǎn)移測試標志:PF=0JBshort_label;有借位轉(zhuǎn)移JNAEshort_label;不大于等于轉(zhuǎn)移JCshort_label;有進位轉(zhuǎn)移測試條件:CF=1JNBshort_label;無借位轉(zhuǎn)移JAEshort_label;大于等于轉(zhuǎn)移JNCshort_label;無進位轉(zhuǎn)移測試條件:CF=0條件轉(zhuǎn)移指令JSshort_label;結(jié)果為負則轉(zhuǎn)移JNPsh2、兩個無符號數(shù)比較轉(zhuǎn)移JB/JNAE/JC;CF=1JNB/JAE/JC;CF=0JBEshort_label;小于等于轉(zhuǎn)移JNAshort_label;不大于轉(zhuǎn)移測試條件:CF|ZF=1JNBEshort_label;不小于等于
;轉(zhuǎn)移JAshort_label;大于轉(zhuǎn)移測試條件:CF|ZF=03、兩個有符號數(shù)比較轉(zhuǎn)移JLshort_label;小于轉(zhuǎn)移JNGEshort_label;不大于等于轉(zhuǎn)移測試條件:SF^OF=1JNLshort_label;不小于轉(zhuǎn)移JGEshort_label;大于等于轉(zhuǎn)移測試條件:SF^OF=0JNLEshort_label;不小于等于轉(zhuǎn)移JGshort_label;大于轉(zhuǎn)移測試條件:(SF^OF)|ZF=0JLEshort_
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 代理公司居間合同
- 技術(shù)支持服務與合作框架協(xié)議
- 購物中心場地租賃合同
- 入股合伙人協(xié)議書
- 皮革買賣合同
- 企業(yè)生物科技研發(fā)戰(zhàn)略合作協(xié)議
- 2025上海玻璃購銷合同5篇
- 學會購物(教學設計)-2024-2025學年三年級上冊數(shù)學冀教版
- Unit 5 The colourful(教學設計)-2024-2025學年人教PEP版(2024)英語三年級上冊
- 第14課《背影》教學設計-2024-2025學年統(tǒng)編版語文八年級上冊
- GB/T 13145-2018冷藏集裝箱堆場技術(shù)管理要求
- 《城市管理綜合執(zhí)法問題研究國內(nèi)外文獻綜述》4800字
- 數(shù)據(jù)結(jié)構(gòu)英文教學課件:chapter4 Stacks and Queues
- 結(jié)構(gòu)化面試題型及套路
- 生殖崇拜專題知識講座
- 工業(yè)CT發(fā)展及應用課件
- DBJ50∕T-098-2019 城市綠化養(yǎng)護質(zhì)量標準
- 自動化腹膜透析(APD)的臨床應用課件
- 學前兒童發(fā)展心理學(第3版-張永紅)教學課件1754
- 2022牛排消費趨勢報告
- TPM╲t4Step Manul(三星TPM絕密資料)
評論
0/150
提交評論