




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
2.2指令系統(tǒng)概述特點:把數(shù)據(jù)從計算機的一個部位傳送到另一部位
傳送類指令中有2個操作數(shù):源操作數(shù)和目的操作數(shù)源操作數(shù)是指發(fā)送部位的操作數(shù)目的操作數(shù)是指接收部位的操作數(shù)指令操作:將源操作數(shù)的內(nèi)容送到目的操作數(shù),交換指令除外指令分類:數(shù)據(jù)傳送、地址傳送、標志傳送、輸入輸出和交換2.2.1數(shù)據(jù)傳送類指令12.2指令系統(tǒng)數(shù)據(jù)傳送類指令數(shù)據(jù)傳送指令指令格式:MOVDST,SRC ;DST←SRCMOV指令把源操作數(shù)(source)傳送到目的操作數(shù)(destination)設指令執(zhí)行前,(AX)=2345H,(BX)=1111H。
指令“MOVAX,BX〞執(zhí)行后,(AX)=1111H,(BX)=1111H。源操作數(shù)BX的內(nèi)容被復制到AX存放器內(nèi),源操作數(shù)BX的內(nèi)容保持不變,目的操作數(shù)AX的原內(nèi)容被覆蓋。2.2.1數(shù)據(jù)傳送類指令22.2指令系統(tǒng)數(shù)據(jù)傳送類指令數(shù)據(jù)傳送指令指令格式:MOVDST,SRC ;DST←SRC指令操作:把一個字節(jié)或一個字操作數(shù)從源傳送到目的地,源操作數(shù)可以是存放器、段存放器、存儲器以及立即操作數(shù),目的操作數(shù)可以是存放器、存儲器和段存放器數(shù)據(jù)傳送方向:圖2-2-1。2.2.1數(shù)據(jù)傳送類指令32.2指令系統(tǒng)數(shù)據(jù)傳送方向:圖2-2-1。注意:立即操作數(shù)、段存放器CS只能作為源操作數(shù);源、目的操作數(shù)只能有一個是存儲器操作數(shù);立即操作數(shù)不能直接送給段存放器。2.2.1數(shù)據(jù)傳送類指令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ù)傳送類指令52.2指令系統(tǒng)指令實例:例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錯誤:MOVCL,DX ;操作數(shù)類型不匹配MOV CS,AX ;CS存放器不能作為目的操作數(shù)MOVDS,CS ;不能同時為段存放器2.2.1數(shù)據(jù)傳送類指令62.2指令系統(tǒng)指令實例:例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錯誤:MOV 30H,AL ;立即數(shù)不能用作目的操作數(shù)MOV AL,300H ;源操作數(shù)超出范圍2.2.1數(shù)據(jù)傳送類指令72.2指令系統(tǒng)指令實例:例2-2-1-3MOV指令舉例〔存儲器、存放器操作數(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錯誤:假設變量X_BYTE用DB定義MOV [DX],BL ;DX存放器不能用來存放器間接尋址MOVX_BYTE,AX ;操作數(shù)類型不匹配2.2.1數(shù)據(jù)傳送類指令82.2指令系統(tǒng)指令實例:例2-2-1-4MOV指令舉例〔存儲器、立即數(shù)操作數(shù)〕:MOVmemdata;B/WData—可以是字節(jié)立即數(shù),也可以是字立即數(shù)。Mem---必須作數(shù)據(jù)類型說明?!睟YTEPTR---字節(jié)操作、WORDPTR-----字操作〕例:2-2-1-4-1MOVBYTEPTR[BX],20H;說明目的存儲器操作數(shù)MEM是字節(jié)單元。設DS=3000H,BX=2200H,物理地址=30000+2200=32200H執(zhí)行前:〔32200H〕=ACH執(zhí)行后:〔32200H〕=20H2.2.1數(shù)據(jù)傳送類指令92.2指令系統(tǒng)指令實例:例2-2-1-4MOV指令舉例〔存儲器、立即數(shù)操作數(shù)〕:MOVmemdata;B/WData—可以是字節(jié)立即數(shù),也可以是字立即數(shù)。Mem---必須作數(shù)據(jù)類型說明?!睟YTEPTR---字節(jié)操作、WORDPTR-----字操作〕例:2-2-1-4-2MOVWORDPTR[BX],234BH;說明目的操作數(shù)存儲單元是字單元。設DS=3000H,BX=1000H,物理地址=31000H執(zhí)行前:〔31000H〕=45H〔31001H〕=74H執(zhí)行后:〔31000H〕=4BH〔31001H〕=23H2.2.1數(shù)據(jù)傳送類指令102.2指令系統(tǒng)指令實例:例2-2-1-4例2-2-1-4-3:某一數(shù)據(jù)段:DATA_SEGSEGMENT;數(shù)據(jù)段開始AREA1DB14H,3BHAREA2DB3DUP〔0〕ARRAYDW3100H,01A6HSTRINGDB‘GOOD’DATA_SEGENDS;數(shù)據(jù)段結束2.2.1數(shù)據(jù)傳送類指令112.2指令系統(tǒng)指令實例:例2-2-1-4例2-2-1-4-3:某一數(shù)據(jù)段:1、數(shù)據(jù)段以段說明符SEGMENT開始,以ENDS結束,
DATA_SEG
是數(shù)據(jù)段的段名。
2、DB偽操作符是定義字節(jié)變量,說明其后每一個操作占一個字節(jié)。
3、DW偽操作符是定義字變量,說明其后每一個操作占一個字。2.2.1數(shù)據(jù)傳送類指令122.2指令系統(tǒng)指令實例:例2-2-1-4例2-2-1-4-3:某一數(shù)據(jù)段:4、DUP是復制操作符,它前面的3表示在存儲器中保存3個字節(jié)單元,且初值是0。5、符號地址:AREA1的偏移地址為0000HAREA2的偏移地址為0002HARRAY的偏移地址為0005HSTRING的偏移地址為0009H2.2.1數(shù)據(jù)傳送類指令132.2指令系統(tǒng)指令實例:例2-2-1-4-5:MOVDX,OFFSETARRAY;將ARRAY的偏移地址送DX存放器中,OFFSET為屬性操作符,表示應把后面的符號地址的值作為操作數(shù)〔DX〕=0005HMOVAL,AREA1;AL←AREA1中的內(nèi)容14HMOVAREA2,AL;0002H單元←14H2.2.1數(shù)據(jù)傳送類指令142.2指令系統(tǒng)使用MOV指令須注意:MOV指令的使用限制:源操作數(shù)與目的操作數(shù)可以是字節(jié)、字或雙字,但必須有
相同的類型;源操作數(shù)與目的操作數(shù)不能同時為存儲器操作數(shù);目的操作數(shù)不能是立即數(shù);FLAGS、IP不能用作操作數(shù)。對于段存放器作為操作數(shù)的MOV指令:源操作數(shù)與目的操作數(shù)不能同時為段存放器;目的操作數(shù)是段存放器時,源操作數(shù)只能是存放器或存儲
器,不能是立即數(shù);CS不能用作目的操作數(shù)。2.2.1數(shù)據(jù)傳送類指令15數(shù)據(jù)傳送類指令2.2指令系統(tǒng)進棧指令指令格式:PUSHSRC ;[SP-1]←SRCH,[SP-2]←SRCL,SP←SP-2;SRC為REG16或MEM16或SEGREGPUSHF;[SP-1]←FLAGH,[SP-2]←FLAGL,SP←SP-2指令操作:該類指令可將16位存放器、存儲器相鄰兩單元、段存放器和標志存放器的內(nèi)容壓入堆棧棧頂。該類指令一般僅給出源操作數(shù),且都是字信息,目的操作數(shù)被操作助記符隱含著。而標志存放器的內(nèi)容進棧那么源和目的都是被操作助記符隱含著。2.2.1數(shù)據(jù)傳送類指令16數(shù)據(jù)傳送類指令2.2指令系統(tǒng)進棧指令例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ù)傳送類指令172.2指令系統(tǒng)指令實例:例2-2-1-6MOVAX,5000H ;AX←5000HMOVSS,AX ;SS←AX,設置堆棧段為5000HMOVSP,1000H ;SP←1000H,設置堆棧指針為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ù)傳送類指令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指令操作:該類指令可將棧頂內(nèi)容〔字信息占兩個單元〕彈出送到16位存放器、段存放器〔不允許是CS〕、存儲器相鄰兩單元或標志存放器中,源操作數(shù)被助記符隱含,目的操作數(shù)被顯式給出。它是進棧指令的逆操作。2.2.1數(shù)據(jù)傳送類指令192.2指令系統(tǒng)指令實例:例2-2-1-7POPBX執(zhí)行前:SS=5000H,SP=1000H,BX=75C1H過程: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ù)傳送類指令202.2指令系統(tǒng)指令實例:例2-2-1-8在子程序和中斷效勞程序中,保護現(xiàn)場和恢復現(xiàn)場時,要用入棧和出棧指令。如:PUSHAX;保護AX的內(nèi)容PUSHBX;保護BX的內(nèi)容;此程序段要用到AX和BX,所以在之前要保存原先內(nèi)容。POPBX;恢復BX的原先的內(nèi)容。POPAX;恢復AX的原先的內(nèi)容。2.2.1數(shù)據(jù)傳送類指令212.2指令系統(tǒng)指令實例:例2-2-1-9在子程序和中斷效勞程序中,常用PUSHF和POPF保護和恢復需要的標志位,利用這兩條指令還可以方便地改變標志存放器中任一位的狀態(tài)。如8086/8088指令系統(tǒng)中沒有能直接修改TF標志的指令,可用以下程序來實現(xiàn)TF的改變:如:PUSHFPOPAX;標志存放器內(nèi)容送AX.ORAH,01H;將TF位置1PUSHAXPOPF;AX的內(nèi)容送標志存放器。2.2.1數(shù)據(jù)傳送類指令PSW的標志位OFDFIFTFSFZFAFPFCF22標志存放器傳送指令有兩條標志存放器傳送指令,指令只涉及標志存放器的低8位,而對高8位沒有影響。LAHF〔LoadAHWithFlags〕將標志存放器的低8位送AHSAHF〔StoreAHIntoFlags〕;將AH的內(nèi)容送標志存放器的低8位,它的執(zhí)行刷新了SF,ZF,AF,PF,CF標志位。2.2指令系統(tǒng)2.2.1數(shù)據(jù)傳送類指令PSW的標志位OFDFIFTFSFZFAFPFCF232.2指令系統(tǒng)地址傳送指令8086/8088有三種專門傳送地址的指令:1.傳送偏移地址到存放器;2.傳送進入數(shù)據(jù)段的地址指針;3.傳送進入附加段的地址指針。段地址和偏移地址也稱為地址指針。
2.2.1數(shù)據(jù)傳送類指令242.2指令系統(tǒng)傳送偏移地址到存放器指令格式:LEAREG16,MEM指令操作:這里源操作數(shù)必須是存儲器操作數(shù),目的操作數(shù)必須是16位存放器,指令意義是將源操作數(shù)的偏移地址送任一16位存放器。該指令通常用來往某個REG16中設置偏移地址的初值,以便從此地址開始存取多個數(shù)據(jù)。指令實例:例2-2-1-9-1假設變量X的偏移地址為048CH,LEADX,X;執(zhí)行后,DX=048CH假設BP=1820H,SI=0068HLEABX,4[BP][SI];執(zhí)行后,BX=4+1820H+0068H=188CH2.2.1數(shù)據(jù)傳送類指令252.2指令系統(tǒng)傳送偏移地址到存放器指令格式:LEAREG16,MEM指令操作:這里源操作數(shù)必須是存儲器操作數(shù),目的操作數(shù)必須是16位存放器,指令意義是將源操作數(shù)的偏移地址送任一16位存放器。該指令通常用來往某個REG16中設置偏移地址的初值,以便從此地址開始存取多個數(shù)據(jù)。指令實例:例2-2-1-9-2設SI=1000H,DS=5000H,(51000H)=1234HLEABX,[SI];執(zhí)行后,BX=1000HMOVBX,[SI];執(zhí)行后,BX=1234H
2.2.1數(shù)據(jù)傳送類指令262.2指令系統(tǒng)傳送偏移地址到存放器指令格式:LEAREG16,MEM指令操作:這里源操作數(shù)必須是存儲器操作數(shù),目的操作數(shù)必須是16位存放器,指令意義是將源操作數(shù)的偏移地址送任一16位存放器。該指令通常用來往某個REG16中設置偏移地址的初值,以便從此地址開始存取多個數(shù)據(jù)。指令實例:例2-2-1-9-3下面兩條指令等價,取TABLE的偏移地址,并送BX中。LEABX,TABLEMOVBX,OFFSETTABLE;OFFSET返回變量或標號的偏地址。
2.2.1數(shù)據(jù)傳送類指令272.2指令系統(tǒng)傳送偏移地址到存放器指令格式:LEAREG16,MEM指令操作:這里源操作數(shù)必須是存儲器操作數(shù),目的操作數(shù)必須是16位存放器,指令意義是將源操作數(shù)的偏移地址送任一16位存放器。該指令通常用來往某個REG16中設置偏移地址的初值,以便從此地址開始存取多個數(shù)據(jù)。指令實例:例2-2-1-9-4LEABX,[BX+SI+0F62]執(zhí)行前:BX=0400H,SI=003CH執(zhí)行后:BX=0400H+003CH+0F62H=139EH2.2.1數(shù)據(jù)傳送類指令282.2指令系統(tǒng)傳送進入數(shù)據(jù)段的地址指針地址傳送指令LDS,LES地址傳送指令從存儲器取出4B,前面(兩個低字節(jié))的2B送入指定的存放器,后面(兩個高字節(jié))的2B送入由指令操作碼包含的段存放器。LDSREG16,MEM32;從存儲器取出4B,送入REG16和DSLESREG16,MEM32;從存儲器取出4B,送入REG16和ES例2-2-1-10-1將雙字指針送到存放器和DS指令設DS=1200H,〔12450H〕=F346H,〔12452H〕=0A90HLDSSI,[450H];源物理地址=12000H+450H=12450H執(zhí)行后:SI=F346H,DS=0A90H2.2.1數(shù)據(jù)傳送類指令292.2指令系統(tǒng)傳送進入數(shù)據(jù)段的地址指針地址傳送指令LDS,LES地址傳送指令從存儲器取出4B,前面(兩個低字節(jié))的2B送入指定的存放器,后面(兩個高字節(jié))的2B送入由指令操作碼包含的段存放器。LDSREG16,MEM32;從存儲器取出4B,送入REG16和DSLESREG16,MEM32;從存儲器取出4B,送入REG16和ES例2-2-1-10-2將雙字指針送存放器和ES指令設DS=0100H,BX=0020H,(01020H〕=0300H,〔01022H〕=0500HLESDI,[BX];源物理地址=01000+0020=01020H執(zhí)行后:DI=0300H,ES=0500H
2.2.1數(shù)據(jù)傳送類指令302.2指令系統(tǒng)交換類指令交換指令指令格式:XCHGDST,SRC ;DST←→SRC指令操作:該指令可實現(xiàn)一個字節(jié)或一個字的源操作數(shù)與目的操作數(shù)的交換。交換能在存放器之間、存放器與存儲器之間進行。三種具體形式:XCHGREG,REG ;REG←→REGXCHGREG,MEM ;REG←→MEMXCHGMEM,REG ;MEM←→REG2.2.1數(shù)據(jù)傳送類指令312.2指令系統(tǒng)指令實例:例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指令說明:BFF1在本節(jié)為字變量,BFF1+1、BFF1、COUNT[SI+1]、COUNT[SI]分別表示以它們?yōu)槠频刂返拇鎯卧膬?nèi)容。交換指令的使用注意:不能在兩個存儲單元之間直接交換數(shù)據(jù),段存放器和立即數(shù)不能作為操作數(shù)。2.2.1數(shù)據(jù)傳送類指令322.2指令系統(tǒng)換碼指令〔查表轉(zhuǎn)換指令〕指令格式:XLATLABEL;LABEL:表格首地址,為可讀性而設XLAT ;指令操作:完成一個字節(jié)的查表轉(zhuǎn)換。它將數(shù)據(jù)段中偏移地址為BX與AL存放器之和的存儲器單元的內(nèi)容送入AL.〔將BX指定的緩沖區(qū)中AL指定的位移處的數(shù)據(jù)取出送到AL。這是隱含尋址方式,默認使用BX,AL存放器。〕使用XLAT前的準備工作:1、建立一個表格,且BX←表首地址2、AL←位移量〔距表首地址的位移〕,因為AL是8位的,所以表格長度不超過2563、執(zhí)行XLAT,轉(zhuǎn)換后的代碼值→AL。即:AL←DS:[BX+AL]2.2.1數(shù)據(jù)傳送類指令332.2指令系統(tǒng)指令實例:例如4-2-1-12〔完成功能:AL←DS:[BX+AL]〕假設十六進制數(shù)字0—F的LED七段碼對照表如表所示,試用XLAT指令求數(shù)字5的七段碼值。2.2.1數(shù)據(jù)傳送類指令程序:設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)輸入輸出類指令輸入指令指令格式:INAL,PORT8 ;字節(jié)輸入:AL←PORT8(8位端口);地址為PORT的端口中將一字節(jié)數(shù)據(jù)讀入AL中。INAX,PORT8;字輸入:AL←PORT8,AH←PORT8+1;從兩個連續(xù)端口中將一個字讀入AX累加器中。INAL,DX;字節(jié)輸入;:其中DX的內(nèi)容為外設地址,范圍0000-0FFFFH,共64K個I/O端口。INAX,DX;字輸入 指令操作:將端口數(shù)據(jù)讀入到AL〔字節(jié)〕或AX〔字〕。2.2.1數(shù)據(jù)傳送類指令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ù)寫到端口。2.2.1數(shù)據(jù)傳送類指令362.2指令系統(tǒng)輸入輸出類指令舉例:例2-2-1-13-1
INAL,0F1H;AL←從F1H端口讀入一個字節(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ù)傳送類指令372.2指令系統(tǒng)數(shù)據(jù)傳送類指令對標志存放器的影響:MOVDST,SRC LEAREG16,MEMLDSREG16,MEMLESREG16,MEMXCHGDST,SRCXLATLABELPUSHSRC POPDSTPUSHFLAHF〔LoadAHWithFlags〕將標志存放器的低8位送AH上述數(shù)據(jù)傳送數(shù)指令對標志位無影響SAHF〔StoreAHIntoFlags〕;將AH的內(nèi)容送標志存放器的低8位,它的執(zhí)行刷新了SF,ZF,AF,PF,CF標志位。POPF〔恢復原先保存的值〕2.2.1數(shù)據(jù)傳送類指令PSW的標志位OFDFIFTFSFZFAFPFCF382.2指令系統(tǒng)8086/8088的算術運算指令包括二進制運算及十進制運算指令。有加、減、乘、除四種根本運算,及各種調(diào)整操作指令等。加法類指令不加進位位的加法指令指令格式:ADDDST,SRC;DST←DST+SRC指令操作:目的操作數(shù)與源操作數(shù)相加,結果送目的操作數(shù)操作數(shù)要求:DST可以是存放器或存儲器,而SRC可以是立即操作數(shù)、存放器或存儲器,但DST、SRC不能同時為存儲器。影響全部狀態(tài)標志位。〔注:不含段存放器操作數(shù)〕例: ADD AX,SI ;AX←(AX)+(SI),16位運算 ADD X,3 ;X←(X)+3,運算位數(shù)由X的類型確定2.2.2算術運算指令392.2指令系統(tǒng)加法類指令不加進位位的加法指令下面的指令無法確定操作數(shù)的類型,匯編時將報告錯誤: ADD [SI],5 ;兩個操作數(shù)都沒有明確類型如果目的操作數(shù)是DS:[SI]指向的字節(jié)存儲單元,可以修改如下: ADD BYTEPTR[SI],5說明:加法指令執(zhí)行后,狀態(tài)標志CF,OF,ZF,SF,PF,AF按照運算結
果被刷新;操作數(shù)可以是8位/16位,源操作數(shù)與目的操作數(shù)應該有相
同的類型,不能同時為內(nèi)存操作數(shù)。2.2.2算術運算指令402.2指令系統(tǒng)加法類指令不加進位位的加法指令ADD指令有五種形式:ADDREG,REG ;REG←REG+REGADDREG,MEM ;REG←REG+MEMADDREG,IMM ;REG←REG+IMMADDMEM,REG ;MEM←MEM+REGADDMEM,IMM ;MEM←MEM+IMM2.2.2算術運算指令412.2指令系統(tǒng)加法類指令加進進位的加法指令ADC指令格式:ADCDST,SRC 指令操作:DST←DST+SRC+CF該指令與ADD的唯一不同是,除源和目的操作數(shù)相加外,還要加上進位位CF的現(xiàn)行值。其五種指令形式與ADD相似,對標志位影響同ADD。指令用途:用于多字節(jié)加法運算。2.2.2算術運算指令422.2指令系統(tǒng)例2-2-2-1:X=33445566H,Y=89ABCDEFH,計算Z=X+Y(對應的數(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位及低位進位相加;〔AX〕=3344H+89ABH+CF=0BCF0H,CF=0MOVWORDPTRZ+2,AX ;高16位的和送Z的高16位2.2.2算術運算指令432.2指令系統(tǒng)增量指令INC指令格式:INCDSRC 指令操作:DSRC←DSRC+1DSRC既表示源操作數(shù),也表示目的操作數(shù)。兩種形式:INCREG;REG←REG+1INCMEM;MEM←MEM+1指令用途:主要用于修改偏移地址或計數(shù)次數(shù)。2.2.2算術運算指令442.2指令系統(tǒng)增量指令INC指令實例:例2-2-2-2:假設COUNT為字變量INC BX ;BX←〔BX〕+1INCCOUNT[SI];COUNT[SI]字單元;內(nèi)容加1INC BYTEPTRCOUNT[SI];COUNT[SI]字節(jié)單元;內(nèi)容加1INC指令影響標志位ZF、SF、OF、PF和AF。影響的結果同ADD。但INC指令對進位標志CF沒有影響,保持該指令執(zhí)行前的狀態(tài)。2.2.2算術運算指令452.2指令系統(tǒng)增量指令INC指令說明:INC指令的操作數(shù)只能是存放器或存儲器。當使用存儲器操作數(shù)時,不得出現(xiàn)二義性。例2-2-2-3指令INC[SI]是非法指令原因:不能確定[SI]是字還是字節(jié)存儲器操作數(shù),出現(xiàn)二義性可改寫為:INCBYTEPTR[SI]或:INCWORDPTR[SI]2.2.2算術運算指令462.2指令系統(tǒng)減法類指令三種:不減借位位的減法指令、減借位位的減法指令和減量指令。指令格式:SUBDST,SRC ;DST←DST-SRCSBBDST,SRC ;DST←DST-SRC-CFDECDSRC ;DSRC←DSRC-1指令說明:這三種指令除進行減法外,其指令形式、操作數(shù)、使用本卷須知都與相應的加法類指令相同,對標志位的影響除將進位改為借位外,前兩種指令與ADD相同,DEC指令與INC相同。2.2.2算術運算指令472.2指令系統(tǒng)減法類指令指令實例:例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] ;兩個操作數(shù)都是存儲器SUBAX,BH ;兩個操作數(shù)不匹配DEC[BP] ;操作數(shù)出現(xiàn)二義性2.2.2算術運算指令482.2指令系統(tǒng)減法類指令指令實例:例2-2-2-5:
SUBAX,SI ;AX←(AX)-(SI),16位運算SUBY,20H;Y←(Y)-20H,運算位數(shù)由Y的類型確定SBBAL,CL;AL←AL-CL-CF用于多字節(jié)減法。
DECCX ;CX←(CX)-1,16位運算2.2.2算術運算指令49取負指令格式:NEG目的操作數(shù)功能:目的操作數(shù)←0-目的操作數(shù)目的操作數(shù):8/16位的存放器/存儲器例:NEGZ;Z←-Z,運算位數(shù)由Z的類型確定由于對一個操作數(shù)取補碼相當于0減去此操作數(shù),所以該指令的操作等效于:目的操作數(shù)←[目的操作數(shù)]求補此指令影響標志位:AF、CF、OF、PF、SF、ZF。通常使CF=1;只有當操作數(shù)為0時,CF=0。2.2指令系統(tǒng)2.2.2算術運算指令NEGAX;將AX中的數(shù)取負〔正→負,負→正〕,按位求反加1。NEGBYTEPTR[BX];對數(shù)據(jù)中位于[BX]偏移地址處的字節(jié)內(nèi)容取負。例:NEGALADDAL,100;這兩條指令實現(xiàn)〔100-AL)的運算。502.2指令系統(tǒng)算術比較指令CMP〔Compare,比較〕指令指令格式: CMP 目的操作數(shù),源操作數(shù)目的操作數(shù):8位/16位的存放器/存儲器操作數(shù)。源操作數(shù):與目的操作數(shù)同類型的存放器/存儲器/立即數(shù)。功能:目的操作數(shù)-源操作數(shù),保存運算產(chǎn)生的標志位,不保存
運算的差。用來比較兩個數(shù)之間的關系,由影響的標志位狀態(tài)來判斷兩個操作數(shù)比較的結果。2.2.2算術運算指令512.2指令系統(tǒng)算術比較指令CMP 目的操作數(shù),源操作數(shù)1、比較兩個數(shù)是否相等:不管是無符號數(shù)比較還是有符數(shù)比較,假設在比較指令后,ZF=1那么兩者相等,否那么不等。2、對于無符號數(shù)比較,那么可根據(jù)進位標志CF的狀態(tài)來判斷:CF=0,目的操作數(shù)≥源操作;CF=1,目的操作數(shù)<源操作數(shù)2.2.2算術運算指令522.2指令系統(tǒng)算術比較指令CMP 目的操作數(shù),源操作數(shù)3、對于有符號數(shù)比較那么根據(jù)SF和OF兩個標志的關系來判斷:兩個有符號數(shù)比較時,有符號數(shù)的最高位表示符號,而符號標志SF總是和結果的最高位相同,所以,當兩個正數(shù)相比較或兩個負數(shù)相比較時,可以用SF來判斷目的操作數(shù)比源操作數(shù)大還是小。(這時不會產(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算術運算指令532.2指令系統(tǒng)算術比較指令CMP 目的操作數(shù),源操作數(shù)如一個為正數(shù),另一個為負數(shù),當兩者相比較或相減時,可能會出現(xiàn)這樣的情況:如目的操作數(shù)為127,源操作數(shù)為-50,顯然目的操作數(shù)大。127-〔-50〕=177,但是在計算機中運算時為:2.2.2算術運算指令=——79正確結果177已經(jīng)超出了8位所能表示的有符號數(shù)的范圍-128~+127,產(chǎn)生了溢出,因此OF=1,且SF=1那么:OF⊕SF=0,目的操作數(shù)>源操作數(shù)反之目的操作數(shù)為-50,源操作數(shù)為127,顯然目的操作數(shù)小。-50-〔+127〕=-177計算機計算時會使得SF=0且OF=1那么OF⊕SF=1,目的操作數(shù)<源操作數(shù)542.2指令系統(tǒng)算術比較指令CMP 目的操作數(shù),源操作數(shù)3、對于有符號數(shù)比較那么根據(jù)SF和OF兩個標志的關系來判斷:OF⊕SF=0,目的操作數(shù)≥源操作數(shù)OF⊕SF=1,目的操作數(shù)<源操作數(shù)OF=0時,SF為正確的結果符號
OF=1時,SF與正確的符號位相反
OF⊕SF的運算結果反映了正確的結果符號2.2.2算術運算指令552.2指令系統(tǒng)算術比較指令CMP 目的操作數(shù),源操作數(shù)3、對于有符號數(shù):OF⊕SF=0,目的操作數(shù)≥源操作數(shù)OF⊕SF=1,目的操作數(shù)<源操作數(shù)例:假設存儲器字節(jié)變量〔X〕=80H,指令“CMPX,5〞執(zhí)行后:ZF=0 〔X〕≠5OF=1 減法操作產(chǎn)生溢出,SF是錯誤的結果符號位SF=0 如果X中存放的是有符號數(shù),X<5〔由于OF=1,所以符號標志SF不正確〕CF=0 如果X中存放的是無符號數(shù),X>5(由于ZF=0,所以不相等〕2.2.2算術運算指令562.2指令系統(tǒng)乘法類指令無符號數(shù)乘法指令〔unsignedMULtiply〕指令格式:MULSRC指令功能:把源操作數(shù)和累加器中的數(shù)都當成無符號數(shù),然后將兩數(shù)相乘。源操作數(shù)可以是字節(jié)或字。如果源操作數(shù)是一個字節(jié),它與累加器AL中的內(nèi)容相乘,乘積為雙倍長的16位數(shù),高8位送到AH,低8位送AL。即字節(jié)乘:AX←〔AL〕*字節(jié)SRC2.2.2算術運算指令572.2指令系統(tǒng)乘法類指令無符號數(shù)乘法指令〔unsignedMULtiply〕指令格式:MULSRC指令功能:把源操作數(shù)和累加器中的數(shù)都當成無符號數(shù),然后將兩數(shù)相乘。源操作數(shù)可以是字節(jié)或字。如果源操作數(shù)是一個字,它與累加器AX中的內(nèi)容相乘,乘積為雙倍長的32位數(shù)。高位字〔16位〕送到DX,低位字〔16位〕送AX。即字乘:〔DX,AX〕←〔AX〕*字SRC2.2.2算術運算指令582.2指令系統(tǒng)乘法類指令無符號數(shù)乘法指令〔unsignedMULtiply〕指令格式:MULSRC指令功能:把源操作數(shù)和累加器中的數(shù)都當成無符號數(shù),然后將兩數(shù)相乘。源操作數(shù)可以是字節(jié)或字。字節(jié)乘:AX←〔AL〕*字節(jié)SRC字乘:DX,AX←〔AX〕*字SRC。指令說明:SRC只能是存放器或存儲器操作數(shù),可以是字節(jié)或字。但不能是立即數(shù)。當SRC為存儲單元時必須在操作數(shù)前說明數(shù)據(jù)類型。2.2.2算術運算指令592.2指令系統(tǒng)乘法指令的形式為:MULREG/MEM指令實例:例2-2-2-8設AL=55H,BL=14H計算乘積MULBL結果:AX=06A4H,因為AH<>0,高位局部有效,那么將CF=1OF=1MULBX ;DX,AX←AX*BXMULWORDPTR[BX] ;DX,AX←AX*[BX+1、BX]MULBYTEPTR[DI] ;AX←AL*[DI]乘法指令對標志位的影響:指令執(zhí)行后,假設結果的高半局部〔字節(jié)相乘時為AH,字相乘時為DX〕不為零,那么CF=OF=1,否那么兩者均為零。當CF=OF=1時,標志著結果的高半局部含有結果的有效位。標志位PF、SF、ZF、AF處于隨機狀態(tài)。2.2.2算術運算指令602.2指令系統(tǒng)有符號整數(shù)乘法指令〔SignedIntegerMULtiply〕指令格式:IMULSRC指令操作及說明:該指令除下述兩點外,其余同MUL。SRC為有符號整數(shù),假設是字節(jié)操作數(shù),那么范圍為-128~+127;假設是字,那么范圍為-32768~+32767。相應的AL、AX同樣也是有符號整數(shù)。對CF、OF的影響不同。假設結果的高半局部不是低半局部的符號擴展,那么CF=OF=1,否那么為零,通過CF或OF的狀態(tài),能判斷高半局部是否含有結果的有效位。2.2.2算術運算指令612.2指令系統(tǒng)有符號整數(shù)乘法指令〔SignedIntegerMULtiply〕說明:兩個N位操作數(shù)相乘,得到2N位的乘積;源操作數(shù)不能為立即數(shù);如果乘積高N位為低N位的符號擴展,那么CF=OF=0,否那么
CF=OF=1,其余標志位無意義。相同的兩組二進制代碼分別用MUL和IMUL運算,可能得到不同的結果:例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算術運算指令622.2指令系統(tǒng)除法類指令1、DIV〔UnsignedDivision〕:無符號除法格式:DIV 源操作數(shù)源操作數(shù):8位/16位的存放器/存儲器功能:對兩個無符號二進制數(shù)進行除法操作。源操作數(shù)可以是字或字節(jié)。如果源操作數(shù)為字節(jié),16位被除數(shù)必須放在AX中,與8位源操作數(shù)相除之后,8位商存在AL中,余數(shù)存在AH中。即8位源操作數(shù)時:(AX)÷源操作數(shù),AL←商,AH←余數(shù)假設是被除數(shù)只有8位,必須把它放在AL中,并將AH清0,然后相除。所有標志位均無定義。2.2.2算術運算指令632.2指令系統(tǒng)除法類指令1、DIV〔UnsignedDivision〕:無符號除法格式:DIV 源操作數(shù)源操作數(shù):8位/16位的存放器/存儲器如果源操作數(shù)為字,32位被除數(shù)必須放在DX,AX中,其中DX為高16位,16位除數(shù)作源操作數(shù),相除之后,16位商存在AX中,余數(shù)存在DX中。即16位源操作數(shù)時:(DX,AX)÷源操作數(shù),AX←商,DX←余數(shù)要是被除數(shù)只有16位,除數(shù)也是16位,那么必須將16位被除數(shù)送到AX中,再將DX存放器清0,然后相除。所有標志位均無義。2.2.2算術運算指令642.2指令系統(tǒng)除法類指令1、DIV〔UnsignedDivision〕:無符號除法格式:DIV 源操作數(shù)8位源操作數(shù)時:(AX)÷源操作數(shù),AL←商,AH←余數(shù)16位源操作數(shù)時:(DX,AX)÷源操作數(shù),AX←商,DX←余數(shù)例2-2-2-11:要進行除法(AX)÷(BX),假設AX、BX內(nèi)均為無符號數(shù): MOV DX,0 ;32位被除數(shù)高16位清零 DIV BX ;(DX,AX)÷BX,AX←商,DX←余數(shù)2.2.2算術運算指令652.2指令系統(tǒng)除法類指令1、DIV〔UnsignedDivision〕:無符號除法例如,要進行除法(AX)÷5,首先應確定是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算術運算指令662.2指令系統(tǒng)除法類指令2、IDIV〔SignedIntegerDivision〕:有符號數(shù)除法格式:IDIV 源操作數(shù)源操作數(shù):8位/16位的存放器/存儲器功能:8位源操作數(shù)時:(AX)÷源操作數(shù),AL←商,AH←余數(shù)16位源操作數(shù)時:(DX,AX)÷源操作數(shù),AX←商,DX←余數(shù)此操作與DIV相同,但操作數(shù)必須都是帶符號數(shù),且余數(shù)符號與被除數(shù)相同。如-30除以+8,可以得到商為-4,余數(shù)為+2;也可以得到商為-3,余數(shù)為-6。這兩種結果都有是正確的,前一種情況的余數(shù)為正,后一種情況的余數(shù)為負。8086指令系統(tǒng)規(guī)定余數(shù)符號與被除數(shù)相同。所以得到后一種結果。2.2.2算術運算指令672.2指令系統(tǒng)除法類指令進行除法操作時,無論對DIV或IDIV,都要注意一個問題:由于除法指令字節(jié)操作時商為8位,字操作時商為16位,商數(shù)超過了目標存放器AL或AX所能存放數(shù)的范圍。這時計算時機自動產(chǎn)生一個中斷類型號為0的除法錯中斷,相當于執(zhí)行了除數(shù)為0的運算,所得的商和余數(shù)都不確定。對于無符號數(shù),字節(jié)操作時,允許最大商為FFH,字操作時最大商為FFFFH,假設超過這個范圍就會溢出。對于有符號數(shù),字節(jié)操作時商的范圍為-128~+127,字操作時商的范圍為-32768~+32767。2.2.2算術運算指令682.2指令系統(tǒng)
2.2.2算術運算指令對于無符號數(shù)相除,AH和DX的擴展很簡單,只要將這兩個存放器清0就可以了。對有符號數(shù)除法指令,字節(jié)操作時要求被除數(shù)為16位,字操作時要求被除數(shù)為32位。這時不能簡單地將高位置0,而應該先用下面的符號擴展指令將被除數(shù)轉(zhuǎn)換成除法指令所要求的格式,再執(zhí)行除法指令。擴展傳送指令把8位的操作數(shù)符號擴展為16位,或者把16位的操作數(shù)符號擴展為32位,送入目的存放器692.2指令系統(tǒng)
2.2.2算術運算指令擴展類指令(擴展傳送指令CBW,CWD)CBW ;將AL存放器內(nèi)符號位擴充到AH中的所有位,這時AH被稱為是AL的符號擴充。8位的操作數(shù)擴展成16位,送入AX。此操作不影響標志位。AL的最高有效位為0,那么AH=00H;AL的最高有效位為1,那么AH=0FFH;設有〔AL〕=60H;CBW;〔AX〕=0060H設有〔AL〕=81H;CBW;〔AX〕=FF81H
702.2指令系統(tǒng)
2.2.2算術運算指令擴展類指令(擴展傳送指令CBW,CWD)CWD ;將AX存放器內(nèi)符號位擴充到DX存放器的所有位中,16位操作數(shù)變成32位操作數(shù),送入DX(高位)和AX。此操作不影響標志位。AX的最高有效位為0,那么DX=0000H;AX的最高有效位為1,那么DX=0FFFFH;設有〔AX〕=8060HCWD;〔DX〕=0FFFFH,〔AX〕=8060H設有〔AX〕=7060HCWD;〔DX〕=0000H,〔AX〕=7060H712.2指令系統(tǒng)例如,要進行除法(AX)÷(BX),AX、BX內(nèi)均為有符號數(shù)CWD ;被除數(shù)AX符號擴展到DXIDIVBX ;(DX,AX)÷(BX),AX←商,DX←余數(shù)相同的兩組二進制代碼分別用DIV和IDIV運算,可能得到不同的結果:例如:(AX)=0FFFFH,(CL)=1DIVCL;0FFFFH÷1=0FFFFH,產(chǎn)生除法溢出(商最大為AL=FFH。)IDIVCL;(AL)=0FFH,(AH)=0〔-1÷1=-1……0〕2.2.2算術運算指令722.2指令系統(tǒng)輔助操作類指令壓縮BCD數(shù)運算2.2.2算術運算指令用二進制加法指令將兩個壓縮BCD數(shù)相加:每一個4位組中,如果本組數(shù)字相加的和不超過9,結果正確。如果本組的和有進位〔超過15〕,或者雖然沒有進位,但是
出現(xiàn)了非法的組合〔本組和小于16,大于9〕,得到的結果是
錯誤的。732.2指令系統(tǒng)輔助操作類指令壓縮BCD數(shù)運算對相加后的結果作調(diào)整如果4位組的和有進位,或者出現(xiàn)了非法組合,將本組數(shù)字加6調(diào)整2.2.2算術運算指令在80X86微處理器上,上述調(diào)整由“十進制調(diào)整指令〞實現(xiàn)。742.2指令系統(tǒng)輔助操作類指令壓縮BCD碼加法的調(diào)整指令指令格式:DAA〔DecimalAdjustforAdd〕DAA調(diào)整算法2.2.2算術運算指令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指令會影響AF,CF,PF,SF,ZF,而對OF來說,執(zhí)行DAA指令后可為0,也可為1,但無意義。752.2指令系統(tǒng)輔助操作類指令壓縮BCD碼加法的調(diào)整指令DAA〔DecimalAdjustafterAddition〕十進制加法調(diào)整2.2.2算術運算指令格式:DAA功能:對AL中的加法結果進行BCD運算調(diào)整例:89+57MOV AL,89H;BCD數(shù)89裝入AL,使用16進制數(shù)格式ADD AL,57H;按照二進制格式相加,〔AL〕=0E0H,AF=1DAA ;進行BCD加法調(diào)整,〔AL〕=46H,CF=1說明:調(diào)整之前先進行二進制加法,和必須在AL中。762.2指令系統(tǒng)輔助操作類指令壓縮BCD碼減法的調(diào)整指令DAS調(diào)整算法:2.2.2算術運算指令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指令類似會影響AF,CF,PF,SF,ZF,而對OF來說,執(zhí)行DAS指令后無意義。772.2指令系統(tǒng)輔助操作類指令壓縮BCD碼減法的調(diào)整指令
2.2.2算術運算指令格式:DAS功能:對AL中的減法結果進行BCD運算調(diào)整例:83-57MOV AL,83H;BCD數(shù)83裝入AL,使用16進制數(shù)格式SUB AL,57H;按照二進制格式相減,〔AL〕=2CH,AF=1DAS ;進行BCD減法調(diào)整,〔AL〕=26H,CF=0說明:調(diào)整之前先進行二進制減法,差在AL中。782.2指令系統(tǒng)輔助操作類指令非壓縮BCD數(shù)運算:AAA〔ASCIIAdjustafterAddition〕非壓縮十進制加法調(diào)整2.2.2算術運算指令AAA調(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指令會影響AF和CF,,而對OF,PF,SF,ZF來說,執(zhí)行AAA指令后無意義。792.2指令系統(tǒng)輔助操作類指令非壓縮BCD數(shù)運算2.2.2算術運算指令AAA〔ASCIIAdjustafterAddition〕非壓縮十進制加法調(diào)整格式:AAA功能:對AL中的加法結果進行非壓縮BCD數(shù)運算調(diào)整例:’9’+’8’設AH=0MOV AL,‘9’;非壓縮BCD數(shù)9裝入AL,使用ASCII格式ADD AL,‘8’;按照二進制格式相加,〔AL〕=71H,AF=1AAA ;非壓縮BCD加法調(diào)整,〔AL〕=07H,CF=1說明:調(diào)整之前先進行二進制加法,和必須在AL中; 低4位的進位用兩種方式同時表達:CF=1,AH=AH+1=01H。AX=0107H802.2指令系統(tǒng)非壓縮BCD碼減法的調(diào)整指令AAS(ASCIIAdjustafterSubtraction)非壓縮十進制減法調(diào)整2.2.2算術運算指令AAS調(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指令會影響AF和CF,,而對OF,PF,SF,ZF來說,執(zhí)行AAA指令后無意義。812.2指令系統(tǒng)非壓縮BCD碼減法的調(diào)整指令AAS(ASCIIAdjustafterSubtraction)非壓縮十進制減法調(diào)整AAS調(diào)整算法2.2.2算術運算指令格式:AAS功能:對AL中的減法結果進行非壓縮BCD數(shù)運算調(diào)整例:’6’-’8’MOVAL,‘6’;非壓縮BCD數(shù)6裝入AL,使用ASCII格式SUB AL,‘8’;按照二進制格式相減,(AL)=0FEH,AF=1AAS ;進行非壓縮BCD減法調(diào)整,(AL)=08H,CF=1說明:調(diào)整之前先進行二進制減法,差在AL中。 低4位的借位用兩種方式同時表達:CF=1,AH=AH-1。82邏輯與移位指令〔位操作類指令〕:分為三類。1、邏輯運算指令主要包括:AND,OR,XOR、NOT和TEST指令。2、算術邏輯移位指令:SHL/SAL邏輯算術左移;SHR、SAR邏輯算術右移。3、循環(huán)移位:ROL、ROR、RCL、RCR2.2指令系統(tǒng)2.2.3邏輯與移位指令832.2指令系統(tǒng)邏輯運算指令
邏輯運算指令主要包括:AND,OR,XOR、NOT和TEST指令。
邏輯運算指令將每一位二進制數(shù)單獨進行運算,各位之間沒有相互進位的關系。
邏輯運算指令執(zhí)行之后,CF、OF標志位固定為0。AF無定義;SF,PF,ZF按照運算結果的特征設置。(其中:NOT不影響標志位。)2.2.3邏輯與移位指令842.2指令系統(tǒng)邏輯運算指令邏輯非NOT格式:NOT 目的操作數(shù)功能:將目的操作數(shù)各位取反。取反規(guī)那么為:NOT0=1,NOT1=0說明:目的操作數(shù)可以是8/16位存放器/存儲器操作數(shù)。NOT不影響標志位。例:MOV AL,35H;(AL)=35H=00110101BNOT AL;(AL)=0CAH=11001010B,各位取反2.2.3邏輯與移位指令852.2指令系統(tǒng)邏輯運算指令AND邏輯乘〔邏輯與〕指令格式:AND 目的操作數(shù),源操作數(shù)功能:目的操作數(shù)和源操作數(shù)進行邏輯乘,送目的操作數(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說明:使用AND指令可以對操作數(shù)有選擇地局部清零; 對操作數(shù)類型的要求與ADD指令相同。例: MOV AL,‘7’ ;(AL)=37H AND AL,0FH ;(AL)=07H,字符‘7’轉(zhuǎn)換成二進制數(shù)例: AND CX,0 ;(CX)=0,同時CF=OF=0,ZF=1例: AND AX,AX ;AX的值不變,CF=OF=02.2.3邏輯與移位指令862.2指令系統(tǒng)邏輯運算指令OR邏輯加〔邏輯或〕指令格式:OR 目的操作數(shù),源操作數(shù)功能:將目的操作數(shù)和源操作數(shù)進行邏輯加,送目的操作數(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說明:使用OR指令可以有選擇地將操作數(shù)的某些位置1; OR指令對操作數(shù)類型的要求與ADD指令相同。例: MOVAL,7;(AL)=07H ORAL,30H;(AL)=37H,二進制數(shù)7轉(zhuǎn)換成字符‘7’例: ORAX,AX;AX的值不變,CF=OF=02.2.3邏輯與移位指令872.2指令系統(tǒng)邏輯運算指令XOR邏輯異或〔半加〕指令格式:XOR 目的操作數(shù),源操作數(shù)功能:將目的操作數(shù)和源操作數(shù)進行邏輯異或運算。邏輯異或規(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說明:使用XOR指令可以有選擇地將操作數(shù)的某些位取反; 對操作數(shù)類型的要求與ADD指令相同。例:MOV AL,35H;〔AL〕=35HXOR AL,0FH;〔AL〕=3AH,高4位不變,低4位取反例:XOR AX,AX;將AX清零,同時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指令說明:指令形式、操作數(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í)行后對PF、ZF、SF的影響同ADD,CF、OF被清零,AF隨機。2.2.3邏輯與移位指令892.2指令系統(tǒng)測試指令TEST指令格式:TESTDST,SRC;DST∧SRC指令操作:目的與源操作數(shù)相與去改變標志位指令說明:該指令與AND的唯一區(qū)別是不回送結果;與CMP的區(qū)別是,TEST指令的目的與源操作數(shù)相與去改變標志位,而CMP那么是兩者相減去改變標志位。當用立即數(shù)作為TEST指令的操作數(shù)時,在不改變原有操作數(shù)的根底上,TEST常用來檢測某一位或幾位是否滿足某條件。
2.2.3邏輯與移位指令902.2指令系統(tǒng)測試指令TEST指令格式:TESTDST,SRC;DST∧SRC指令操作:目的與源操作數(shù)相與去改變標志位指令說明:具體的實現(xiàn)方法是用立即操作數(shù)作為源操作數(shù),被檢測的對象為目的操作數(shù),通過把源操作數(shù)的某一位或某幾位設置為“1〞,實現(xiàn)對目的操作數(shù)的相應位的測試指令實例:TESTAX,0000000000100000B ;測試AX中D5位是否為0TESTBX,000FH ;測試BX的低4位是否為02.2.3邏輯與移位指令912.2指令系統(tǒng)例:1.AX=3639H(ASCII6和9),要將它們轉(zhuǎn)換成BCD碼0609H,并將結果仍放在AX.ANDAX,0F0FH;AX=0609H2.AX=0609H(BCD碼),要將它們轉(zhuǎn)換成ASCII碼,結果仍在AX中.ORAX,3030H;AX=3639H假設AL中存有某外設端口的狀態(tài)信息,其中D1位控制揚聲器發(fā)聲,要求該位在0,1之間變換,原來是1變成0,原來是0,變成1,其余各位保持原來變.XORAL,00000010B2.2.3邏輯與移位指令922.2指令系統(tǒng)邏輯運算指令應用:主要用于數(shù)據(jù)的拼裝、拆卸、測試,也可用于清零某幾位、置1某幾位或取某幾位。當一個操作數(shù)自身做“異或〞運算時,其結果為“0〞且使OF、CF為“0〞,這是使存放器和CF、OF標志都為零的常用方法。如指令XORBX,BX假設要將操作數(shù)中的假設干位取反,假設干位保持不變,可用立即操作數(shù)與其“異或〞實現(xiàn)。此時,立即數(shù)應這樣組成:保持不變的位為“0〞,要取反的位為“1〞,與“全1〞,“異或〞相當于NOT指令但同時改變標志位假設要將操作數(shù)中的假設干位置1,用OR指令;假設要將操作數(shù)中的假設干位清0,用AND指令.2.2.3邏輯與移位指令932.2指令系統(tǒng)算術邏輯移位指令
邏輯移位指令把操作數(shù)看作是各位相互獨立的二進制串,最后移出的位進入CF,空出的位用0填充。
算術移位指令把操作數(shù)看做是有符號的整數(shù),最后移出的位進入CF。邏輯、算術移位指令2.2.3邏輯與移位指令942.2指令系統(tǒng)算術邏輯移位指令〔1〕SHL〔ShiftLeft〕邏輯左移格式:SHL 目的操作數(shù),移位次數(shù)目的操作數(shù):8/16位存放器/存儲器;移位次數(shù):常數(shù)1或存放器CL。功能:將目的操作數(shù)向左移動指定的位數(shù),目的操作數(shù)的高位移入CF,低位用0填充說明:對于無符號數(shù),每左移一次等于乘以2,CF保存最后移出的二進制位. 2.2.3邏輯與移位指令952.2指令系統(tǒng)算術邏輯移位指令〔1〕SHL〔ShiftLeft〕邏輯左移例2-2-3-1:用移位指令實現(xiàn)AX←(AX)×10PUSH BX ;保護BX存放器的原來的值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 ;恢復BX存放器的原來的值2.2.3邏輯與移位指令962.2指令系統(tǒng)算術邏輯移位指令〔2〕SHR〔ShiftRight〕邏輯右移格式:SHR 目的操作數(shù),移位次數(shù)目的操作數(shù):8/16位存放器/存儲器;移位次數(shù):常數(shù)1或存放器CL。功能:將目的操作數(shù)向右移動指定的位數(shù),目的操作數(shù)的低位
移入CF,高位用0填充說明:對于無符號數(shù),每右移一次等于被2除。CF保存最后移
出的二進制位。 2.2.3邏輯與移位指令972.2指令系統(tǒng)算術邏輯移位指令〔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)算術邏輯移位指令〔1〕SHL〔ShiftLeft〕邏輯左移〔2〕SHR〔ShiftRight〕邏輯右移例3:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Linux環(huán)境下的Shell編程-深度研究
- 虛擬仿真與數(shù)字孿生協(xié)同優(yōu)化-深度研究
- 社工服務標準化研究-深度研究
- 視頻內(nèi)容語義分析-深度研究
- 督導信息化策略-深度研究
- 柔性電路可靠性提升-第1篇-深度研究
- 多屏互動體驗研究-深度研究
- 跨文化視覺快感比較-第1篇-深度研究
- 貝葉斯方法與隨機過程-深度研究
- 代銷意向合同范本
- 2021新版GJB9001C-2017體系文件內(nèi)審檢查表
- 風篩式清選機的使用與維護
- 《計算流體力學CFD》
- 馬克思主義宗教觀課件
- 語文版九年級下冊課外閱讀練習
- 【課件】第11課+美術的曙光-史前與早期文明的美術+課件高中美術人教版(2019)美術鑒賞
- 樂沛LOTSPLAY德國HABA邏輯思維課程介紹手冊
- 高中化學人教版一輪復習-晶體結構與性質(zhì)(復習課件)
- GB/T 22919.3-2008水產(chǎn)配合飼料第3部分:鱸魚配合飼料
- 前行第07節(jié)課(僅供參考)課件
- 船舶涂裝課件
評論
0/150
提交評論