2012屆高三地理一輪復(fù)習(xí)精品課件:2-3-1農(nóng)業(yè)區(qū)位因素與農(nóng)業(yè)地域類(lèi)型(湘教版)已改_第1頁(yè)
2012屆高三地理一輪復(fù)習(xí)精品課件:2-3-1農(nóng)業(yè)區(qū)位因素與農(nóng)業(yè)地域類(lèi)型(湘教版)已改_第2頁(yè)
2012屆高三地理一輪復(fù)習(xí)精品課件:2-3-1農(nóng)業(yè)區(qū)位因素與農(nóng)業(yè)地域類(lèi)型(湘教版)已改_第3頁(yè)
2012屆高三地理一輪復(fù)習(xí)精品課件:2-3-1農(nóng)業(yè)區(qū)位因素與農(nóng)業(yè)地域類(lèi)型(湘教版)已改_第4頁(yè)
2012屆高三地理一輪復(fù)習(xí)精品課件:2-3-1農(nóng)業(yè)區(qū)位因素與農(nóng)業(yè)地域類(lèi)型(湘教版)已改_第5頁(yè)
已閱讀5頁(yè),還剩108頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2.2指令系統(tǒng)概述特點(diǎn):把數(shù)據(jù)從計(jì)算機(jī)的一個(gè)部位傳送到另一部位

傳送類(lèi)指令中有2個(gè)操作數(shù):源操作數(shù)和目的操作數(shù)源操作數(shù)是指發(fā)送部位的操作數(shù)目的操作數(shù)是指接收部位的操作數(shù)指令操作:將源操作數(shù)的內(nèi)容送到目的操作數(shù),交換指令除外指令分類(lèi):數(shù)據(jù)傳送、地址傳送、標(biāo)志傳送、輸入輸出和交換2.2.1數(shù)據(jù)傳送類(lèi)指令12.2指令系統(tǒng)數(shù)據(jù)傳送類(lèi)指令數(shù)據(jù)傳送指令指令格式:MOVDST,SRC ;DST←SRCMOV指令把源操作數(shù)(source)傳送到目的操作數(shù)(destination)設(shè)指令執(zhí)行前,(AX)=2345H,(BX)=1111H。

指令“MOVAX,BX〞執(zhí)行后,(AX)=1111H,(BX)=1111H。源操作數(shù)BX的內(nèi)容被復(fù)制到AX存放器內(nèi),源操作數(shù)BX的內(nèi)容保持不變,目的操作數(shù)AX的原內(nèi)容被覆蓋。2.2.1數(shù)據(jù)傳送類(lèi)指令22.2指令系統(tǒng)數(shù)據(jù)傳送類(lèi)指令數(shù)據(jù)傳送指令指令格式:MOVDST,SRC ;DST←SRC指令操作:把一個(gè)字節(jié)或一個(gè)字操作數(shù)從源傳送到目的地,源操作數(shù)可以是存放器、段存放器、存儲(chǔ)器以及立即操作數(shù),目的操作數(shù)可以是存放器、存儲(chǔ)器和段存放器數(shù)據(jù)傳送方向:圖2-2-1。2.2.1數(shù)據(jù)傳送類(lèi)指令32.2指令系統(tǒng)數(shù)據(jù)傳送方向:圖2-2-1。注意:立即操作數(shù)、段存放器CS只能作為源操作數(shù);源、目的操作數(shù)只能有一個(gè)是存儲(chǔ)器操作數(shù);立即操作數(shù)不能直接送給段存放器。2.2.1數(shù)據(jù)傳送類(lèi)指令42.2指令系統(tǒng)MOV指令有九種形式:MOVREG,REG ;〔REG〕←〔REG〕MOVREG16,SEGREG ;〔REG16〕←〔SEGREG〕MOVREG,MEM ;〔REG〕←〔MEM〕MOVREG,IMM ;〔REG〕←IMMMOVMEM,REG ;〔MEM〕←〔REG〕MOVMEM16,SEGREG;〔MEM16〕←〔SEGREG〕MOVMEM,IMM ;〔MEM〕←IMMMOVSEGREG,REG16 ;〔SEGREG〕←〔REG16〕,CS除外MOVSEGREG,MEM16;SEGREG←MEM16,CS除外2.2.1數(shù)據(jù)傳送類(lèi)指令52.2指令系統(tǒng)指令實(shí)例:例2-2-1-1MOV指令舉例〔存放器、存放器操作數(shù)〕:正確:MOV CL,DH;字節(jié)傳送指令,DH存放器內(nèi)容送入CLMOV AX,CS ;字傳送指令,CS存放器內(nèi)容送入AXMOV SS,CX ;字傳送指令,CX存放器內(nèi)容送入SS錯(cuò)誤:MOVCL,DX ;操作數(shù)類(lèi)型不匹配MOV CS,AX ;CS存放器不能作為目的操作數(shù)MOVDS,CS ;不能同時(shí)為段存放器2.2.1數(shù)據(jù)傳送類(lèi)指令62.2指令系統(tǒng)指令實(shí)例:例2-2-1-2MOV指令舉例〔立即數(shù)、存放器操作數(shù)〕:正確:MOV AL,30H ;字節(jié)傳送指令,執(zhí)行后〔AL〕=30HMOV AX,30H ;字傳送指令,執(zhí)行后〔AX〕=0030HMOV AL,-5 ;字節(jié)傳送指令,執(zhí)行后〔AL〕=0FBHMOV AX,-5 ;字傳送指令,執(zhí)行后〔AX〕=0FFFBH錯(cuò)誤:MOV 30H,AL ;立即數(shù)不能用作目的操作數(shù)MOV AL,300H ;源操作數(shù)超出范圍2.2.1數(shù)據(jù)傳送類(lèi)指令72.2指令系統(tǒng)指令實(shí)例:例2-2-1-3MOV指令舉例〔存儲(chǔ)器、存放器操作數(shù)〕:正確:MOV [BP],BL ;字節(jié)傳送指令,BL存放器內(nèi)容送SS:[BP]MOV [BX],AX ;字傳送指令,AL內(nèi)容送DS:[BX],

;AH內(nèi)容送DS:[BX+1]MOV DX,[SI] ;字傳送指令,DS:[SI]內(nèi)容送入DL, ;DS:[SI+1]內(nèi)容送入DH錯(cuò)誤:假設(shè)變量X_BYTE用DB定義MOV [DX],BL ;DX存放器不能用來(lái)存放器間接尋址MOVX_BYTE,AX ;操作數(shù)類(lèi)型不匹配2.2.1數(shù)據(jù)傳送類(lèi)指令82.2指令系統(tǒng)指令實(shí)例:例2-2-1-4MOV指令舉例〔存儲(chǔ)器、立即數(shù)操作數(shù)〕:MOVmemdata;B/WData—可以是字節(jié)立即數(shù),也可以是字立即數(shù)。Mem---必須作數(shù)據(jù)類(lèi)型說(shuō)明?!睟YTEPTR---字節(jié)操作、WORDPTR-----字操作〕例:2-2-1-4-1MOVBYTEPTR[BX],20H;說(shuō)明目的存儲(chǔ)器操作數(shù)MEM是字節(jié)單元。設(shè)DS=3000H,BX=2200H,物理地址=30000+2200=32200H執(zhí)行前:〔32200H〕=ACH執(zhí)行后:〔32200H〕=20H2.2.1數(shù)據(jù)傳送類(lèi)指令92.2指令系統(tǒng)指令實(shí)例:例2-2-1-4MOV指令舉例〔存儲(chǔ)器、立即數(shù)操作數(shù)〕:MOVmemdata;B/WData—可以是字節(jié)立即數(shù),也可以是字立即數(shù)。Mem---必須作數(shù)據(jù)類(lèi)型說(shuō)明?!睟YTEPTR---字節(jié)操作、WORDPTR-----字操作〕例:2-2-1-4-2MOVWORDPTR[BX],234BH;說(shuō)明目的操作數(shù)存儲(chǔ)單元是字單元。設(shè)DS=3000H,BX=1000H,物理地址=31000H執(zhí)行前:〔31000H〕=45H〔31001H〕=74H執(zhí)行后:〔31000H〕=4BH〔31001H〕=23H2.2.1數(shù)據(jù)傳送類(lèi)指令102.2指令系統(tǒng)指令實(shí)例:例2-2-1-4例2-2-1-4-3:某一數(shù)據(jù)段:DATA_SEGSEGMENT;數(shù)據(jù)段開(kāi)始AREA1DB14H,3BHAREA2DB3DUP〔0〕ARRAYDW3100H,01A6HSTRINGDB‘GOOD’DATA_SEGENDS;數(shù)據(jù)段結(jié)束2.2.1數(shù)據(jù)傳送類(lèi)指令112.2指令系統(tǒng)指令實(shí)例:例2-2-1-4例2-2-1-4-3:某一數(shù)據(jù)段:1、數(shù)據(jù)段以段說(shuō)明符SEGMENT開(kāi)始,以ENDS結(jié)束,

DATA_SEG

是數(shù)據(jù)段的段名。

2、DB偽操作符是定義字節(jié)變量,說(shuō)明其后每一個(gè)操作占一個(gè)字節(jié)。

3、DW偽操作符是定義字變量,說(shuō)明其后每一個(gè)操作占一個(gè)字。2.2.1數(shù)據(jù)傳送類(lèi)指令122.2指令系統(tǒng)指令實(shí)例:例2-2-1-4例2-2-1-4-3:某一數(shù)據(jù)段:4、DUP是復(fù)制操作符,它前面的3表示在存儲(chǔ)器中保存3個(gè)字節(jié)單元,且初值是0。5、符號(hào)地址:AREA1的偏移地址為0000HAREA2的偏移地址為0002HARRAY的偏移地址為0005HSTRING的偏移地址為0009H2.2.1數(shù)據(jù)傳送類(lèi)指令132.2指令系統(tǒng)指令實(shí)例:例2-2-1-4-5:MOVDX,OFFSETARRAY;將ARRAY的偏移地址送DX存放器中,OFFSET為屬性操作符,表示應(yīng)把后面的符號(hào)地址的值作為操作數(shù)〔DX〕=0005HMOVAL,AREA1;AL←AREA1中的內(nèi)容14HMOVAREA2,AL;0002H單元←14H2.2.1數(shù)據(jù)傳送類(lèi)指令142.2指令系統(tǒng)使用MOV指令須注意:MOV指令的使用限制:源操作數(shù)與目的操作數(shù)可以是字節(jié)、字或雙字,但必須有

相同的類(lèi)型;源操作數(shù)與目的操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù);目的操作數(shù)不能是立即數(shù);FLAGS、IP不能用作操作數(shù)。對(duì)于段存放器作為操作數(shù)的MOV指令:源操作數(shù)與目的操作數(shù)不能同時(shí)為段存放器;目的操作數(shù)是段存放器時(shí),源操作數(shù)只能是存放器或存儲(chǔ)

器,不能是立即數(shù);CS不能用作目的操作數(shù)。2.2.1數(shù)據(jù)傳送類(lèi)指令15數(shù)據(jù)傳送類(lèi)指令2.2指令系統(tǒng)進(jìn)棧指令指令格式:PUSHSRC ;[SP-1]←SRCH,[SP-2]←SRCL,SP←SP-2;SRC為REG16或MEM16或SEGREGPUSHF;[SP-1]←FLAGH,[SP-2]←FLAGL,SP←SP-2指令操作:該類(lèi)指令可將16位存放器、存儲(chǔ)器相鄰兩單元、段存放器和標(biāo)志存放器的內(nèi)容壓入堆棧棧頂。該類(lèi)指令一般僅給出源操作數(shù),且都是字信息,目的操作數(shù)被操作助記符隱含著。而標(biāo)志存放器的內(nèi)容進(jìn)棧那么源和目的都是被操作助記符隱含著。2.2.1數(shù)據(jù)傳送類(lèi)指令16數(shù)據(jù)傳送類(lèi)指令2.2指令系統(tǒng)進(jìn)棧指令例2-2-1-5PUSHAX執(zhí)行前:SP=2500HSS=5000HAX=3125H指令執(zhí)行:首先SP←SP-1〔SP=24FFH〕,AH〔31H〕→24FFH單元然后SP←SP-1〔SP=24FEH〕,AL〔25H〕→24FEH單元最后SP=24FEH,比操作前減22.2.1數(shù)據(jù)傳送類(lèi)指令172.2指令系統(tǒng)指令實(shí)例:例2-2-1-6MOVAX,5000H ;AX←5000HMOVSS,AX ;SS←AX,設(shè)置堆棧段為5000HMOVSP,1000H ;SP←1000H,設(shè)置堆棧指針為1000HPUSHF ;[SP-1]←FLAGH、

;[SP-2]←FLAGL、SP←SP-2PUSHAX ;[SP-1]←AH、[SP-2]←AL、 ;SP←SP-2PUSHDS ;[SP-1]←DSH、[SP-2]←DSL、 ;SP←SP-22.2.1數(shù)據(jù)傳送類(lèi)指令182.2指令系統(tǒng)出棧指令指令格式:POPDST ;DSTL←[SP],DSTH←[SP+1],SP←SP+2 ;DST為REG16或MEM16或SEGREGPOPF ;FLAGL←[SP],F(xiàn)LAGH←[SP+1], ;SP←SP+2指令操作:該類(lèi)指令可將棧頂內(nèi)容〔字信息占兩個(gè)單元〕彈出送到16位存放器、段存放器〔不允許是CS〕、存儲(chǔ)器相鄰兩單元或標(biāo)志存放器中,源操作數(shù)被助記符隱含,目的操作數(shù)被顯式給出。它是進(jìn)棧指令的逆操作。2.2.1數(shù)據(jù)傳送類(lèi)指令192.2指令系統(tǒng)指令實(shí)例:例2-2-1-7POPBX執(zhí)行前:SS=5000H,SP=1000H,BX=75C1H過(guò)程:1、BL←SS:[1000H]所指單元的內(nèi)容6BH,SP←SP+12、BH←SS:[1001H]所指單元的內(nèi)容48H,SP←SP+1最后:SP=1002H,BX=486BH

2.2.1數(shù)據(jù)傳送類(lèi)指令202.2指令系統(tǒng)指令實(shí)例:例2-2-1-8在子程序和中斷效勞程序中,保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)時(shí),要用入棧和出棧指令。如:PUSHAX;保護(hù)AX的內(nèi)容PUSHBX;保護(hù)BX的內(nèi)容;此程序段要用到AX和BX,所以在之前要保存原先內(nèi)容。POPBX;恢復(fù)BX的原先的內(nèi)容。POPAX;恢復(fù)AX的原先的內(nèi)容。2.2.1數(shù)據(jù)傳送類(lèi)指令212.2指令系統(tǒng)指令實(shí)例:例2-2-1-9在子程序和中斷效勞程序中,常用PUSHF和POPF保護(hù)和恢復(fù)需要的標(biāo)志位,利用這兩條指令還可以方便地改變標(biāo)志存放器中任一位的狀態(tài)。如8086/8088指令系統(tǒng)中沒(méi)有能直接修改TF標(biāo)志的指令,可用以下程序來(lái)實(shí)現(xiàn)TF的改變:如:PUSHFPOPAX;標(biāo)志存放器內(nèi)容送AX.ORAH,01H;將TF位置1PUSHAXPOPF;AX的內(nèi)容送標(biāo)志存放器。2.2.1數(shù)據(jù)傳送類(lèi)指令PSW的標(biāo)志位OFDFIFTFSFZFAFPFCF22標(biāo)志存放器傳送指令有兩條標(biāo)志存放器傳送指令,指令只涉及標(biāo)志存放器的低8位,而對(duì)高8位沒(méi)有影響。LAHF〔LoadAHWithFlags〕將標(biāo)志存放器的低8位送AHSAHF〔StoreAHIntoFlags〕;將AH的內(nèi)容送標(biāo)志存放器的低8位,它的執(zhí)行刷新了SF,ZF,AF,PF,CF標(biāo)志位。2.2指令系統(tǒng)2.2.1數(shù)據(jù)傳送類(lèi)指令PSW的標(biāo)志位OFDFIFTFSFZFAFPFCF232.2指令系統(tǒng)地址傳送指令8086/8088有三種專(zhuān)門(mén)傳送地址的指令:1.傳送偏移地址到存放器;2.傳送進(jìn)入數(shù)據(jù)段的地址指針;3.傳送進(jìn)入附加段的地址指針。段地址和偏移地址也稱(chēng)為地址指針。

2.2.1數(shù)據(jù)傳送類(lèi)指令242.2指令系統(tǒng)傳送偏移地址到存放器指令格式:LEAREG16,MEM指令操作:這里源操作數(shù)必須是存儲(chǔ)器操作數(shù),目的操作數(shù)必須是16位存放器,指令意義是將源操作數(shù)的偏移地址送任一16位存放器。該指令通常用來(lái)往某個(gè)REG16中設(shè)置偏移地址的初值,以便從此地址開(kāi)始存取多個(gè)數(shù)據(jù)。指令實(shí)例:例2-2-1-9-1假設(shè)變量X的偏移地址為048CH,LEADX,X;執(zhí)行后,DX=048CH假設(shè)BP=1820H,SI=0068HLEABX,4[BP][SI];執(zhí)行后,BX=4+1820H+0068H=188CH2.2.1數(shù)據(jù)傳送類(lèi)指令252.2指令系統(tǒng)傳送偏移地址到存放器指令格式:LEAREG16,MEM指令操作:這里源操作數(shù)必須是存儲(chǔ)器操作數(shù),目的操作數(shù)必須是16位存放器,指令意義是將源操作數(shù)的偏移地址送任一16位存放器。該指令通常用來(lái)往某個(gè)REG16中設(shè)置偏移地址的初值,以便從此地址開(kāi)始存取多個(gè)數(shù)據(jù)。指令實(shí)例:例2-2-1-9-2設(shè)SI=1000H,DS=5000H,(51000H)=1234HLEABX,[SI];執(zhí)行后,BX=1000HMOVBX,[SI];執(zhí)行后,BX=1234H

2.2.1數(shù)據(jù)傳送類(lèi)指令262.2指令系統(tǒng)傳送偏移地址到存放器指令格式:LEAREG16,MEM指令操作:這里源操作數(shù)必須是存儲(chǔ)器操作數(shù),目的操作數(shù)必須是16位存放器,指令意義是將源操作數(shù)的偏移地址送任一16位存放器。該指令通常用來(lái)往某個(gè)REG16中設(shè)置偏移地址的初值,以便從此地址開(kāi)始存取多個(gè)數(shù)據(jù)。指令實(shí)例:例2-2-1-9-3下面兩條指令等價(jià),取TABLE的偏移地址,并送BX中。LEABX,TABLEMOVBX,OFFSETTABLE;OFFSET返回變量或標(biāo)號(hào)的偏地址。

2.2.1數(shù)據(jù)傳送類(lèi)指令272.2指令系統(tǒng)傳送偏移地址到存放器指令格式:LEAREG16,MEM指令操作:這里源操作數(shù)必須是存儲(chǔ)器操作數(shù),目的操作數(shù)必須是16位存放器,指令意義是將源操作數(shù)的偏移地址送任一16位存放器。該指令通常用來(lái)往某個(gè)REG16中設(shè)置偏移地址的初值,以便從此地址開(kāi)始存取多個(gè)數(shù)據(jù)。指令實(shí)例:例2-2-1-9-4LEABX,[BX+SI+0F62]執(zhí)行前:BX=0400H,SI=003CH執(zhí)行后:BX=0400H+003CH+0F62H=139EH2.2.1數(shù)據(jù)傳送類(lèi)指令282.2指令系統(tǒng)傳送進(jìn)入數(shù)據(jù)段的地址指針地址傳送指令LDS,LES地址傳送指令從存儲(chǔ)器取出4B,前面(兩個(gè)低字節(jié))的2B送入指定的存放器,后面(兩個(gè)高字節(jié))的2B送入由指令操作碼包含的段存放器。LDSREG16,MEM32;從存儲(chǔ)器取出4B,送入REG16和DSLESREG16,MEM32;從存儲(chǔ)器取出4B,送入REG16和ES例2-2-1-10-1將雙字指針?biāo)偷酱娣牌骱虳S指令設(shè)DS=1200H,〔12450H〕=F346H,〔12452H〕=0A90HLDSSI,[450H];源物理地址=12000H+450H=12450H執(zhí)行后:SI=F346H,DS=0A90H2.2.1數(shù)據(jù)傳送類(lèi)指令292.2指令系統(tǒng)傳送進(jìn)入數(shù)據(jù)段的地址指針地址傳送指令LDS,LES地址傳送指令從存儲(chǔ)器取出4B,前面(兩個(gè)低字節(jié))的2B送入指定的存放器,后面(兩個(gè)高字節(jié))的2B送入由指令操作碼包含的段存放器。LDSREG16,MEM32;從存儲(chǔ)器取出4B,送入REG16和DSLESREG16,MEM32;從存儲(chǔ)器取出4B,送入REG16和ES例2-2-1-10-2將雙字指針?biāo)痛娣牌骱虴S指令設(shè)DS=0100H,BX=0020H,(01020H〕=0300H,〔01022H〕=0500HLESDI,[BX];源物理地址=01000+0020=01020H執(zhí)行后:DI=0300H,ES=0500H

2.2.1數(shù)據(jù)傳送類(lèi)指令302.2指令系統(tǒng)交換類(lèi)指令交換指令指令格式:XCHGDST,SRC ;DST←→SRC指令操作:該指令可實(shí)現(xiàn)一個(gè)字節(jié)或一個(gè)字的源操作數(shù)與目的操作數(shù)的交換。交換能在存放器之間、存放器與存儲(chǔ)器之間進(jìn)行。三種具體形式:XCHGREG,REG ;REG←→REGXCHGREG,MEM ;REG←→MEMXCHGMEM,REG ;MEM←→REG2.2.1數(shù)據(jù)傳送類(lèi)指令312.2指令系統(tǒng)指令實(shí)例:例2-2-1-11XCHGAH,CL ;AH←→CLXCHGBFF1,AX ;〔BFF1+1、BF1〕←→AXXCHGBX,COUNT[SI] ;BX←→〔COUNT[SI+1]、COUNT[SI]〕例如,〔AX〕=5678HXCHGAH,AL ;〔AX〕=7856H指令說(shuō)明:BFF1在本節(jié)為字變量,BFF1+1、BFF1、COUNT[SI+1]、COUNT[SI]分別表示以它們?yōu)槠频刂返拇鎯?chǔ)單元的內(nèi)容。交換指令的使用注意:不能在兩個(gè)存儲(chǔ)單元之間直接交換數(shù)據(jù),段存放器和立即數(shù)不能作為操作數(shù)。2.2.1數(shù)據(jù)傳送類(lèi)指令322.2指令系統(tǒng)換碼指令〔查表轉(zhuǎn)換指令〕指令格式:XLATLABEL;LABEL:表格首地址,為可讀性而設(shè)XLAT ;指令操作:完成一個(gè)字節(jié)的查表轉(zhuǎn)換。它將數(shù)據(jù)段中偏移地址為BX與AL存放器之和的存儲(chǔ)器單元的內(nèi)容送入AL.〔將BX指定的緩沖區(qū)中AL指定的位移處的數(shù)據(jù)取出送到AL。這是隱含尋址方式,默認(rèn)使用BX,AL存放器?!呈褂肵LAT前的準(zhǔn)備工作:1、建立一個(gè)表格,且BX←表首地址2、AL←位移量〔距表首地址的位移〕,因?yàn)锳L是8位的,所以表格長(zhǎng)度不超過(guò)2563、執(zhí)行XLAT,轉(zhuǎn)換后的代碼值→AL。即:AL←DS:[BX+AL]2.2.1數(shù)據(jù)傳送類(lèi)指令332.2指令系統(tǒng)指令實(shí)例:例如4-2-1-12〔完成功能:AL←DS:[BX+AL]〕假設(shè)十六進(jìn)制數(shù)字0—F的LED七段碼對(duì)照表如表所示,試用XLAT指令求數(shù)字5的七段碼值。2.2.1數(shù)據(jù)傳送類(lèi)指令程序:設(shè)DS=4000H,表首地址TABLE=0200HTABLEDB40H,79H,24H,DB30H,19H,12H,DB02H,78H…….MOVAL,5;AL←數(shù)字5的位移量MOVBX,OFFSETTABLE;BX←表格首地址XLATTABLE;查表得AL=12H342.2指令系統(tǒng)輸入輸出類(lèi)指令輸入指令指令格式:INAL,PORT8 ;字節(jié)輸入:AL←PORT8(8位端口);地址為PORT的端口中將一字節(jié)數(shù)據(jù)讀入AL中。INAX,PORT8;字輸入:AL←PORT8,AH←PORT8+1;從兩個(gè)連續(xù)端口中將一個(gè)字讀入AX累加器中。INAL,DX;字節(jié)輸入;:其中DX的內(nèi)容為外設(shè)地址,范圍0000-0FFFFH,共64K個(gè)I/O端口。INAX,DX;字輸入 指令操作:將端口數(shù)據(jù)讀入到AL〔字節(jié)〕或AX〔字〕。2.2.1數(shù)據(jù)傳送類(lèi)指令352.2指令系統(tǒng)輸出指令指令格式:OUT PORT8,AL ;字節(jié)輸出:PORT8←ALOUTPORT8,AX;字輸出((PORT8+1),PORT8)←AXOUTDX,AL;字節(jié)輸出((DX))←ALOUTDX,AX;字輸出((DX)+1),(DX))←AX指令操作:將AL〔字節(jié)〕或AX〔字〕數(shù)據(jù)寫(xiě)到端口。2.2.1數(shù)據(jù)傳送類(lèi)指令362.2指令系統(tǒng)輸入輸出類(lèi)指令舉例:例2-2-1-13-1

INAL,0F1H;AL←從F1H端口讀入一個(gè)字節(jié)

INAX,80H;AL←80H端口的內(nèi)容;AH←81H端口的內(nèi)容

MOVDX,210H;DX←端口地址210H

INAL,DX;AL←210H端口的內(nèi)容例2-2-1-13-2

OUT85H,AL;85H端口←AL

MOVDX,0FF4H

OUTDX,AL;FF4H端口←AL

MOVDX,300H;DX指向300H

OUTDX,AX;300H端口←AL;301H端口←AH2.2.1數(shù)據(jù)傳送類(lèi)指令372.2指令系統(tǒng)數(shù)據(jù)傳送類(lèi)指令對(duì)標(biāo)志存放器的影響:MOVDST,SRC LEAREG16,MEMLDSREG16,MEMLESREG16,MEMXCHGDST,SRCXLATLABELPUSHSRC POPDSTPUSHFLAHF〔LoadAHWithFlags〕將標(biāo)志存放器的低8位送AH上述數(shù)據(jù)傳送數(shù)指令對(duì)標(biāo)志位無(wú)影響SAHF〔StoreAHIntoFlags〕;將AH的內(nèi)容送標(biāo)志存放器的低8位,它的執(zhí)行刷新了SF,ZF,AF,PF,CF標(biāo)志位。POPF〔恢復(fù)原先保存的值〕2.2.1數(shù)據(jù)傳送類(lèi)指令PSW的標(biāo)志位OFDFIFTFSFZFAFPFCF382.2指令系統(tǒng)8086/8088的算術(shù)運(yùn)算指令包括二進(jìn)制運(yùn)算及十進(jìn)制運(yùn)算指令。有加、減、乘、除四種根本運(yùn)算,及各種調(diào)整操作指令等。加法類(lèi)指令不加進(jìn)位位的加法指令指令格式:ADDDST,SRC;DST←DST+SRC指令操作:目的操作數(shù)與源操作數(shù)相加,結(jié)果送目的操作數(shù)操作數(shù)要求:DST可以是存放器或存儲(chǔ)器,而SRC可以是立即操作數(shù)、存放器或存儲(chǔ)器,但DST、SRC不能同時(shí)為存儲(chǔ)器。影響全部狀態(tài)標(biāo)志位?!沧ⅲ翰缓未娣牌鞑僮鲾?shù)〕例: ADD AX,SI ;AX←(AX)+(SI),16位運(yùn)算 ADD X,3 ;X←(X)+3,運(yùn)算位數(shù)由X的類(lèi)型確定2.2.2算術(shù)運(yùn)算指令392.2指令系統(tǒng)加法類(lèi)指令不加進(jìn)位位的加法指令下面的指令無(wú)法確定操作數(shù)的類(lèi)型,匯編時(shí)將報(bào)告錯(cuò)誤: ADD [SI],5 ;兩個(gè)操作數(shù)都沒(méi)有明確類(lèi)型如果目的操作數(shù)是DS:[SI]指向的字節(jié)存儲(chǔ)單元,可以修改如下: ADD BYTEPTR[SI],5說(shuō)明:加法指令執(zhí)行后,狀態(tài)標(biāo)志CF,OF,ZF,SF,PF,AF按照運(yùn)算結(jié)

果被刷新;操作數(shù)可以是8位/16位,源操作數(shù)與目的操作數(shù)應(yīng)該有相

同的類(lèi)型,不能同時(shí)為內(nèi)存操作數(shù)。2.2.2算術(shù)運(yùn)算指令402.2指令系統(tǒng)加法類(lèi)指令不加進(jìn)位位的加法指令A(yù)DD指令有五種形式:ADDREG,REG ;REG←REG+REGADDREG,MEM ;REG←REG+MEMADDREG,IMM ;REG←REG+IMMADDMEM,REG ;MEM←MEM+REGADDMEM,IMM ;MEM←MEM+IMM2.2.2算術(shù)運(yùn)算指令412.2指令系統(tǒng)加法類(lèi)指令加進(jìn)進(jìn)位的加法指令A(yù)DC指令格式:ADCDST,SRC 指令操作:DST←DST+SRC+CF該指令與ADD的唯一不同是,除源和目的操作數(shù)相加外,還要加上進(jìn)位位CF的現(xiàn)行值。其五種指令形式與ADD相似,對(duì)標(biāo)志位影響同ADD。指令用途:用于多字節(jié)加法運(yùn)算。2.2.2算術(shù)運(yùn)算指令422.2指令系統(tǒng)例2-2-2-1:X=33445566H,Y=89ABCDEFH,計(jì)算Z=X+Y(對(duì)應(yīng)的數(shù)據(jù)段已經(jīng)定義,變量X,Y,Z用DD定義)MOVAX,WORDPTRX ;取X的低16位,送入AXADDAX,WORDPTRY ;X,Y的低16位相加;〔AX〕=5566H+0CDEFH=2355H,CF=1MOVWORDPTRZ,AX ;低16位的和送Z的低16位MOVAX,WORDPTRX+2 ;取X的高16位,送入AXADC AX,WORDPTRY+2;X,Y的高16位及低位進(jìn)位相加;〔AX〕=3344H+89ABH+CF=0BCF0H,CF=0MOVWORDPTRZ+2,AX ;高16位的和送Z的高16位2.2.2算術(shù)運(yùn)算指令432.2指令系統(tǒng)增量指令I(lǐng)NC指令格式:INCDSRC 指令操作:DSRC←DSRC+1DSRC既表示源操作數(shù),也表示目的操作數(shù)。兩種形式:INCREG;REG←REG+1INCMEM;MEM←MEM+1指令用途:主要用于修改偏移地址或計(jì)數(shù)次數(shù)。2.2.2算術(shù)運(yùn)算指令442.2指令系統(tǒng)增量指令I(lǐng)NC指令實(shí)例:例2-2-2-2:假設(shè)COUNT為字變量INC BX ;BX←〔BX〕+1INCCOUNT[SI];COUNT[SI]字單元;內(nèi)容加1INC BYTEPTRCOUNT[SI];COUNT[SI]字節(jié)單元;內(nèi)容加1INC指令影響標(biāo)志位ZF、SF、OF、PF和AF。影響的結(jié)果同ADD。但I(xiàn)NC指令對(duì)進(jìn)位標(biāo)志CF沒(méi)有影響,保持該指令執(zhí)行前的狀態(tài)。2.2.2算術(shù)運(yùn)算指令452.2指令系統(tǒng)增量指令I(lǐng)NC指令說(shuō)明:INC指令的操作數(shù)只能是存放器或存儲(chǔ)器。當(dāng)使用存儲(chǔ)器操作數(shù)時(shí),不得出現(xiàn)二義性。例2-2-2-3指令I(lǐng)NC[SI]是非法指令原因:不能確定[SI]是字還是字節(jié)存儲(chǔ)器操作數(shù),出現(xiàn)二義性可改寫(xiě)為:INCBYTEPTR[SI]或:INCWORDPTR[SI]2.2.2算術(shù)運(yùn)算指令462.2指令系統(tǒng)減法類(lèi)指令三種:不減借位位的減法指令、減借位位的減法指令和減量指令。指令格式:SUBDST,SRC ;DST←DST-SRCSBBDST,SRC ;DST←DST-SRC-CFDECDSRC ;DSRC←DSRC-1指令說(shuō)明:這三種指令除進(jìn)行減法外,其指令形式、操作數(shù)、使用本卷須知都與相應(yīng)的加法類(lèi)指令相同,對(duì)標(biāo)志位的影響除將進(jìn)位改為借位外,前兩種指令與ADD相同,DEC指令與INC相同。2.2.2算術(shù)運(yùn)算指令472.2指令系統(tǒng)減法類(lèi)指令指令實(shí)例:例2-2-2-4:SUBAX,BX ;AX←〔AX〕-〔BX〕SBB[BX][SI],AX ;[BX+SI+1、BX+SI]←[BX+SI+1、BX+SI]-〔AX〕-CFDECDATA1[DI] ;DATA1[DI]←DATA[DI]-1非法指令:SBB[BX],5[SI] ;兩個(gè)操作數(shù)都是存儲(chǔ)器SUBAX,BH ;兩個(gè)操作數(shù)不匹配DEC[BP] ;操作數(shù)出現(xiàn)二義性2.2.2算術(shù)運(yùn)算指令482.2指令系統(tǒng)減法類(lèi)指令指令實(shí)例:例2-2-2-5:

SUBAX,SI ;AX←(AX)-(SI),16位運(yùn)算SUBY,20H;Y←(Y)-20H,運(yùn)算位數(shù)由Y的類(lèi)型確定SBBAL,CL;AL←AL-CL-CF用于多字節(jié)減法。

DECCX ;CX←(CX)-1,16位運(yùn)算2.2.2算術(shù)運(yùn)算指令49取負(fù)指令格式:NEG目的操作數(shù)功能:目的操作數(shù)←0-目的操作數(shù)目的操作數(shù):8/16位的存放器/存儲(chǔ)器例:NEGZ;Z←-Z,運(yùn)算位數(shù)由Z的類(lèi)型確定由于對(duì)一個(gè)操作數(shù)取補(bǔ)碼相當(dāng)于0減去此操作數(shù),所以該指令的操作等效于:目的操作數(shù)←[目的操作數(shù)]求補(bǔ)此指令影響標(biāo)志位:AF、CF、OF、PF、SF、ZF。通常使CF=1;只有當(dāng)操作數(shù)為0時(shí),CF=0。2.2指令系統(tǒng)2.2.2算術(shù)運(yùn)算指令NEGAX;將AX中的數(shù)取負(fù)〔正→負(fù),負(fù)→正〕,按位求反加1。NEGBYTEPTR[BX];對(duì)數(shù)據(jù)中位于[BX]偏移地址處的字節(jié)內(nèi)容取負(fù)。例:NEGALADDAL,100;這兩條指令實(shí)現(xiàn)〔100-AL)的運(yùn)算。502.2指令系統(tǒng)算術(shù)比較指令CMP〔Compare,比較〕指令指令格式: CMP 目的操作數(shù),源操作數(shù)目的操作數(shù):8位/16位的存放器/存儲(chǔ)器操作數(shù)。源操作數(shù):與目的操作數(shù)同類(lèi)型的存放器/存儲(chǔ)器/立即數(shù)。功能:目的操作數(shù)-源操作數(shù),保存運(yùn)算產(chǎn)生的標(biāo)志位,不保存

運(yùn)算的差。用來(lái)比較兩個(gè)數(shù)之間的關(guān)系,由影響的標(biāo)志位狀態(tài)來(lái)判斷兩個(gè)操作數(shù)比較的結(jié)果。2.2.2算術(shù)運(yùn)算指令512.2指令系統(tǒng)算術(shù)比較指令CMP 目的操作數(shù),源操作數(shù)1、比較兩個(gè)數(shù)是否相等:不管是無(wú)符號(hào)數(shù)比較還是有符數(shù)比較,假設(shè)在比較指令后,ZF=1那么兩者相等,否那么不等。2、對(duì)于無(wú)符號(hào)數(shù)比較,那么可根據(jù)進(jìn)位標(biāo)志CF的狀態(tài)來(lái)判斷:CF=0,目的操作數(shù)≥源操作;CF=1,目的操作數(shù)<源操作數(shù)2.2.2算術(shù)運(yùn)算指令522.2指令系統(tǒng)算術(shù)比較指令CMP 目的操作數(shù),源操作數(shù)3、對(duì)于有符號(hào)數(shù)比較那么根據(jù)SF和OF兩個(gè)標(biāo)志的關(guān)系來(lái)判斷:兩個(gè)有符號(hào)數(shù)比較時(shí),有符號(hào)數(shù)的最高位表示符號(hào),而符號(hào)標(biāo)志SF總是和結(jié)果的最高位相同,所以,當(dāng)兩個(gè)正數(shù)相比較或兩個(gè)負(fù)數(shù)相比較時(shí),可以用SF來(lái)判斷目的操作數(shù)比源操作數(shù)大還是小。(這時(shí)不會(huì)產(chǎn)生溢出,OF=0)如果SF為0,那么目的操作數(shù)≥源操作數(shù),OF⊕SF=0如果SF為1,那么目的操作數(shù)<源操作數(shù),OF⊕SF=1例:〔+6〕-〔+5〕>0SF=0(+6)>(+5),〔+5〕-〔+6〕<0SF=1(+5)<(+6)〔-6〕-〔-5〕<0SF=1(-6)<(-5)〔-5〕-〔-6〕>0SF=0(-5)>(-6)

2.2.2算術(shù)運(yùn)算指令532.2指令系統(tǒng)算術(shù)比較指令CMP 目的操作數(shù),源操作數(shù)如一個(gè)為正數(shù),另一個(gè)為負(fù)數(shù),當(dāng)兩者相比較或相減時(shí),可能會(huì)出現(xiàn)這樣的情況:如目的操作數(shù)為127,源操作數(shù)為-50,顯然目的操作數(shù)大。127-〔-50〕=177,但是在計(jì)算機(jī)中運(yùn)算時(shí)為:2.2.2算術(shù)運(yùn)算指令=——79正確結(jié)果177已經(jīng)超出了8位所能表示的有符號(hào)數(shù)的范圍-128~+127,產(chǎn)生了溢出,因此OF=1,且SF=1那么:OF⊕SF=0,目的操作數(shù)>源操作數(shù)反之目的操作數(shù)為-50,源操作數(shù)為127,顯然目的操作數(shù)小。-50-〔+127〕=-177計(jì)算機(jī)計(jì)算時(shí)會(huì)使得SF=0且OF=1那么OF⊕SF=1,目的操作數(shù)<源操作數(shù)542.2指令系統(tǒng)算術(shù)比較指令CMP 目的操作數(shù),源操作數(shù)3、對(duì)于有符號(hào)數(shù)比較那么根據(jù)SF和OF兩個(gè)標(biāo)志的關(guān)系來(lái)判斷:OF⊕SF=0,目的操作數(shù)≥源操作數(shù)OF⊕SF=1,目的操作數(shù)<源操作數(shù)OF=0時(shí),SF為正確的結(jié)果符號(hào)

OF=1時(shí),SF與正確的符號(hào)位相反

OF⊕SF的運(yùn)算結(jié)果反映了正確的結(jié)果符號(hào)2.2.2算術(shù)運(yùn)算指令552.2指令系統(tǒng)算術(shù)比較指令CMP 目的操作數(shù),源操作數(shù)3、對(duì)于有符號(hào)數(shù):OF⊕SF=0,目的操作數(shù)≥源操作數(shù)OF⊕SF=1,目的操作數(shù)<源操作數(shù)例:假設(shè)存儲(chǔ)器字節(jié)變量〔X〕=80H,指令“CMPX,5〞執(zhí)行后:ZF=0 〔X〕≠5OF=1 減法操作產(chǎn)生溢出,SF是錯(cuò)誤的結(jié)果符號(hào)位SF=0 如果X中存放的是有符號(hào)數(shù),X<5〔由于OF=1,所以符號(hào)標(biāo)志SF不正確〕CF=0 如果X中存放的是無(wú)符號(hào)數(shù),X>5(由于ZF=0,所以不相等〕2.2.2算術(shù)運(yùn)算指令562.2指令系統(tǒng)乘法類(lèi)指令無(wú)符號(hào)數(shù)乘法指令〔unsignedMULtiply〕指令格式:MULSRC指令功能:把源操作數(shù)和累加器中的數(shù)都當(dāng)成無(wú)符號(hào)數(shù),然后將兩數(shù)相乘。源操作數(shù)可以是字節(jié)或字。如果源操作數(shù)是一個(gè)字節(jié),它與累加器AL中的內(nèi)容相乘,乘積為雙倍長(zhǎng)的16位數(shù),高8位送到AH,低8位送AL。即字節(jié)乘:AX←〔AL〕*字節(jié)SRC2.2.2算術(shù)運(yùn)算指令572.2指令系統(tǒng)乘法類(lèi)指令無(wú)符號(hào)數(shù)乘法指令〔unsignedMULtiply〕指令格式:MULSRC指令功能:把源操作數(shù)和累加器中的數(shù)都當(dāng)成無(wú)符號(hào)數(shù),然后將兩數(shù)相乘。源操作數(shù)可以是字節(jié)或字。如果源操作數(shù)是一個(gè)字,它與累加器AX中的內(nèi)容相乘,乘積為雙倍長(zhǎng)的32位數(shù)。高位字〔16位〕送到DX,低位字〔16位〕送AX。即字乘:〔DX,AX〕←〔AX〕*字SRC2.2.2算術(shù)運(yùn)算指令582.2指令系統(tǒng)乘法類(lèi)指令無(wú)符號(hào)數(shù)乘法指令〔unsignedMULtiply〕指令格式:MULSRC指令功能:把源操作數(shù)和累加器中的數(shù)都當(dāng)成無(wú)符號(hào)數(shù),然后將兩數(shù)相乘。源操作數(shù)可以是字節(jié)或字。字節(jié)乘:AX←〔AL〕*字節(jié)SRC字乘:DX,AX←〔AX〕*字SRC。指令說(shuō)明:SRC只能是存放器或存儲(chǔ)器操作數(shù),可以是字節(jié)或字。但不能是立即數(shù)。當(dāng)SRC為存儲(chǔ)單元時(shí)必須在操作數(shù)前說(shuō)明數(shù)據(jù)類(lèi)型。2.2.2算術(shù)運(yùn)算指令592.2指令系統(tǒng)乘法指令的形式為:MULREG/MEM指令實(shí)例:例2-2-2-8設(shè)AL=55H,BL=14H計(jì)算乘積MULBL結(jié)果:AX=06A4H,因?yàn)锳H<>0,高位局部有效,那么將CF=1OF=1MULBX ;DX,AX←AX*BXMULWORDPTR[BX] ;DX,AX←AX*[BX+1、BX]MULBYTEPTR[DI] ;AX←AL*[DI]乘法指令對(duì)標(biāo)志位的影響:指令執(zhí)行后,假設(shè)結(jié)果的高半局部〔字節(jié)相乘時(shí)為AH,字相乘時(shí)為DX〕不為零,那么CF=OF=1,否那么兩者均為零。當(dāng)CF=OF=1時(shí),標(biāo)志著結(jié)果的高半局部含有結(jié)果的有效位。標(biāo)志位PF、SF、ZF、AF處于隨機(jī)狀態(tài)。2.2.2算術(shù)運(yùn)算指令602.2指令系統(tǒng)有符號(hào)整數(shù)乘法指令〔SignedIntegerMULtiply〕指令格式:IMULSRC指令操作及說(shuō)明:該指令除下述兩點(diǎn)外,其余同MUL。SRC為有符號(hào)整數(shù),假設(shè)是字節(jié)操作數(shù),那么范圍為-128~+127;假設(shè)是字,那么范圍為-32768~+32767。相應(yīng)的AL、AX同樣也是有符號(hào)整數(shù)。對(duì)CF、OF的影響不同。假設(shè)結(jié)果的高半局部不是低半局部的符號(hào)擴(kuò)展,那么CF=OF=1,否那么為零,通過(guò)CF或OF的狀態(tài),能判斷高半局部是否含有結(jié)果的有效位。2.2.2算術(shù)運(yùn)算指令612.2指令系統(tǒng)有符號(hào)整數(shù)乘法指令〔SignedIntegerMULtiply〕說(shuō)明:兩個(gè)N位操作數(shù)相乘,得到2N位的乘積;源操作數(shù)不能為立即數(shù);如果乘積高N位為低N位的符號(hào)擴(kuò)展,那么CF=OF=0,否那么

CF=OF=1,其余標(biāo)志位無(wú)意義。相同的兩組二進(jìn)制代碼分別用MUL和IMUL運(yùn)算,可能得到不同的結(jié)果:例2-2-2-10:(AL)=0FFH,(X)=2 MULX;(AX)=01FEH,〔255×2=510〕CF=1,OF=1 IMULX;(AX)=0FFFEH,〔-1×2=-2〕CF=0,OF=02.2.2算術(shù)運(yùn)算指令622.2指令系統(tǒng)除法類(lèi)指令1、DIV〔UnsignedDivision〕:無(wú)符號(hào)除法格式:DIV 源操作數(shù)源操作數(shù):8位/16位的存放器/存儲(chǔ)器功能:對(duì)兩個(gè)無(wú)符號(hào)二進(jìn)制數(shù)進(jìn)行除法操作。源操作數(shù)可以是字或字節(jié)。如果源操作數(shù)為字節(jié),16位被除數(shù)必須放在AX中,與8位源操作數(shù)相除之后,8位商存在AL中,余數(shù)存在AH中。即8位源操作數(shù)時(shí):(AX)÷源操作數(shù),AL←商,AH←余數(shù)假設(shè)是被除數(shù)只有8位,必須把它放在AL中,并將AH清0,然后相除。所有標(biāo)志位均無(wú)定義。2.2.2算術(shù)運(yùn)算指令632.2指令系統(tǒng)除法類(lèi)指令1、DIV〔UnsignedDivision〕:無(wú)符號(hào)除法格式:DIV 源操作數(shù)源操作數(shù):8位/16位的存放器/存儲(chǔ)器如果源操作數(shù)為字,32位被除數(shù)必須放在DX,AX中,其中DX為高16位,16位除數(shù)作源操作數(shù),相除之后,16位商存在AX中,余數(shù)存在DX中。即16位源操作數(shù)時(shí):(DX,AX)÷源操作數(shù),AX←商,DX←余數(shù)要是被除數(shù)只有16位,除數(shù)也是16位,那么必須將16位被除數(shù)送到AX中,再將DX存放器清0,然后相除。所有標(biāo)志位均無(wú)義。2.2.2算術(shù)運(yùn)算指令642.2指令系統(tǒng)除法類(lèi)指令1、DIV〔UnsignedDivision〕:無(wú)符號(hào)除法格式:DIV 源操作數(shù)8位源操作數(shù)時(shí):(AX)÷源操作數(shù),AL←商,AH←余數(shù)16位源操作數(shù)時(shí):(DX,AX)÷源操作數(shù),AX←商,DX←余數(shù)例2-2-2-11:要進(jìn)行除法(AX)÷(BX),假設(shè)AX、BX內(nèi)均為無(wú)符號(hào)數(shù): MOV DX,0 ;32位被除數(shù)高16位清零 DIV BX ;(DX,AX)÷BX,AX←商,DX←余數(shù)2.2.2算術(shù)運(yùn)算指令652.2指令系統(tǒng)除法類(lèi)指令1、DIV〔UnsignedDivision〕:無(wú)符號(hào)除法例如,要進(jìn)行除法(AX)÷5,首先應(yīng)確定是16位÷8位還是32位÷16位:如果能確定(AX)÷5的商小于255,可以執(zhí)行16位÷8位除法:MOVBL,5 ;除數(shù)存入BL存放器DIVBL ;16位÷8位,AL←商,AH←余數(shù)如果不能確定(AX)÷5的商小于255,可以執(zhí)行32位÷16位除法:MOVBX,5 ;除數(shù)存入BX存放器MOVDX,0 ;32位被除數(shù)高16位清零DIVBX ;(DX,AX)÷BX,AX←商,DX←余數(shù)2.2.2算術(shù)運(yùn)算指令662.2指令系統(tǒng)除法類(lèi)指令2、IDIV〔SignedIntegerDivision〕:有符號(hào)數(shù)除法格式:IDIV 源操作數(shù)源操作數(shù):8位/16位的存放器/存儲(chǔ)器功能:8位源操作數(shù)時(shí):(AX)÷源操作數(shù),AL←商,AH←余數(shù)16位源操作數(shù)時(shí):(DX,AX)÷源操作數(shù),AX←商,DX←余數(shù)此操作與DIV相同,但操作數(shù)必須都是帶符號(hào)數(shù),且余數(shù)符號(hào)與被除數(shù)相同。如-30除以+8,可以得到商為-4,余數(shù)為+2;也可以得到商為-3,余數(shù)為-6。這兩種結(jié)果都有是正確的,前一種情況的余數(shù)為正,后一種情況的余數(shù)為負(fù)。8086指令系統(tǒng)規(guī)定余數(shù)符號(hào)與被除數(shù)相同。所以得到后一種結(jié)果。2.2.2算術(shù)運(yùn)算指令672.2指令系統(tǒng)除法類(lèi)指令進(jìn)行除法操作時(shí),無(wú)論對(duì)DIV或IDIV,都要注意一個(gè)問(wèn)題:由于除法指令字節(jié)操作時(shí)商為8位,字操作時(shí)商為16位,商數(shù)超過(guò)了目標(biāo)存放器AL或AX所能存放數(shù)的范圍。這時(shí)計(jì)算時(shí)機(jī)自動(dòng)產(chǎn)生一個(gè)中斷類(lèi)型號(hào)為0的除法錯(cuò)中斷,相當(dāng)于執(zhí)行了除數(shù)為0的運(yùn)算,所得的商和余數(shù)都不確定。對(duì)于無(wú)符號(hào)數(shù),字節(jié)操作時(shí),允許最大商為FFH,字操作時(shí)最大商為FFFFH,假設(shè)超過(guò)這個(gè)范圍就會(huì)溢出。對(duì)于有符號(hào)數(shù),字節(jié)操作時(shí)商的范圍為-128~+127,字操作時(shí)商的范圍為-32768~+32767。2.2.2算術(shù)運(yùn)算指令682.2指令系統(tǒng)

2.2.2算術(shù)運(yùn)算指令對(duì)于無(wú)符號(hào)數(shù)相除,AH和DX的擴(kuò)展很簡(jiǎn)單,只要將這兩個(gè)存放器清0就可以了。對(duì)有符號(hào)數(shù)除法指令,字節(jié)操作時(shí)要求被除數(shù)為16位,字操作時(shí)要求被除數(shù)為32位。這時(shí)不能簡(jiǎn)單地將高位置0,而應(yīng)該先用下面的符號(hào)擴(kuò)展指令將被除數(shù)轉(zhuǎn)換成除法指令所要求的格式,再執(zhí)行除法指令。擴(kuò)展傳送指令把8位的操作數(shù)符號(hào)擴(kuò)展為16位,或者把16位的操作數(shù)符號(hào)擴(kuò)展為32位,送入目的存放器692.2指令系統(tǒng)

2.2.2算術(shù)運(yùn)算指令擴(kuò)展類(lèi)指令(擴(kuò)展傳送指令CBW,CWD)CBW ;將AL存放器內(nèi)符號(hào)位擴(kuò)充到AH中的所有位,這時(shí)AH被稱(chēng)為是AL的符號(hào)擴(kuò)充。8位的操作數(shù)擴(kuò)展成16位,送入AX。此操作不影響標(biāo)志位。AL的最高有效位為0,那么AH=00H;AL的最高有效位為1,那么AH=0FFH;設(shè)有〔AL〕=60H;CBW;〔AX〕=0060H設(shè)有〔AL〕=81H;CBW;〔AX〕=FF81H

702.2指令系統(tǒng)

2.2.2算術(shù)運(yùn)算指令擴(kuò)展類(lèi)指令(擴(kuò)展傳送指令CBW,CWD)CWD ;將AX存放器內(nèi)符號(hào)位擴(kuò)充到DX存放器的所有位中,16位操作數(shù)變成32位操作數(shù),送入DX(高位)和AX。此操作不影響標(biāo)志位。AX的最高有效位為0,那么DX=0000H;AX的最高有效位為1,那么DX=0FFFFH;設(shè)有〔AX〕=8060HCWD;〔DX〕=0FFFFH,〔AX〕=8060H設(shè)有〔AX〕=7060HCWD;〔DX〕=0000H,〔AX〕=7060H712.2指令系統(tǒng)例如,要進(jìn)行除法(AX)÷(BX),AX、BX內(nèi)均為有符號(hào)數(shù)CWD ;被除數(shù)AX符號(hào)擴(kuò)展到DXIDIVBX ;(DX,AX)÷(BX),AX←商,DX←余數(shù)相同的兩組二進(jìn)制代碼分別用DIV和IDIV運(yùn)算,可能得到不同的結(jié)果:例如:(AX)=0FFFFH,(CL)=1DIVCL;0FFFFH÷1=0FFFFH,產(chǎn)生除法溢出(商最大為AL=FFH。)IDIVCL;(AL)=0FFH,(AH)=0〔-1÷1=-1……0〕2.2.2算術(shù)運(yùn)算指令722.2指令系統(tǒng)輔助操作類(lèi)指令壓縮BCD數(shù)運(yùn)算2.2.2算術(shù)運(yùn)算指令用二進(jìn)制加法指令將兩個(gè)壓縮BCD數(shù)相加:每一個(gè)4位組中,如果本組數(shù)字相加的和不超過(guò)9,結(jié)果正確。如果本組的和有進(jìn)位〔超過(guò)15〕,或者雖然沒(méi)有進(jìn)位,但是

出現(xiàn)了非法的組合〔本組和小于16,大于9〕,得到的結(jié)果是

錯(cuò)誤的。732.2指令系統(tǒng)輔助操作類(lèi)指令壓縮BCD數(shù)運(yùn)算對(duì)相加后的結(jié)果作調(diào)整如果4位組的和有進(jìn)位,或者出現(xiàn)了非法組合,將本組數(shù)字加6調(diào)整2.2.2算術(shù)運(yùn)算指令在80X86微處理器上,上述調(diào)整由“十進(jìn)制調(diào)整指令〞實(shí)現(xiàn)。742.2指令系統(tǒng)輔助操作類(lèi)指令壓縮BCD碼加法的調(diào)整指令指令格式:DAA〔DecimalAdjustforAdd〕DAA調(diào)整算法2.2.2算術(shù)運(yùn)算指令if〔AL低4位>9或AF=1〕then AL=AL+06H; AF=1;endifif〔AL高4位>9或CF=1〕then AL=AL+60H; CF=1;endifDAA指令會(huì)影響AF,CF,PF,SF,ZF,而對(duì)OF來(lái)說(shuō),執(zhí)行DAA指令后可為0,也可為1,但無(wú)意義。752.2指令系統(tǒng)輔助操作類(lèi)指令壓縮BCD碼加法的調(diào)整指令DAA〔DecimalAdjustafterAddition〕十進(jìn)制加法調(diào)整2.2.2算術(shù)運(yùn)算指令格式:DAA功能:對(duì)AL中的加法結(jié)果進(jìn)行BCD運(yùn)算調(diào)整例:89+57MOV AL,89H;BCD數(shù)89裝入AL,使用16進(jìn)制數(shù)格式ADD AL,57H;按照二進(jìn)制格式相加,〔AL〕=0E0H,AF=1DAA ;進(jìn)行BCD加法調(diào)整,〔AL〕=46H,CF=1說(shuō)明:調(diào)整之前先進(jìn)行二進(jìn)制加法,和必須在AL中。762.2指令系統(tǒng)輔助操作類(lèi)指令壓縮BCD碼減法的調(diào)整指令DAS調(diào)整算法:2.2.2算術(shù)運(yùn)算指令if〔AL低4位>9或AF=1〕then AL=AL-06H; AF=1;endifif〔AL高4位>9或CF=1〕then AL=AL-60H; CF=1;endifDAS指令那么和DAA指令類(lèi)似會(huì)影響AF,CF,PF,SF,ZF,而對(duì)OF來(lái)說(shuō),執(zhí)行DAS指令后無(wú)意義。772.2指令系統(tǒng)輔助操作類(lèi)指令壓縮BCD碼減法的調(diào)整指令

2.2.2算術(shù)運(yùn)算指令格式:DAS功能:對(duì)AL中的減法結(jié)果進(jìn)行BCD運(yùn)算調(diào)整例:83-57MOV AL,83H;BCD數(shù)83裝入AL,使用16進(jìn)制數(shù)格式SUB AL,57H;按照二進(jìn)制格式相減,〔AL〕=2CH,AF=1DAS ;進(jìn)行BCD減法調(diào)整,〔AL〕=26H,CF=0說(shuō)明:調(diào)整之前先進(jìn)行二進(jìn)制減法,差在AL中。782.2指令系統(tǒng)輔助操作類(lèi)指令非壓縮BCD數(shù)運(yùn)算:AAA〔ASCIIAdjustafterAddition〕非壓縮十進(jìn)制加法調(diào)整2.2.2算術(shù)運(yùn)算指令A(yù)AA調(diào)整算法:if〔AL低4位>9或AF=1〕then AL=AL+06H; AH=AH+1; AF=1; CF=1;else AF=0; CF=0;endif AL=ALAND0FH ;AL高4位清零AAA指令會(huì)影響AF和CF,,而對(duì)OF,PF,SF,ZF來(lái)說(shuō),執(zhí)行AAA指令后無(wú)意義。792.2指令系統(tǒng)輔助操作類(lèi)指令非壓縮BCD數(shù)運(yùn)算2.2.2算術(shù)運(yùn)算指令A(yù)AA〔ASCIIAdjustafterAddition〕非壓縮十進(jìn)制加法調(diào)整格式:AAA功能:對(duì)AL中的加法結(jié)果進(jìn)行非壓縮BCD數(shù)運(yùn)算調(diào)整例:’9’+’8’設(shè)AH=0MOV AL,‘9’;非壓縮BCD數(shù)9裝入AL,使用ASCII格式ADD AL,‘8’;按照二進(jìn)制格式相加,〔AL〕=71H,AF=1AAA ;非壓縮BCD加法調(diào)整,〔AL〕=07H,CF=1說(shuō)明:調(diào)整之前先進(jìn)行二進(jìn)制加法,和必須在AL中; 低4位的進(jìn)位用兩種方式同時(shí)表達(dá):CF=1,AH=AH+1=01H。AX=0107H802.2指令系統(tǒng)非壓縮BCD碼減法的調(diào)整指令A(yù)AS(ASCIIAdjustafterSubtraction)非壓縮十進(jìn)制減法調(diào)整2.2.2算術(shù)運(yùn)算指令A(yù)AS調(diào)整算法:if〔AL低4位>9或AF=1〕thenAL=AL-06H;AH=AH-1;AF=1;CF=1;elseAF=0;CF=0;endifAL=ALAND0FH ;AL高4位清零AAS指令同AAA指令會(huì)影響AF和CF,,而對(duì)OF,PF,SF,ZF來(lái)說(shuō),執(zhí)行AAA指令后無(wú)意義。812.2指令系統(tǒng)非壓縮BCD碼減法的調(diào)整指令A(yù)AS(ASCIIAdjustafterSubtraction)非壓縮十進(jìn)制減法調(diào)整AAS調(diào)整算法2.2.2算術(shù)運(yùn)算指令格式:AAS功能:對(duì)AL中的減法結(jié)果進(jìn)行非壓縮BCD數(shù)運(yùn)算調(diào)整例:’6’-’8’MOVAL,‘6’;非壓縮BCD數(shù)6裝入AL,使用ASCII格式SUB AL,‘8’;按照二進(jìn)制格式相減,(AL)=0FEH,AF=1AAS ;進(jìn)行非壓縮BCD減法調(diào)整,(AL)=08H,CF=1說(shuō)明:調(diào)整之前先進(jìn)行二進(jìn)制減法,差在AL中。 低4位的借位用兩種方式同時(shí)表達(dá):CF=1,AH=AH-1。82邏輯與移位指令〔位操作類(lèi)指令〕:分為三類(lèi)。1、邏輯運(yùn)算指令主要包括:AND,OR,XOR、NOT和TEST指令。2、算術(shù)邏輯移位指令:SHL/SAL邏輯算術(shù)左移;SHR、SAR邏輯算術(shù)右移。3、循環(huán)移位:ROL、ROR、RCL、RCR2.2指令系統(tǒng)2.2.3邏輯與移位指令832.2指令系統(tǒng)邏輯運(yùn)算指令

邏輯運(yùn)算指令主要包括:AND,OR,XOR、NOT和TEST指令。

邏輯運(yùn)算指令將每一位二進(jìn)制數(shù)單獨(dú)進(jìn)行運(yùn)算,各位之間沒(méi)有相互進(jìn)位的關(guān)系。

邏輯運(yùn)算指令執(zhí)行之后,CF、OF標(biāo)志位固定為0。AF無(wú)定義;SF,PF,ZF按照運(yùn)算結(jié)果的特征設(shè)置。(其中:NOT不影響標(biāo)志位。)2.2.3邏輯與移位指令842.2指令系統(tǒng)邏輯運(yùn)算指令邏輯非NOT格式:NOT 目的操作數(shù)功能:將目的操作數(shù)各位取反。取反規(guī)那么為:NOT0=1,NOT1=0說(shuō)明:目的操作數(shù)可以是8/16位存放器/存儲(chǔ)器操作數(shù)。NOT不影響標(biāo)志位。例:MOV AL,35H;(AL)=35H=00110101BNOT AL;(AL)=0CAH=11001010B,各位取反2.2.3邏輯與移位指令852.2指令系統(tǒng)邏輯運(yùn)算指令A(yù)ND邏輯乘〔邏輯與〕指令格式:AND 目的操作數(shù),源操作數(shù)功能:目的操作數(shù)和源操作數(shù)進(jìn)行邏輯乘,送目的操作數(shù)。邏輯乘規(guī)那么: 0∧0=0,0∧1=0,1∧0=0,1∧1=1也可以歸納為: 0∧X=0,1∧X=X,X∧X=X,X∧X=0說(shuō)明:使用AND指令可以對(duì)操作數(shù)有選擇地局部清零; 對(duì)操作數(shù)類(lèi)型的要求與ADD指令相同。例: MOV AL,‘7’ ;(AL)=37H AND AL,0FH ;(AL)=07H,字符‘7’轉(zhuǎn)換成二進(jìn)制數(shù)例: AND CX,0 ;(CX)=0,同時(shí)CF=OF=0,ZF=1例: AND AX,AX ;AX的值不變,CF=OF=02.2.3邏輯與移位指令862.2指令系統(tǒng)邏輯運(yùn)算指令OR邏輯加〔邏輯或〕指令格式:OR 目的操作數(shù),源操作數(shù)功能:將目的操作數(shù)和源操作數(shù)進(jìn)行邏輯加,送目的操作數(shù)。邏輯加規(guī)那么: 0∨0=0,0∨1=1,1∨0=1,1∨1=1也可以歸納為:0∨X=X,1∨X=1,X∨X=X,X∨X=1說(shuō)明:使用OR指令可以有選擇地將操作數(shù)的某些位置1; OR指令對(duì)操作數(shù)類(lèi)型的要求與ADD指令相同。例: MOVAL,7;(AL)=07H ORAL,30H;(AL)=37H,二進(jìn)制數(shù)7轉(zhuǎn)換成字符‘7’例: ORAX,AX;AX的值不變,CF=OF=02.2.3邏輯與移位指令872.2指令系統(tǒng)邏輯運(yùn)算指令XOR邏輯異或〔半加〕指令格式:XOR 目的操作數(shù),源操作數(shù)功能:將目的操作數(shù)和源操作數(shù)進(jìn)行邏輯異或運(yùn)算。邏輯異或規(guī)那么:0十0=0,0十1=1,1十0=1,1十1=0也可以歸納為:0十X=X,1十X=X,X十X=0,X十X=1說(shuō)明:使用XOR指令可以有選擇地將操作數(shù)的某些位取反; 對(duì)操作數(shù)類(lèi)型的要求與ADD指令相同。例:MOV AL,35H;〔AL〕=35HXOR AL,0FH;〔AL〕=3AH,高4位不變,低4位取反例:XOR AX,AX;將AX清零,同時(shí)CF=OF=02.2.3邏輯與移位指令882.2指令系統(tǒng)邏輯與AND、邏輯或OR、邏輯異或XOR指令格式:邏輯與:ANDDST,SRC ;DST←DST∧SRC邏輯或:ORDST,SRC ;DST←DST∨SRC邏輯異或:XORDST,SRC;DST←DST⊕SRC指令說(shuō)明:指令形式、操作數(shù)及使用本卷須知同ADD。邏輯與的定義為1∧1=1、1∧0=0∧1=0∧0=0;邏輯或的定義為1∨1=1∨0=0∨1=1、0∨0=0;邏輯異或的定義為1⊕1=0⊕0=0、1⊕0=0⊕1=1。指令執(zhí)行后對(duì)PF、ZF、SF的影響同ADD,CF、OF被清零,AF隨機(jī)。2.2.3邏輯與移位指令892.2指令系統(tǒng)測(cè)試指令TEST指令格式:TESTDST,SRC;DST∧SRC指令操作:目的與源操作數(shù)相與去改變標(biāo)志位指令說(shuō)明:該指令與AND的唯一區(qū)別是不回送結(jié)果;與CMP的區(qū)別是,TEST指令的目的與源操作數(shù)相與去改變標(biāo)志位,而CMP那么是兩者相減去改變標(biāo)志位。當(dāng)用立即數(shù)作為T(mén)EST指令的操作數(shù)時(shí),在不改變?cè)胁僮鲾?shù)的根底上,TEST常用來(lái)檢測(cè)某一位或幾位是否滿(mǎn)足某條件。

2.2.3邏輯與移位指令902.2指令系統(tǒng)測(cè)試指令TEST指令格式:TESTDST,SRC;DST∧SRC指令操作:目的與源操作數(shù)相與去改變標(biāo)志位指令說(shuō)明:具體的實(shí)現(xiàn)方法是用立即操作數(shù)作為源操作數(shù),被檢測(cè)的對(duì)象為目的操作數(shù),通過(guò)把源操作數(shù)的某一位或某幾位設(shè)置為“1〞,實(shí)現(xiàn)對(duì)目的操作數(shù)的相應(yīng)位的測(cè)試指令實(shí)例:TESTAX,0000000000100000B ;測(cè)試AX中D5位是否為0TESTBX,000FH ;測(cè)試BX的低4位是否為02.2.3邏輯與移位指令912.2指令系統(tǒng)例:1.AX=3639H(ASCII6和9),要將它們轉(zhuǎn)換成BCD碼0609H,并將結(jié)果仍放在AX.ANDAX,0F0FH;AX=0609H2.AX=0609H(BCD碼),要將它們轉(zhuǎn)換成ASCII碼,結(jié)果仍在AX中.ORAX,3030H;AX=3639H假設(shè)AL中存有某外設(shè)端口的狀態(tài)信息,其中D1位控制揚(yáng)聲器發(fā)聲,要求該位在0,1之間變換,原來(lái)是1變成0,原來(lái)是0,變成1,其余各位保持原來(lái)變.XORAL,00000010B2.2.3邏輯與移位指令922.2指令系統(tǒng)邏輯運(yùn)算指令應(yīng)用:主要用于數(shù)據(jù)的拼裝、拆卸、測(cè)試,也可用于清零某幾位、置1某幾位或取某幾位。當(dāng)一個(gè)操作數(shù)自身做“異或〞運(yùn)算時(shí),其結(jié)果為“0〞且使OF、CF為“0〞,這是使存放器和CF、OF標(biāo)志都為零的常用方法。如指令XORBX,BX假設(shè)要將操作數(shù)中的假設(shè)干位取反,假設(shè)干位保持不變,可用立即操作數(shù)與其“異或〞實(shí)現(xiàn)。此時(shí),立即數(shù)應(yīng)這樣組成:保持不變的位為“0〞,要取反的位為“1〞,與“全1〞,“異或〞相當(dāng)于NOT指令但同時(shí)改變標(biāo)志位假設(shè)要將操作數(shù)中的假設(shè)干位置1,用OR指令;假設(shè)要將操作數(shù)中的假設(shè)干位清0,用AND指令.2.2.3邏輯與移位指令932.2指令系統(tǒng)算術(shù)邏輯移位指令

邏輯移位指令把操作數(shù)看作是各位相互獨(dú)立的二進(jìn)制串,最后移出的位進(jìn)入CF,空出的位用0填充。

算術(shù)移位指令把操作數(shù)看做是有符號(hào)的整數(shù),最后移出的位進(jìn)入CF。邏輯、算術(shù)移位指令2.2.3邏輯與移位指令942.2指令系統(tǒng)算術(shù)邏輯移位指令〔1〕SHL〔ShiftLeft〕邏輯左移格式:SHL 目的操作數(shù),移位次數(shù)目的操作數(shù):8/16位存放器/存儲(chǔ)器;移位次數(shù):常數(shù)1或存放器CL。功能:將目的操作數(shù)向左移動(dòng)指定的位數(shù),目的操作數(shù)的高位移入CF,低位用0填充說(shuō)明:對(duì)于無(wú)符號(hào)數(shù),每左移一次等于乘以2,CF保存最后移出的二進(jìn)制位. 2.2.3邏輯與移位指令952.2指令系統(tǒng)算術(shù)邏輯移位指令〔1〕SHL〔ShiftLeft〕邏輯左移例2-2-3-1:用移位指令實(shí)現(xiàn)AX←(AX)×10PUSH BX ;保護(hù)BX存放器的原來(lái)的值SHL AX,1 ;左移一位,AX←(原AX)×2MOV BX,AX;BX←2〔原AX〕SHL AX,1 ;左移一位,AX←4〔原AX〕SHL AX,1 ;左移一位,AX←8〔原AX〕ADD AX,BX;AX←原〔8AX〕+原〔2AX〕POP BX ;恢復(fù)BX存放器的原來(lái)的值2.2.3邏輯與移位指令962.2指令系統(tǒng)算術(shù)邏輯移位指令〔2〕SHR〔ShiftRight〕邏輯右移格式:SHR 目的操作數(shù),移位次數(shù)目的操作數(shù):8/16位存放器/存儲(chǔ)器;移位次數(shù):常數(shù)1或存放器CL。功能:將目的操作數(shù)向右移動(dòng)指定的位數(shù),目的操作數(shù)的低位

移入CF,高位用0填充說(shuō)明:對(duì)于無(wú)符號(hào)數(shù),每右移一次等于被2除。CF保存最后移

出的二進(jìn)制位。 2.2.3邏輯與移位指令972.2指令系統(tǒng)算術(shù)邏輯移位指令〔2〕SHR〔ShiftRight〕邏輯右移例2-2-3-2:133/8=16….5MOVAL,10000101BMOVCL,3SHRAL,CL;右移3位后,〔AL〕=10H,CF=12.2.3邏輯與移位指令982.2指令系統(tǒng)算術(shù)邏輯移位指令〔1〕SHL〔ShiftLeft〕邏輯左移〔2〕SHR〔ShiftRight〕邏輯右移例3:

溫馨提示

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

評(píng)論

0/150

提交評(píng)論