版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二節(jié)8086/8088的指令系統(tǒng)數(shù)據(jù)傳送指令算術(shù)運(yùn)算指令邏輯運(yùn)算、移位、循環(huán)指令串操作指令控制轉(zhuǎn)移指令處理器控制指令指令的功能——該指令能夠?qū)崿F(xiàn)何種操作。通常指令助記符就是指令功能的英文單詞或其縮寫形式指令支持的尋址方式——該指令中的操作數(shù)可以采用何種尋址方式指令對(duì)標(biāo)志的影響——該指令執(zhí)行后是否對(duì)各個(gè)標(biāo)志位有影響,以及如何影響其他方面——該指令其他需要特別注意的地方,如指令執(zhí)行時(shí)的約定設(shè)置、必須預(yù)置的參數(shù)、隱含使用的寄存器等學(xué)習(xí)指令的注意事項(xiàng)
數(shù)據(jù)傳送指令可以實(shí)現(xiàn)CPU的內(nèi)部寄存器之間,CPU和存儲(chǔ)器之間,CPU和I/O端口之間的數(shù)據(jù)傳送。這類指令均含兩個(gè)操作數(shù),而且除SAHF指令和POPF指令外,其它的指令均不影響狀態(tài)標(biāo)志位中。3.2.1數(shù)據(jù)傳送類指令通用數(shù)據(jù)傳送指令(DataTransfer)1.基本傳送指令(MOV)
MOVdst,src;(src)←(dst)src:通用寄存器、段寄存器、存儲(chǔ)器操作數(shù)、立即數(shù);dst:通用寄存器、段寄存器、存儲(chǔ)器操作數(shù)。
功能:將源操作數(shù)src復(fù)制到目的操作數(shù)dst中,結(jié)果目的操作數(shù)的內(nèi)容等于源操作數(shù)的內(nèi)容,源操作數(shù)src的內(nèi)容不變。1)寄存器之間傳送
MOVAL,BL;通用寄存器之間MOVAX,DX;MOVAX,ES;通用寄存其與段寄存器MOVDS,AX;3)立即數(shù)送寄存器或存儲(chǔ)器
MOVAL,0FH;立即數(shù)送通用寄存MOV[BP+SI],2300H;立即數(shù)送存儲(chǔ)器2)寄存器和存儲(chǔ)器之間傳送
MOVAL,[BX];通用寄存器和存儲(chǔ)器之間MOV[BX+DI],DX;MOV[BX],ES;段寄存器和存儲(chǔ)器之間MOVDS,50H[BP+SI];(1)dst與src必須類型匹配,即同時(shí)是字節(jié)或字類型;(2)兩個(gè)操作數(shù)不允許同時(shí)為存儲(chǔ)器操作數(shù);(3)不允許使用CS段寄存器作目的操作數(shù);(4)兩個(gè)操作數(shù)不允許同時(shí)為段寄存器;(5)不允許使用立即數(shù)作目的操作數(shù);(6)不允許直接向段寄存器中傳送立即數(shù)。
使用MOV指令應(yīng)注意以下幾點(diǎn):例:錯(cuò)誤的MOV指令如下所示:MOVBL,AX;類型不匹配MOVDS,1000H;不允許立即數(shù)送段寄存器MOV[BX],[SI];不允許內(nèi)存操作數(shù)之間傳送MOVES,CS;不允許段寄存器之間傳送MOVCS,AX;CS不能作為目的操作數(shù)
存儲(chǔ)單元
段寄存器DS、ES、SS
通用寄存器
立即數(shù)8位、16位
段寄存器CS(MOV)數(shù)據(jù)傳送示意圖堆棧是一個(gè)按“后進(jìn)先出”原則操作的主存區(qū)域(暫存數(shù)據(jù)與地址),堆棧操作必須在SS段寄存器指向的堆棧中進(jìn)行;堆棧只有一個(gè)出口,即當(dāng)前棧頂;用堆棧指針寄存器SP指定。堆棧只有兩種基本操作:進(jìn)棧和出棧。對(duì)應(yīng)兩條指令:
PUSHsrc
POPdst2.堆棧操作指令
PUSHPOP堆棧作用:在調(diào)用一個(gè)過程時(shí),保存返回地址;暫時(shí)存放寄存器或存儲(chǔ)器單元操作數(shù)的內(nèi)容。
CPU通用寄存器入/出棧(PUSH/POPreg)
例如:PUSHAXPOPBX
段寄存器入/出棧(PUSH/POPsreg)
例如:PUSHCSPOPDS(CS除外)存儲(chǔ)器單元入/出棧(PUSH/POPmem)
例如:PUSH[BX+DI]POP[2000H]
入棧和出棧指令都有3種格式:(1)入棧指令PUSH指令操作:
①使堆棧指針SP減2;
②將一個(gè)字操作數(shù)存入堆棧頂部:((SP))←低8位數(shù),((SP+1))←高8位數(shù)例PUSHAX
若已知(AX)=1234H,(SS)=1050H,(SP)=000EH則指令操作為:(SP)=(SP)-2=000CH;棧頂?shù)腜A=(SS)×16+(SP)=1050CH②
(AX)的內(nèi)容1234H存入堆棧,指令操作后,堆棧情況如圖:1050EH1050DH(SP)→1050CH12H34H原棧頂現(xiàn)棧頂(2)出棧指令POP指令操作:
①把棧頂?shù)囊粋€(gè)字彈出送至指定的目的操作數(shù);
②然后堆棧指針SP加2。如在上例完成后,執(zhí)行POPDS指令:1050CH1050DH(SP)→1050EH12H34H1234
(DS)出棧后的SP和SS的值SP=000EHSS=1050HSS=1050H(不變)通過PUSH和POP命令可以實(shí)現(xiàn)數(shù)據(jù)的傳送,但要注意堆棧先進(jìn)后出的原則。8086通過賦值SS和SP建立堆棧建棧
MOVAX,1050HMOVSS,AXMOVSP,000EH
1050EH
10500H初始棧頂SP=000EHSS=1050H堆棧起地址建棧后SP和SS的值SP=000EHSS=1050H高低堆棧的特點(diǎn)與注意問題①堆棧操作指令中,目的操作數(shù)是隱含的,這個(gè)操作數(shù)就是(SP)指示的棧頂存儲(chǔ)單元。
②8086堆棧操作都是字操作,而不允許對(duì)字節(jié)操作,例如PUSHAL是錯(cuò)誤的。③每執(zhí)行一條入棧指令,(SP)自動(dòng)減2,入棧時(shí),高位數(shù)先入棧;執(zhí)行彈出時(shí),正好相反,每彈出一個(gè)字,(SP)自動(dòng)加2。④CS寄存器可入棧,但不能隨意彈出一個(gè)數(shù)據(jù)到CS。⑤在使用堆棧操作保存多個(gè)寄存器內(nèi)容和恢復(fù)多個(gè)寄存器時(shí),要按“先進(jìn)后出”原則來組織入棧和出棧的順序。
⑥堆棧操作遵循先進(jìn)后出原則,但可用存儲(chǔ)器尋址方式隨機(jī)存取堆棧中的數(shù)據(jù),如:MOVAX,[BP]。指令格式:XCHGoprd1,oprd2;指令功能:交換oprd1與oprd2的內(nèi)容3.交換指令XCHG(Exchange)寄存器與寄存器之間交換數(shù)據(jù)寄存器與存儲(chǔ)器之間交換數(shù)據(jù)。例如:
XCHGBL,CL;(BL)與(CL)間進(jìn)行字節(jié)交換
XCHG(BX+SI),DX;(DX)與采用基址變址尋址方式尋址的字地址內(nèi)容進(jìn)行字交換(1)不能在存儲(chǔ)器與存儲(chǔ)器之間對(duì)換數(shù)據(jù);(2)任一個(gè)操作數(shù)都不能是段寄存器,也不能使用立即數(shù)。(3)兩操作數(shù)類型必須一致。
指令格式:XLAT;AL←((BX)+(AL))指令功能:BX指定的內(nèi)存表格的首地址、AL指定的序號(hào)處一個(gè)字節(jié)的表數(shù)據(jù)取出賦給AL查表范圍:255個(gè)字節(jié);以BX為表基地址,則表存放在數(shù)據(jù)段,以DS為段基址;XLAT指令有兩種格式——帶或不帶表首地址。4.換碼指令(查表指令)例求數(shù)字0~9對(duì)應(yīng)的7段顯示代碼:方法:先建立表格如圖示,并將表首地址送BX中。取待查表項(xiàng)于AL中,再用查表指令求得對(duì)應(yīng)的7段顯示代碼。程序段如下:TABLEDB40H,79H,24H,30H,19HDB12H,02H,78H,00H,18HMOVBX,TABLEMOVAL,6XLATTABLETABLE40792430191202780018地址傳送指令1.取有效地址指令LEA
(LoadEffectiveAddres)格式:LEAdst,src;功能:將存儲(chǔ)器操作數(shù)SRC的有效地址送至指定的16位通用寄存器。例如:
LEASP,[0502H];執(zhí)行后,使堆棧指針(SP)=0502HLEABX,[BP+SI];執(zhí)行后,BX中為(BP)+(SI)的值地址傳送指令是用來對(duì)地址進(jìn)行傳送。這類指令傳送到16位目標(biāo)寄存器中的是存儲(chǔ)器操作數(shù)的有效地址EA。LEA指令與MOV指令的區(qū)別:LEASI,BUFF指令是將標(biāo)號(hào)BUFF的偏移地址送入寄存器中;MOVSI,BUFF指令是將標(biāo)號(hào)BUFF所指存儲(chǔ)單元的內(nèi)容送入SI。LEASI,BUFF;執(zhí)行后:(SI)=0002HMOVSI,BUFF;執(zhí)行后:(SI)=0048HBUFF=若(DS)=2000H,BUFF=02H,存儲(chǔ)區(qū)內(nèi)容如圖,則:0120002H4800FEFF20003H20004H20005H20001H20000H2.雙字地址指針?biāo)虳S和寄存器指令格式:LDSdst,src;功能:將源操作數(shù)src指定的4個(gè)連續(xù)字節(jié)單元內(nèi)容(地址指針)分別送入指令指定的寄存器dst及DS中。其中:低16位送到dst,高16位送到DS。3.雙字地址指針?biāo)虴S和寄存器指令格式:LESdst,src;功能:將源操作數(shù)指src定的4個(gè)連續(xù)字節(jié)單元內(nèi)容(地址指針)分別送入指令指定的寄存器dst及ES中。其中:低16位送到dst,高16位送到ES。使用LDS和LES指令時(shí)應(yīng)注意:(1)指定的寄存器dst,不能是段寄存器;(2)src一定是存儲(chǔ)器操作數(shù)。例:若已知(DS)=C000H,(C2480H)=1357H,(C2482H)=2468H57H13H68H24HC2480HC2481HC2482HC2483HLDSSI,[2480]13572468SIDSLDSSI,[2480]狀態(tài)標(biāo)志傳送指令通過這類指令讀出當(dāng)前標(biāo)志寄存器中各狀態(tài)位的內(nèi)容,也可以對(duì)標(biāo)志寄存器的狀態(tài)設(shè)置新的值。這類指令共有4條,均為單字節(jié)指令,源操作數(shù)和目的操作數(shù)都隱含在操作碼中。指令格式:1.LAHF;(AH)←(F的低8位)2.SAHF;(F的低8位)←(AH)3.PUSHF;(SP)←(SP)-2,((SP)+1,(SP))←(F)4.POPF;(F)←((SP)+1,(SP)),(SP)←(SP)+2OF1115DF10IF9TF8SF7ZF65AF43PF21CF0FLAGS說明:
①LAHF/SAHF指令是寄存器AH與標(biāo)志寄存器F的低字節(jié)之間完成的字節(jié)型數(shù)據(jù)傳送。
②PUSHF/POPF指令是標(biāo)志寄存器F與堆棧間進(jìn)行的字型數(shù)據(jù)傳送。
③指令SAHF/POPF將影響標(biāo)志位。例輸入輸出指令1)、直接尋址
INAL,nOUTn,ALINAX,NOUTN,AX尋址空間為:0~255字節(jié)INAL,20HINAX,30HOUT46H,ALOUT80H,AX例2)、間接尋址
INAL,DXOUTDX,ALINAX,DXOUTDX,AX尋址空間為:0000H~FFFFHMOVDX,1000HINAL,DX
INAX,DXOUTDX,AL§數(shù)據(jù)傳送類指令練習(xí)指出下列指令中的非法指令?
MOVBX,AL(2)MOVBH,ALMOV100,CL(4)MOVCL,100MOVSS,2400H(6)XCHGAH,ALMOVAL,AL(8)XCHG200,ALOUT21H,AL(10)OUT21H,AH(11)OUT260H,AL(12)MOV[BX],BX(13)MOV[AX],CX(14)MOV[BX],BL
(1)、(3)、(5)、(7)、(8)、(10)、(11)、(13)為非法指令算術(shù)運(yùn)算類指令用來執(zhí)行二進(jìn)制的算術(shù)運(yùn)算:加、減、乘、除。算術(shù)運(yùn)算指令的特點(diǎn)有:1)在加、減、乘、除基本運(yùn)算指令中,除±1指令外,都具有兩個(gè)操作數(shù);2)這類指令執(zhí)行后,除±1指令不影響CF標(biāo)志外,對(duì)CF,OF,ZF,SF,PF和AF等6位標(biāo)志均可產(chǎn)生影響,3-2-2算術(shù)運(yùn)算指令加法運(yùn)算指令1.加法指令(ADD)指令格式:ADD
dst,src
;dst←dst+src標(biāo)志寄存器:影響AF、CF、PF、OF、ZF、SF目的操作數(shù):通用寄存器、存儲(chǔ)器;
源操作數(shù):通用寄存器、存儲(chǔ)器、立即數(shù);操作數(shù)類型:字或字節(jié)注意點(diǎn):兩操作數(shù)必須類型一致;兩操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)。
例:
ADDAX,0F0F0H,設(shè)指令執(zhí)行前(AX)=5463H;
(AX)=0101010001100011+、1111000011110000[1]0100010101010011→AX
進(jìn)位執(zhí)行后,結(jié)果(AX)=4553H,且CF=1,ZF=0,SF=0,OF=02.帶進(jìn)位加法指令(AddwithCarry
)指令格式:ADCdst,src
標(biāo)志寄存器:影響OF、CF、SF、ZF、AF、PF;
目的操作數(shù):通用寄存器、存儲(chǔ)器;源操作數(shù):通用寄存器、存儲(chǔ)器、立即數(shù);操作數(shù)類型:字或字節(jié)用法:
多字節(jié)數(shù)相加例:有兩個(gè)4字節(jié)無符號(hào)數(shù)放在2000H和3000H單元中,低位在前,高位在后,將兩個(gè)數(shù)相加,結(jié)果放2000H開始的單元中。
10008432H+20007F00H=?1).算法分析:1).可以將兩個(gè)4字節(jié)無符號(hào)數(shù)相加看成2個(gè)字相加;2).兩個(gè)數(shù)的低位字相加后,將可能產(chǎn)生進(jìn)位CF;3).高位字相加,應(yīng)再加上進(jìn)位位;
2000H3000H32840010007F0020SIDI2).程序:
CLC ;清進(jìn)位MOVSI,2000H ;取第一個(gè)數(shù)的首地址MOVAX,[SI] ;第一個(gè)數(shù)的低16位送到AXMOVDI,3000H ;取第二個(gè)字的首地址ADDAX,[DI] ;第一個(gè)數(shù)和第二個(gè)數(shù)相加MOV[SI],AX ;送低16位結(jié)果倒2000H單元MOVAX,[SI+2] ;第二個(gè)數(shù)的高16位送AXADCAX,[DI+2] ;高16位數(shù)據(jù)相加MOV[SI+2],AX3.加1指令
INC(Increment)指令格式:INCdst指令功能:dst←dst+1標(biāo)志寄存器:影響OF、SF、ZF、AF、PF;
操作數(shù):8位/16位通用寄存器或存儲(chǔ)器;INCCX;將CX的內(nèi)容加1后再送回CX中。INCBYTEPTR[BX+100H];將(BX)+100H所指的單元內(nèi)容加1后,送回此單元。注意:指令不影響CF標(biāo)志,當(dāng)用INC指令進(jìn)行循環(huán)計(jì)數(shù),試圖以判斷CF=1結(jié)束循環(huán),是達(dá)不到目的的,而且還會(huì)導(dǎo)致程序運(yùn)行進(jìn)入死循環(huán)1.減法指令(
Subtract
)指令格式:SUB
dst,src
;dst←dst+src標(biāo)志寄存器:影響AF、CF、PF、OF、ZF、SF目的操作數(shù):通用寄存器、存儲(chǔ)器;
源操作數(shù):通用寄存器、存儲(chǔ)器、立即數(shù);注意點(diǎn):兩操作數(shù)必須類型一致;兩操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)。
減法類指令SUBAX,BX;AX內(nèi)容減去BX中的內(nèi)容,結(jié)果在AX中SUBSI,[DI十100H];SI內(nèi)容減法(DI)+100H和(DI)+101H所指的兩單元內(nèi)容,結(jié)果在SI中;例:SUBWORDPTR[DI],1000H;(DI)所指的字單元;中的16位數(shù)減去立即數(shù)1000H,結(jié)果在字單元中SUB[BP+2],CL;將SS段中的(BP)+2所指的單元;內(nèi)容,減去CL內(nèi)容,結(jié)果在堆棧的該單元中。SUBSI,SI
;SI=0
;OF=0,SF=0,ZF=1,PF=1,CF=0
;寄存器自減清零2.帶借位的減法指令(SubtractwithBorrow
)
指令格式:SBBdst,src;dst←dst-src-CF
指令功能:SBB指令將目的操作數(shù)減去源操作數(shù),再減去借位CF(進(jìn)位),結(jié)果送到目的操作數(shù)。
SBB指令與ADC指令一樣,主要用于與SUB配合,實(shí)現(xiàn)多字節(jié)減法運(yùn)算。
例如:SBBAX,2010H的運(yùn)算為:(AX)←(AX)-2010H-(CF)
3.減1指令(DEC)指令格式:DECdst;dst←dst-1減1指令只有1個(gè)操作數(shù)dst,和INC指令類似,dst可為寄存器或存儲(chǔ)器單元。DECCX;CX內(nèi)容減1后,送回CX;
DECBYTEPTR[DI+2];將(DI)+2所指字節(jié)單元內(nèi)容減1后,送回該單元。需要注意的是:DEC指令和INC指令一樣,執(zhí)行后對(duì)CF不產(chǎn)生影響。4.求補(bǔ)指令NEG指令格式:NEGdst;dst←0-dst指令功能:
對(duì)操作數(shù)執(zhí)行求補(bǔ)運(yùn)算,即用零減去操作數(shù),然后結(jié)果返回操作數(shù);或表示為將操作數(shù)按位取反后加1。標(biāo)志寄存器:影響AF、PF、OF、ZF、SF,CF=1;
操作數(shù):8位/16位通用寄存器或存儲(chǔ)器。例:MOVAH,5NEGAH;AH=11111011B,是-5(補(bǔ)碼)MOVAX,-6(FFFAH)NEGAX;AX=0006H,是+6
注意點(diǎn):連同符號(hào)一起求補(bǔ),稱為變補(bǔ)。NEG應(yīng)用舉例設(shè)在內(nèi)存中從AREA1開始存放有100個(gè)帶符號(hào)數(shù),現(xiàn)需要將這些數(shù)的絕對(duì)值存放在以AREA2開始的內(nèi)存中;開始初始化置源地址,置目的地址指針置循環(huán)次數(shù)取一個(gè)帶符號(hào)數(shù)負(fù)數(shù)?求補(bǔ)送存地址指針+1循環(huán)次數(shù)-1循環(huán)次數(shù)=0?結(jié)束NYNY5.比較指令CMP
(Compare)
指令格式:CMPdst,src;dst-src指令功能:
CMP指令執(zhí)行的功能與SUB指令類似,但結(jié)果不回送目的操作數(shù),只是使結(jié)果影響標(biāo)志位。標(biāo)志寄存器:OF,SF,ZF,PF和CF;
操作數(shù):8位/16位通用寄存器或存儲(chǔ)器用法:由受影響的標(biāo)志位狀態(tài)便可判斷兩操作數(shù)比較的結(jié)果。比較指令執(zhí)行后目的-源(N1-N2)各標(biāo)志位的情況
1)N1=N2CFZFSFOF01002)無符號(hào)數(shù)N1>N200--N1<N210--3)
帶符號(hào)數(shù)N1<N2-010N1<N2-001N1>N2-000N1>N2-011關(guān)注ZF關(guān)注CF關(guān)注SF和OF乘法指令乘法指令中有兩個(gè)操作數(shù),其中一個(gè)是隱含固定在AL或AX中。1.無符號(hào)數(shù)的乘法指令MUL(Multiply
)指令格式:
MULsrcAL操作數(shù)AHAL(8位)(8位)(16位)AX操作數(shù)DXAX(16位)(16位)(32位)例如:MULBL;AL中和BL中的8位數(shù)相乘,乘積在AX中;MULCX;AX中和CX中的16位數(shù)相乘,乘積在DX和
;AX中;MULBYTEPTR[DI];AL中和(DI)所指的字節(jié)單元;中的8位數(shù)相乘,乘積在AX中MULWORDPTR[SI];AX中和(SI)所指的字單元中的
;16位數(shù)相乘,結(jié)果在DX中標(biāo)志寄存器:字節(jié)乘:若乘積高8位AH不為0,則CF=OF=1,若乘積高8位AH=0,則CF=OF=0;字乘:若乘積高16位DX不為0,則CF=OF=1,若乘積高16位DX=0,則CF=OF=0;操作數(shù):可以是通用寄存器、存儲(chǔ)器,不能是立即數(shù)。指令格式:
IMULsrc符號(hào)數(shù)乘法指令指令功能:IMUL指令和MUL指令在功能和格式上類似,只是要求兩個(gè)乘數(shù)均必須為帶符號(hào)數(shù)。例如:IMULAX;AX中和AX中的16位帶符號(hào)數(shù)自乘,;結(jié)果在DX和AX中IMULBYTEPTR[BX];AL中和(BX)所指的字節(jié)單元中的
;8位帶符號(hào)數(shù)相乘,結(jié)果在AX中標(biāo)志寄存器:若乘法結(jié)果AH或DX包含有效值,則OF=1、CF=1,
若乘法結(jié)果AH或DX只是低半部分的符號(hào)擴(kuò)展,則OF=0、CF=0
2.帶符號(hào)數(shù)的乘法指令(IntegerMultiply)例:比較無符號(hào)數(shù)和帶符號(hào)數(shù)乘法指令設(shè)指令執(zhí)行前:(AL)=A4H(BL)=12H(A4H)無符號(hào)數(shù)帶符號(hào)數(shù)164D-92D(12H)無符號(hào)數(shù)帶符號(hào)數(shù)18D
18D執(zhí)行IMUL后:(AX)=F988H=-1656DCF=1,OF=1執(zhí)行MUL后:(AX)=0B88H=2952D CF=1,OF=1IMUL BLMUL BL除法指令(Division)
除法指令有兩個(gè)操作數(shù),其中被除數(shù)隱含固定在AX中(除數(shù)為8位時(shí))或DX,AX中(除數(shù)為16位時(shí))。
1.無符號(hào)數(shù)除法指令
DIVsrc
指令格式:DIVsrc
無符號(hào)除法指令
指令功能:字節(jié)除:AL(商)←(AX)/(src),余數(shù)在AH中,
字除:
AX(商)
←(DX、AX)/(src),余數(shù)在DX中。
若除數(shù)為0,或商超過AL(字節(jié)除)或AX(字除)所能存放的最大值(FFH或FFFFH)時(shí),系統(tǒng)會(huì)自動(dòng)產(chǎn)生0類(除法除出錯(cuò))中斷,且商和余數(shù)都不確定。
指令格式:IDIVsrc指令功能:字節(jié)除:AL(商)←(AX)/(src),余數(shù)在AH中,字除:AX(商)←(DX、AX)/(src),余數(shù)在DX中。IDIV指令用于兩個(gè)帶符號(hào)數(shù)相除,其功能和對(duì)操作數(shù)長(zhǎng)度的要求和DIV指令類似,本指令執(zhí)行時(shí),將被除數(shù)、除數(shù)都認(rèn)作帶符號(hào)數(shù)。注意:余數(shù)的符號(hào)和被除數(shù)的符號(hào)相同。當(dāng)商超過AL或AX所能存放的范圍值-128~+127(字節(jié)除)或-32768~+32767(字除),時(shí),系統(tǒng)會(huì)自動(dòng)產(chǎn)生0(除法錯(cuò))類中斷。指令執(zhí)行后不產(chǎn)生有效標(biāo)志2.帶符號(hào)數(shù)的除法指令I(lǐng)DIV3.將字節(jié)擴(kuò)展成字的指令CBW(ConvertBytetoWord
)
指令系統(tǒng)要求被除數(shù)長(zhǎng)度是除數(shù)的兩倍,若不滿足可將被除數(shù)擴(kuò)展,字節(jié)擴(kuò)展指令用于對(duì)帶符號(hào)數(shù)的擴(kuò)展。指令格式:CBW指令功能:將AL寄存器中的符號(hào)位擴(kuò)展到AH中,從而使AL中的8位數(shù)據(jù)擴(kuò)展成為AX中的16位數(shù)。注意:符號(hào)擴(kuò)展雖然使數(shù)據(jù)位數(shù)加長(zhǎng),但數(shù)據(jù)大小并沒有改變,擴(kuò)展的高部分僅是低部分的符號(hào)擴(kuò)展。應(yīng)用:遇到兩個(gè)帶符號(hào)的字節(jié)數(shù)相除時(shí),應(yīng)先執(zhí)行CBW指令,產(chǎn)生一個(gè)雙倍長(zhǎng)度的被除數(shù),否則,不能正確執(zhí)行除法操作。CBW執(zhí)行后,不影響標(biāo)志位。指令格式:
CWD(ConvertWordtoDoubleWord
)指令功能:將AX中數(shù)的符號(hào)位擴(kuò)展到整個(gè)DX中。CWD指令和CBW一樣,用于帶符號(hào)數(shù)擴(kuò)展,其功能是將AX寄存器中的符號(hào)位擴(kuò)展到DX中,從而得到(DX),(AX)組成的32位雙字。例:MOVAL,-16;AL=0F0H(-16)
CBW;AX=0FFF0H(-16)
CWD;DXAX=0FFFFFFF0H(-16)
IDIVBX;DX←余數(shù),AX←商4.將字?jǐn)U展成雙字的指令CWD70AL70AH015AXDX150CBWCWD字節(jié)擴(kuò)展到字指令CBW和字?jǐn)U展到雙字CWD示意圖:例:如果在內(nèi)存中有一個(gè)緩沖區(qū)BUFFER,如果前兩個(gè)字節(jié)為一個(gè)16位帶符號(hào)的被除數(shù),第3,4字節(jié)為一個(gè)帶符號(hào)的除數(shù),第5,6字節(jié)放結(jié)果的商,7,8字節(jié)放余數(shù)。 則: LEABX,BUFFER ;偏移量到BX MOVAX,[BX] ;BX指向內(nèi)容(被除數(shù))到AX CWD ;符號(hào)擴(kuò)展 IDIV[BX+2] ;16位帶符號(hào)除法 MOV[BX+4],AX ;商到BUFFER+4地址處 MOV[BX+6],DX ;余到BUFFER+6地址處指令格式:DAA(DecimalAdjustforaddition)指令功能:DAA指令用于對(duì)壓縮的BCD碼相加的結(jié)果進(jìn)行調(diào)整,使結(jié)果仍為壓縮的BCD碼。標(biāo)志寄存器:影響CF、SF、ZF、AF、PF;
調(diào)整方法:指令執(zhí)行時(shí),先對(duì)相加結(jié)果進(jìn)行測(cè)試,若低4位(或高4位)大于9(非法碼)或產(chǎn)生進(jìn)位CF或輔助進(jìn)位AF時(shí),DAA自動(dòng)對(duì)低4位(或高4位)進(jìn)行加6的調(diào)整。注意點(diǎn):因調(diào)整是在AL中進(jìn)行,因此加法運(yùn)算后,必須把結(jié)果放在AL中;BCD碼運(yùn)算時(shí),必須用調(diào)整指令。1.加法十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令2.十進(jìn)制減法調(diào)整指令(DAS)
指令格式:DAS
指令功能:對(duì)在AL中的兩個(gè)壓縮型BCD數(shù)相減的結(jié)果,調(diào)整成正確的壓縮型BCD數(shù)在AL中;
用法:DAS與DAA對(duì)加法結(jié)果進(jìn)行調(diào)整的作用相似,不同的是DAS對(duì)結(jié)果是進(jìn)行減6的調(diào)整。該指令執(zhí)行后,對(duì)AF,CF,PF,SF和ZF均產(chǎn)生影響,但OF沒有意義。3.非壓縮的十進(jìn)制數(shù)加法調(diào)整指令指令格式:AAA(unpackedBCD[ASCII]adjustforaddition
)指令功能:AL←對(duì)AL中的加法結(jié)果調(diào)整為非壓縮BCD碼AH←AH+調(diào)整的進(jìn)位AAA指令用于對(duì)非壓縮BCD碼相加結(jié)果進(jìn)行調(diào)整,調(diào)整操作仍在AL中進(jìn)行,調(diào)整后的結(jié)果在AX中。
4.非壓縮十進(jìn)制數(shù)減法調(diào)整指令(AAS)指令格式:AAS指令功能:AAS指令用于對(duì)非壓縮BCD碼相減結(jié)果進(jìn)行調(diào)整,也是緊跟在減法指令之后,調(diào)整后的結(jié)果仍為非壓縮的BCD碼。
AAS指令執(zhí)行后,只影響AF,CF特征,而OF,PF,SF和ZF都沒有意義。指令格式:
AAM指令功能:AAM指令用于對(duì)8位的非壓縮BCD碼的乘積AX內(nèi)容進(jìn)行調(diào)整。調(diào)整后的結(jié)果仍為一個(gè)正確的非壓縮BCD碼,放回AX中。其中高位非壓縮型BCD數(shù)在AH中,低位非壓縮型BCD數(shù)在AL中;
標(biāo)志寄存器:對(duì)PF,SF,ZF產(chǎn)生影響,對(duì)OF,AF和CF無意義。注意點(diǎn):AAM緊跟在乘法指令之后,因?yàn)锽CD碼總是當(dāng)作無符號(hào)數(shù)看待,所以對(duì)非壓縮BCD相乘是用MUL指令,而不是用IMUL指令。5、非壓縮十進(jìn)制乘法調(diào)整指令例
求09X04的程序段為:MOVAL,09MOVCL,04;MULCL;(AL)X(CL)→(AX)=24HAAM;結(jié)果:(AH)=03H,(AL)=06H壓縮BCD碼相乘后,對(duì)所得結(jié)果無法調(diào)整,因此8086指令系統(tǒng)沒有提供對(duì)壓縮BCD碼乘法的調(diào)整指令。指令格式:AAD指令功能:用在兩位非壓縮型BCD數(shù)在相除之前,將AX中存放的非壓縮BCD碼表示的十進(jìn)制數(shù)調(diào)整為二進(jìn)制數(shù)。使得兩個(gè)未壓縮的十進(jìn)制數(shù)相除之后可得到非壓縮的BCD數(shù)結(jié)果,商在AL中,余數(shù)在AH中;標(biāo)志寄存器:影響PF、SF、ZF。
注意點(diǎn):該指令必須放在除法指令之前。對(duì)十進(jìn)制數(shù)進(jìn)行除法運(yùn)算時(shí),和乘法一樣,要求除數(shù)、被除數(shù)都用非壓縮的BCD碼,否則,不能進(jìn)行調(diào)整。6.非壓縮十進(jìn)制除法調(diào)整指令例:要實(shí)現(xiàn)0103÷06=02余01,程序段如下:MOVAX,0103H;取被除數(shù)MOVBL,06;取除數(shù)AAD;調(diào)整為:(AX)=000DHDIVBL;相除,得商(AL)=02,余數(shù)(AH)=13-2-3、邏輯運(yùn)算指令、移位指令8086的邏輯運(yùn)算指令包括AND(與),OR(或),XOR(異或),TEST(測(cè)試)和NOT(非)5條指令。
特點(diǎn):
①按位操作,②根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對(duì)AF未定義;③操作數(shù)與ADD、SUB等一樣
目的操作數(shù):通用寄存器、存儲(chǔ)器源操作數(shù):通用寄存器、存儲(chǔ)器、立即數(shù)
兩操作數(shù)不能都是存儲(chǔ)器操作數(shù)
④單操作數(shù)邏輯指令NOT不影響標(biāo)志位邏輯運(yùn)算邏輯指令:TESTsrcdstNOTANDORXOR0010000100111010111101101.邏輯“與”運(yùn)算AND指令格式:ANDdst,src指令功能:dst←dst∩src標(biāo)志寄存器:影響SF、ZF、PF,OF=0、CF=0,AF不確定
用AND指令可對(duì)指定位或指定的一些位進(jìn)行屏蔽(清零)。
例如:ANDAL,0FH;將AL中的高4位清零
0FH稱為屏蔽字,屏蔽字中的0對(duì)應(yīng)于需要清0的位。
2.邏輯或運(yùn)算OR
指令格式:ORdst,src
指令功能:dst←dst∨src其余同AND指令
用OR指令可對(duì)一些指定位置1。例如:ORAL,80H可將AL中的最高位置1,其他位保持不變。3.邏輯非運(yùn)算NOTNOTreg/mem;reg/mem←reg/mem標(biāo)志寄存器:不影響;操作數(shù):通用寄存器、存儲(chǔ)器,指令功能:按位取反,原來是“0”的位變?yōu)椤?”;原來是“1”的位變?yōu)椤?”指令格式:例如:
NOTBX;(BX)變反碼,結(jié)果送回BX中;
NOTBYTEPTR(1000H);將1000H單元中內(nèi)容變反碼后,;送回1000H單元
4.邏輯異或指令XOR
指令格式:XORdst,src;dst←dst⊕src用法1:XORAX,AX在清CF和影響SF,ZF,PF的同時(shí),也清除AX本身用法2:用XOR指令可以比較兩個(gè)操作數(shù)是否相同。例如:XORAL,3CH,若執(zhí)行后,ZF=1,說明(AL)=3CH,否則,就不等于3CH;用法3:通過XOR指令用“1”與某數(shù)的對(duì)應(yīng)位異或,可將該位取反,用“0”與某數(shù)的對(duì)應(yīng)位異或,可將指定位不變;
其他與AND、OR指令相同例如:XORAL,0FH若指令執(zhí)行前(AL)=3AH,其操作結(jié)果為00111010⊕0000
111100110101執(zhí)行后,(AL)=35H
4.測(cè)試指令TEST
TEST指令和AND指令執(zhí)行同樣的操作,對(duì)兩個(gè)操作數(shù)執(zhí)行邏輯與運(yùn)算,結(jié)果并不送目的操作數(shù),僅按AND指令影響標(biāo)志。TESTdest,src ;dest∧src
AND與TEST指令的關(guān)系,同SUB與CMP指令的關(guān)系一樣注意點(diǎn):TEST指令執(zhí)行后,目的操作數(shù)的值保持不變。TEST指令一般用來檢測(cè)指定位是1還是0TESTAL,80H;測(cè)AL的最高位D7是否為1,——由此可判正、負(fù)數(shù);TEST[BX],01H;測(cè)(BX)所指存儲(chǔ)單元的最低位D0是否為1,若是,ZF=0,否則ZF=1由此可判斷該數(shù)是奇數(shù),還是偶數(shù)例、使AL中的數(shù),第0、1位取反。MOVAL,51H;送操作數(shù)XORAL,03H;送特征數(shù)00000011HLT;暫停
01010001(AL)
XOR0000001101010010例、測(cè)試AL中的第0、1、2位是否為零。MOVAL,40HTESTAL,07H;測(cè)AL的0、1、2位HLT
01001000AND0000011100000000邏輯指令小結(jié)AND指令用于對(duì)一個(gè)數(shù)據(jù)的指定位清零OR指令用于對(duì)一個(gè)數(shù)據(jù)的指定位置1NOT指令用于取反碼,再加一,得補(bǔ)碼XOR指令用于對(duì)寄存器清零TEST指令用于測(cè)試一個(gè)數(shù)據(jù)的指定位是1還是0SHLdst,count;邏輯左移SHRdst,count;邏輯右移SALdst,count;算數(shù)左移SARdst,count;算數(shù)右移CML00MLCCML0MLC非循環(huán)移位指令注意:移位指令影響標(biāo)志位CF、OF、PF、SF和ZF。如果只移一位,指令中用1指出移位的位數(shù),如果超過1位,必須用CL預(yù)先指明移位的位數(shù)。例1:SALDX,1;DX中的數(shù)左移1位MOVCL,4SALAX,CL;AX中的數(shù)左移4位SHLAL,CL;SHRAL,CL;AL中的數(shù)右移4位例2、將兩個(gè)非壓縮BCD碼(高位存BL,低位存于AL中),轉(zhuǎn)換成一個(gè)壓縮的BCD碼,存于AL中。0000****BL0000****ALOR****0000BL
SHL程序段:MOVCL,4SHLBL,CLORAL,BLHLT例2、將AX中的內(nèi)容乘以10。左移一位,乘以2;右移一位,除以2。程序段:MOVBX,AXMOVCL,2SHLAX,CL;左移2位,乘以4ADDAX,BX;AX為原來5倍SHLAX,1;AX為原來的10倍HLT循環(huán)移位指令ROLdst,count;左小循環(huán)RORdst,count;右小循環(huán)RCLdst,count;左大循環(huán)RCRdst,count;右大循環(huán)例1、ROLAL,1AL:1001000100100011例2、MOVCL,2ROLBH,CLBH:10101111
10111110算術(shù)、邏輯移位可用于:改變數(shù)據(jù)二進(jìn)制位的位置(丟失移出的位)二進(jìn)制的整次冪的乘法(左移)、除法(右移)算術(shù)移位用于帶符號(hào)數(shù)操作邏輯移位用于無符號(hào)數(shù)操作循環(huán)移位可用于:改變數(shù)據(jù)二進(jìn)制位的位置(不丟失移動(dòng)的位)習(xí)題1、假設(shè)DL=10111001B,CL=3,指令SARDL,CL執(zhí)行后DL=?2、假設(shè)一個(gè)48位數(shù)存放在DX:AX:BX中,請(qǐng)編程把這個(gè)48位數(shù)乘以2。DL=10000111BSALBX,1RCLAX,1RCLDX,1MOVCL,3b.MOVCL,7MOVBX,0B7HMOVBX,8D16HROLBX,1SHRBX,CLRORBX,CLa.答案BX=C02DHb.答案BX=011AH3、下列程序執(zhí)行后,BX=?3-2-4、串(String)操作指令字串傳送:MOVSB/MOVSW字串比較:CMPSB/CMPSW字串掃描:SCASB/SCASW字串裝入:LODSB/LODSW字串存儲(chǔ):STOSB/STOSW一、串操作的特點(diǎn)1、SI尋址源操作數(shù),段地址在DS,DI尋址目的操作數(shù),段地址在ES;2)每次操作后,SI、DI自動(dòng)修改:DF=0,SI和DI加1或(+2),DF=1,SI、DI減一或減二。3)若源字串和目的字串在同一段中,則把DS和ES設(shè)成相同數(shù)字。4)可在串操作指令前加重復(fù)前綴(REP等),每重復(fù)執(zhí)行一次,CX內(nèi)容會(huì)自動(dòng)減1。需注意的是,執(zhí)行帶有重復(fù)前綴的指令時(shí),對(duì)CX的檢測(cè)是在執(zhí)行指令前進(jìn)行的。5)串長(zhǎng)度必須放在CX寄存器中二、重復(fù)前綴:
1、REP
MOVSB/MOVSW(1).若CX=0,退出重復(fù)操作;(2).CX≠0,執(zhí)行串操作一次,CXCX-1,修改SI、DI,轉(zhuǎn)(1)。2、相等重復(fù)前綴REPZ(REPE)(1).若CX=0,或ZF=0,退出重復(fù)操作;(2).CX≠0,執(zhí)行串操作一次,CXCX-1,修改SI、DI,轉(zhuǎn)(1)。用途:用于比較兩個(gè)字串,找出不同的字。
3、不相等重復(fù)前綴REPNZ(REPNE)(1).若CX=0,或ZF=1,退出重復(fù)操作;(2).CX≠0,執(zhí)行串操作一次,CXCX-1,修改SI、DI。用途:1)在一個(gè)字串中,找到需要的字。
2)用于比較兩個(gè)字串,找出相同的字串
。三、字串傳送指令:MOVS
字節(jié)操作:MOVSB字操作:MOVSW1).SI指向源串(數(shù)據(jù)段DS),DI指向目的(附加段ES);2).CX置入傳送的字節(jié)數(shù);3).用CLD 清DF=0:SI+1(或2),DI+1(或2);
用STD置DF=1:SI-1(或2),DI-1(或2);4).用帶REP重復(fù)前綴的串傳送指令,每傳送一次,CX中的值減一。例1.將100個(gè)數(shù)據(jù),從地址為1000H單元傳送到地址為2000H單元區(qū).LEASI,[1000H];SI指向源串地址LEADI,[2000H];DI指向源串地址MOVCX,100;置計(jì)數(shù)器CLD;清方向標(biāo)志REPMOVSB;將源地址的100個(gè)字節(jié)傳送到目的地址單元
HLT四、字串比較指令:
CMPSB/CMPSW;SRC-DST字操作指令:CMPSW字節(jié)操作指令:CMPSB功能:[SI]—[DI]DIDI1(2)SISI1(2)
操作結(jié)果影響標(biāo)志位。在CMPSW/CMPSB前使用重復(fù)前綴:用REPNZ/REPNE,表示兩個(gè)字串比較不相等時(shí)繼續(xù)下次比較,若相等則退出比較。
用REPZ/REPE,表示兩個(gè)字串比較相等時(shí)繼續(xù)下次比較,若不相等則退出比較。用途:用于比較兩個(gè)字串,找出第一個(gè)相等的字符或不相等的字符五、字串檢索指令:
SCASB/SCASW
操作:AL(AX)—[DI]DIDI1(2)用AL或AX中的一個(gè)字串和位于ES段由DI指出的內(nèi)存單元的字節(jié)或字比較。
功能:從一個(gè)字串中查找一個(gè)與AL或AX中不同的字符,或?qū)ふ乙粋€(gè)相同的字符.例2.從地址為1000單元開始,存放256個(gè)字節(jié)的字符串,找出第一個(gè)字符$(ASCII碼24H),將$的第一個(gè)地址存入BX中,否則將BX清零.
1)分析:要求找指定字符$,可以用指令SCASB;重復(fù)前綴用REPNZ,表示表示兩個(gè)字串比較不相等時(shí)繼續(xù),否則退出循環(huán)$的地址應(yīng)為多少?
1031332445DIDI1000H1001H1002H1003H….2).程序段:MOVDI,1000H;送目標(biāo)串首地址MOVCX,256CLD;清方向標(biāo)志MOVAL,‘$’REPNZSCANBJZZER;沒找到$,轉(zhuǎn)DECDI;退回到$所在地址MOVBX,DI;$所在地址送BXJMPST0ZER:MOVBX,0ST0:HLT
使用SCASB/SCASW注意:目的字串默認(rèn)在ES段中,字串首址由DI指出。尋找與AL中字節(jié)相同的第一個(gè)字節(jié),用REPNZSCASB,若找到,退出循環(huán);若字串中沒有任何字節(jié)與AL的內(nèi)容相同,退出循環(huán)。六、取字串指令:
LODSB/LODSW
執(zhí)行的操作:AL(AX)[SI]SISI1(2)將位于DS段由SI指出的內(nèi)存單元的字節(jié)或字的內(nèi)容取到AL或AX中。注意:因?yàn)槿淼淖只蜃止?jié)放在AX或AL中,LODSB/LODSW前面不能加前綴。七、存儲(chǔ)指令:
STOSB/STOSW例3:將0404H單元開始的256單元清零。
CLD
;清方向標(biāo)志
LEADI,[0404H]
;DI指向字串地址
MOVCX,256;共256個(gè)字節(jié)
XORAX,AX;AX清零REPSTOSBHLT
執(zhí)行的操作:[DI]AL(AX)DIDI1(2)把AL或AX中的一個(gè)字串存到位ES段由DI指出的內(nèi)存單元,并自動(dòng)修改地址。
8086的指令執(zhí)行順序由代碼寄存器CS和指令指針I(yè)P的內(nèi)容確定。
控制轉(zhuǎn)移類指令通過改變IP(和CS)值,實(shí)現(xiàn)程序執(zhí)行順序的改變8086的控制轉(zhuǎn)移類指令可分為四小類,即無條件轉(zhuǎn)移與調(diào)用返回、條件轉(zhuǎn)移、循環(huán)控制和中斷類指令。除中斷類指令外,其它類指令均不影響標(biāo)志位??刂妻D(zhuǎn)移類指令用于實(shí)現(xiàn)分支、循環(huán)、過程等程序結(jié)構(gòu),是僅次于傳送指令的最常用指令3-2-5控制轉(zhuǎn)移指令
控制轉(zhuǎn)移指令的尋址方式8088/8086的尋址方式分為兩類:關(guān)于尋找數(shù)據(jù)的尋址方式關(guān)于尋找轉(zhuǎn)移地址的尋址方式轉(zhuǎn)移可以分成兩類:段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移
段內(nèi)轉(zhuǎn)移——只需改變IP寄存器的內(nèi)容,在同一段的范圍之內(nèi)進(jìn)行轉(zhuǎn)移,稱為段內(nèi)轉(zhuǎn)移也稱為近程轉(zhuǎn)移(稱為NEAR),還將(-128~+127)內(nèi)轉(zhuǎn)移稱為短轉(zhuǎn)移(稱為SHORT)。
段間轉(zhuǎn)移——是要轉(zhuǎn)到另一個(gè)段去執(zhí)行程序,即程序轉(zhuǎn)移后CS、IP均發(fā)生了改變,則稱為段間轉(zhuǎn)移或者稱為遠(yuǎn)程轉(zhuǎn)移(也稱為FAR型轉(zhuǎn)移)
。1.段內(nèi)直接尋址段內(nèi)直接尋址方式也稱為相對(duì)尋址方式,轉(zhuǎn)移的目標(biāo)地址是當(dāng)前IP內(nèi)容和一個(gè)8位或16位的位移量之和.(IP)←(IP)+8位或16位位移量。2.段內(nèi)間接方式
有效的轉(zhuǎn)移地址EA是一個(gè)寄存器或是一個(gè)存儲(chǔ)單元的內(nèi)容,此內(nèi)容用來更新IP寄存器的內(nèi)容,所以是絕對(duì)偏移量。注意與段內(nèi)直接方式的相對(duì)偏移量的區(qū)別。
若目標(biāo)轉(zhuǎn)移地址為存儲(chǔ)單元內(nèi)容,則該存儲(chǔ)單元本身可以是存儲(chǔ)器操作數(shù)有關(guān)的任何尋址方式尋址。(IP)←16位通用寄存器或字存儲(chǔ)單元的內(nèi)容3.段間直接尋址這種方式用于段間轉(zhuǎn)移,指令中給出轉(zhuǎn)向地址的段地址(CS)和偏移地址(IP),用來更新當(dāng)前CS和IP,程序轉(zhuǎn)移到另一代碼段。4.段間間接方式這種方式同樣用于段間轉(zhuǎn)移,指令中將給出一個(gè)存儲(chǔ)器地址,用該存儲(chǔ)器地址所指的二個(gè)相繼字單元的內(nèi)容(32位)來取代當(dāng)前的IP和CS的內(nèi)容。
存儲(chǔ)器CS存放轉(zhuǎn)移地址首地址高字節(jié)低字節(jié)低字節(jié)高字節(jié)IP二、無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令1、無條件轉(zhuǎn)移指令
段內(nèi)轉(zhuǎn)移:JMP1000H;IPIP+1000HJMPSHORTLOP1;LOP1是標(biāo)號(hào)
段間轉(zhuǎn)移JMPFARPTRLOP2IPLOP2的段內(nèi)偏移地址CSLOP2的段地址
JMPDWORDPTR[BX]IP[BX]CS[BX+2]A∶Above高于B∶Below低于C∶Carry進(jìn)位E∶Equal
等于Z:Zero零
G∶Graeter大于L∶Less小于N∶Not非、無O∶Over溢出S∶Sign符號(hào)PE∶ParityEven奇校驗(yàn)PO∶ParityOdd偶校驗(yàn)2、條件轉(zhuǎn)移指令
形式:JX短目標(biāo)地址X:1~3個(gè)英文字母跳轉(zhuǎn)范圍:-128~+127字節(jié)1)、JE/JZ;等于,A=BJNZ/JNE;不等于,A<>B2)、無符號(hào)數(shù)比較JB/JNAE:A<BJNB/JAE:A>=BJA/JNBE:A>B;JNA/JBE:A<=B3)、帶符號(hào)數(shù)比較指令JL:A<BJNL:A>=BJG:A>BJNG:A<=B4)其它轉(zhuǎn)移指令JS、JNS;JO、JNO;JP、JPE:P=1JPO、JNP;JCXZ:CX=0轉(zhuǎn)移
例1比較1000H、1001H單元的兩個(gè)無符號(hào)數(shù),將大數(shù)存2000H單元中。解:MOVBX,1000H MOVAL,[BX];第一數(shù)送ALINCBX;指向第二數(shù)CMPAL,[BX];兩數(shù)比較JALOP1;大于轉(zhuǎn)MOVAL,[BX];大數(shù)送ALLOP1:MOV[2000H],ALHLT三、循環(huán)指令LOOP、LOOPZ、LOOPNZ1)、LOOP短目標(biāo)地址操作:CXCX-1,CX不為零,循環(huán);若CX=0,退出循環(huán)。相當(dāng)于下面的指令:DECCXJNZ短目標(biāo)地址
例2:延遲子程序:MOVCX,0100H;設(shè)循環(huán)次數(shù)KKK:LOOPKKK;CX-1,CX;不為零,循環(huán)
或:MOVCX,0100HKKK:DECCXJNZKKKHLT2)LOOPZ/LOOPE
CX-1,CX不為零且ZF=1,循環(huán);若CX=0,或ZF=0,退出循環(huán)。3)LOOPNZ/LOOPNE
CX-1,CX不為零且ZF=0,循環(huán);若CX=0,或ZF=1,退出循環(huán)。四、子程序調(diào)用和返回指令
指令格式CALL
RET
(1)CALL指令
CALL1000H;段內(nèi)直接調(diào)用
1)、IP入棧:SPSP-2[SP]IP2)、入口地址:IPIP+1000HCALLNEARBCD1;段內(nèi)直接調(diào)用1)IP值入棧:SPSP-2[SP]IP2)入口地址:IPBCD1的偏移地址CALLAX;段內(nèi)間接調(diào)用1)IP值入棧:SPSP-2[SP]IP2)入口地址:IPAX的值CALL2500H:3600H;段間直接調(diào)用1)、CS值入棧2)、IP值入棧3)、IP2500HCS3600HCALLDWORDPTR[DI];段間間接調(diào)用1)、CS值入棧2)、IP值入棧3)、IP[DI]CS[DI+2](2)、返回指令:RET
1)段內(nèi)調(diào)用返回從堆棧彈出一個(gè)字到IP2)段間調(diào)用返回從堆棧彈出一個(gè)字到IP從堆棧彈出一個(gè)字到CS3)RETN:帶參數(shù)返回RET6,返回后,使SP+6。五、中斷指令
1)INTn(1)、標(biāo)志寄存器入棧;(2)、清標(biāo)志位TF、IF;(3)、CS、DS值入棧;(4)、計(jì)算中斷地址:n4:低地址單元入IP高地址單元入CS
2)INTO:溢出中斷3)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025幼兒園新學(xué)期教師工作計(jì)劃
- 醫(yī)院創(chuàng)建衛(wèi)生單位工作計(jì)劃
- 2025年物業(yè)客服工作總結(jié)和2025年工作計(jì)劃
- 加強(qiáng)母嬰保健技術(shù)計(jì)劃總結(jié)
- 大學(xué)生下學(xué)期工作計(jì)劃
- 《910》一周年答謝會(huì)總結(jié)及新年工作計(jì)劃
- 企業(yè)公司安全生產(chǎn)資金投入計(jì)劃024安全投入計(jì)劃
- 2025商場(chǎng)超市安全保衛(wèi)工作計(jì)劃范文
- 《外幣業(yè)務(wù)核算》課件
- 《蟻群算法發(fā)展》課件
- 《幼兒園3-6歲兒童學(xué)習(xí)與發(fā)展指南》科學(xué)領(lǐng)域
- 醫(yī)院安全保衛(wèi)應(yīng)急處置預(yù)案6篇
- 人教版八年級(jí)上冊(cè)美術(shù)教案說課稿《 詩書畫印的完美結(jié)合》
- 等比數(shù)列概念
- GB/T 30146-2023安全與韌性業(yè)務(wù)連續(xù)性管理體系要求
- 職業(yè)價(jià)值觀量表附帶評(píng)分標(biāo)準(zhǔn)
- 化學(xué)檢驗(yàn)員(技師)試題庫(kù)(含參考答案)
- 牽引管管道施工方案【實(shí)用文檔】doc
- 2022-2023學(xué)年四川省眉山市小學(xué)語文三年級(jí)上冊(cè)期末提升模擬題
- GB/T 16553-2003珠寶玉石鑒定
- 中醫(yī)婦科常用湯頭歌訣
評(píng)論
0/150
提交評(píng)論