




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
8086/8088指令系統(tǒng)一、8086/8088指令系統(tǒng)特點(diǎn)二、8086/8088指令格式三、尋址方式四、指令的分類第三章8086/8088微處理器及其系統(tǒng)一、8086/8088指令系統(tǒng)的特點(diǎn)1、可變長指令,復(fù)雜2、尋址方式多樣、靈活,數(shù)據(jù)處理能力強(qiáng)
字節(jié),字,二進(jìn)制,十進(jìn)制3、有重復(fù)指令、乘除指令,條件轉(zhuǎn)移、移位/循環(huán)指令4、增強(qiáng)軟件中斷功能和多處理器功能的指令第三章8086/8088微處理器及其系統(tǒng)二、8086/8088指令格式無操作數(shù)指令單操作數(shù)指令雙操作數(shù)指令第三章8086/8088微處理器及其系統(tǒng)無操作數(shù)指令指令中只包含1個(gè)操作碼:第三章8086/8088微處理器及其系統(tǒng)HLT,NOP,AAA,INT,RET,LOCK,….例如:HLTOP11110100F4HHex:16進(jìn)制單操作數(shù)指令第三章8086/8088微處理器及其系統(tǒng)單操作數(shù)在寄存器中在存儲(chǔ)器中單字節(jié)指令雙字節(jié)指令雙字節(jié)指令三字節(jié)指令四字節(jié)指令單字節(jié)指令,單操作數(shù)在寄存器中第三章8086/8088微處理器及其系統(tǒng)OP(5bit)OPREG(3bit)SEGOP7320753420AX,BX,CX,DX,SP,BP,SI,DIES,CS,SS,DS兩種格式雙字節(jié)指令,單操作數(shù)在寄存器中第三章8086/8088微處理器及其系統(tǒng)單操作數(shù)雙字節(jié):操作數(shù)在寄存器中,2種格式OPWMODOPR/M15…..…...876543210OP(8bit)OP(8bit)W=0,操作數(shù)是字節(jié)W=1,操作數(shù)是字MOD=11,表示操作數(shù)在寄存器中R/M對(duì)應(yīng)8位或16位寄存器:000——AL/AX001——CL/CX010——DL/DX………….操作數(shù)固定為AL/AX格式1格式2單操作數(shù)在存儲(chǔ)器中第三章8086/8088微處理器及其系統(tǒng)三種格式:2字節(jié),MOD=00OPWMODOPR/MOPWMODOPR/MDISP-8OPWMODOPR/MDISP-LDISP-H3字節(jié),MOD=014字節(jié),MOD=10雙操作數(shù)指令第三章8086/8088微處理器及其系統(tǒng)2~6字節(jié)指令兩個(gè)操作數(shù)均在寄存器中一個(gè)在寄存器中,一個(gè)在存儲(chǔ)器中一個(gè)在寄存器中,一個(gè)是立即數(shù)一個(gè)在存儲(chǔ)器中,一個(gè)是立即數(shù)寄存器由REG和W字段給定兩個(gè)操作數(shù)不能同時(shí)在存儲(chǔ)器中D:寄存器方向,1目標(biāo)0源W:1字,0字節(jié)MOD:位移方式。00-無位移,01-8位位移,10-16位位移,11-操作數(shù)在寄存器中REG:寄存器編碼R/M:給出寄存器編碼,或操作數(shù)有效地址計(jì)算方法雙操作數(shù)指令中字段的定義第三章8086/8088微處理器及其系統(tǒng)7….21076543210DISP-LDISP-HDATA-LDATA-HOPDWMODREGR/MOrDATA-LOrDATA-HB1B2B3B4B5B6
地址位移量(或立即數(shù))立即數(shù)B1:操作碼B2:尋址方式B3~B6:對(duì)地址偏移量或立即數(shù)的設(shè)置雙操作數(shù)指令中字段的定義第三章8086/8088微處理器及其系統(tǒng)OP:指令操作碼D:來/到寄存器的方向。D=0,來;D=1,去W:操作數(shù)是字還是字節(jié)。W=1,字;W=0,字節(jié)MOD:指令的位移方式(有效地址EA的計(jì)算方法)REG:寄存器的編碼R/M:操作數(shù)所在的寄存器編碼,或存儲(chǔ)器單元的有效地址具體的機(jī)器碼由匯編程序自動(dòng)完成!三、尋址方式第三章8086/8088微處理器及其系統(tǒng)一、固定尋址二、立即數(shù)尋址三、寄存器尋址四、存儲(chǔ)器尋址
1)直接尋址方式
2)間接尋址方式五、其它尋址方式 串操作指令尋址方式
I/O端口尋址方式 轉(zhuǎn)移類指令尋址一、固定尋址第三章8086/8088微處理器及其系統(tǒng)對(duì)某個(gè)固定的寄存器進(jìn)行操作,例如:ASCII碼調(diào)整指令A(yù)AA,總是對(duì)AL進(jìn)行操作。二、立即數(shù)尋址第三章8086/8088微處理器及其系統(tǒng)操作數(shù)就在指令中。例如
MOVAX,1680H三、寄存器尋址第三章8086/8088微處理器及其系統(tǒng)操作數(shù)在寄存器中——AX,BX,CX,DX等。例如:
INCreg將寄存器內(nèi)容加1OP01000REGrrr000AX001BX010CX011DXSPBPSIDI四、存儲(chǔ)器尋址第三章8086/8088微處理器及其系統(tǒng)有效地址的計(jì)算:EA=基址值(BX,BP)+變址值(SI,DI)+位移量D(8bit,0, 16bit)1、直接尋址 例如:MOVAX,[1680H]2、間接尋址(BX/BP、SI、DI及其組合,且BX、BP不能同時(shí)使用)基址尋址:(BX或BP)+地址位移量例:MOVAX,disp[BX]
變址尋址:(SI或DI)+地址位移量例:MOVAX,disp[DI]
基址+變址尋址:(BX或BP)+(SI或DI)+地址位移量 例:MOVAX,disp[BX+DI]3、在存儲(chǔ)器尋址中,[
]中只能用以下4個(gè)寄存器或其組合:
BX,BP,SI,DI例如單獨(dú)使用:
movax,[bx];movbx,[bp];movax,[si];movax,[di];允許4種組合使用:BX+SI,BX+DI,BP+SI,BP+DImovax,[bx]movax,[si]movax,[di]movax,[bp]movax,[bx+si]movax,[bx+di]movax,[bp+si]movax,[bp+di]movax,[bp+si+idata]movax,[bp+di+idata]movax,[bx+si+idata]movax,[bx+si+idata]錯(cuò)誤的用法:movax,[bx+bp];
movax,[si+di]
movbx,[ax];
movcx,[dx]4、在[
]中使用寄存器bp,段地址就默認(rèn)在ss中。例如:movax,[bp]含義:(ax)=((ss)*16+(bp))movax,[bp+idata]
含義:(ax)=((ss)*16+(bp)+idata)movax,[bp+si]含義:(ax)=((ss)*16+(bp)+(si))movax,[bp+si+idata]含義:(ax)=((ss)*16+(bp)+(si)+idata)五、其他尋址方式第三章8086/8088微處理器及其系統(tǒng)1、串操作指令尋址方式 對(duì)數(shù)據(jù)串(字符串)進(jìn)行操作2、I/O端口尋址方式 直接尋址:端口地址在指令中直接給出; 間接尋址:通過DX寄存器尋址。3、轉(zhuǎn)移類指令尋址方式 段內(nèi)轉(zhuǎn)移 段間轉(zhuǎn)移四、指令分類第三章8086/8088微處理器及其系統(tǒng)(一)數(shù)據(jù)傳送指令(二)算術(shù)運(yùn)算指令(三)邏輯運(yùn)算指令和移位循環(huán)指令(四)串操作指令(五)程序控制指令(六)CPU控制指令(一)數(shù)據(jù)傳送指令第三章8086/8088微處理器及其系統(tǒng)通用數(shù)據(jù)傳送目標(biāo)地址傳送標(biāo)志位傳送I/O數(shù)據(jù)傳送
通用數(shù)據(jù)傳送指令
MOV,PUSH,POP,XCHG,XLAT第三章8086/8088微處理器及其系統(tǒng)MOVd,s;ds將源s的操作數(shù)送往目的d7種數(shù)據(jù)傳送類型:1、MOVmem/reg1,mem/reg2;
存儲(chǔ)器/寄存器——存儲(chǔ)器/寄存器2、MOVmem/reg,data;
立即數(shù)——存儲(chǔ)器/寄存器3、MOVreg,data;
立即數(shù)——寄存器4、MOVac,mem;
存儲(chǔ)器——累加器(AX)5、MOVmem,ac;
累加器——存儲(chǔ)器6、MOVmem/reg,segreg;
段寄存器CS,DS,SS,ES——存儲(chǔ)器/寄存器7、MOVsegreg,mem/reg; 存儲(chǔ)器/寄存器——段寄存器DS,SS,ES CS除外!注:不能直接進(jìn)行“存儲(chǔ)器——存儲(chǔ)器”之間的數(shù)據(jù)傳送!MOV指令例:
MOVAL,12H; 立即數(shù)送入寄存器
MOVBX,AX; 寄存器送入寄存器
MOVAX,[SI]; 間接尋址,變址尋址,存儲(chǔ)器送寄存器
MOV[DI],CX; 間接尋址,變址尋址,寄存器送存儲(chǔ)器
MOVDS,DATA[SI+BX]; 變址+基址+位移量DATA
MOV[DI],[SI];非法指令!辦法:
MOVAX,[SI]; MOV[DI],AX;例:MOVWORDPTR[BXH],12ABH第三章8086/8088微處理器及其系統(tǒng)WORDPTR:偽指令,表示字?jǐn)?shù)據(jù)類型假設(shè):BX=1200H,CS=1800H,IP=0500H,DS=3000H結(jié)果:將立即數(shù)12ABH送到地址為33200H和33201H的存儲(chǔ)器單元中CS:1800IP:0500+。。。。。C7870020AB12180000405300003320033201DS:3000BX:1200+。。。。。AB12偏移量2000H加6CS段DS段+PUSH,POP堆棧指令PUSHs;將源s(16位)壓入堆棧POPd;將當(dāng)前棧頂相鄰兩字節(jié)數(shù)據(jù)彈出到d作用:在子程序調(diào)用或中斷處理中,保存或恢復(fù)現(xiàn)場數(shù)據(jù)PUSH將寄存器的值保存到堆棧中POP將堆棧數(shù)據(jù)恢復(fù)到寄存器中PUSH例如:PUSHBX當(dāng)前狀態(tài):CS=1000H,IP=0030H,SS=2000H, SP=0040H,BX=2340H
棧頂?shù)刂罚篠S×16+SP=20040H執(zhí)行后:
BX內(nèi)容被壓入堆棧
SP-2→SP, 棧頂位置:SS×16+SP=2003EHXCHGd,s將源和目的操作數(shù)相互交換位置。注意:1、不能在兩個(gè)存儲(chǔ)器之間進(jìn)行交換;2、段寄存器和指令指針I(yè)P不能使用本指令。例:
XCHGAX,[SIH]XLAT字節(jié)翻譯指令,代碼轉(zhuǎn)換指令功能:將AL中待轉(zhuǎn)換的序號(hào)轉(zhuǎn)換成對(duì)應(yīng)的碼,然后回送到AL中。例如:將十進(jìn)制數(shù)轉(zhuǎn)換成七段顯示碼。過程:1、建立代碼轉(zhuǎn)換表,并將表的首地址置入BX;2、將待轉(zhuǎn)換的數(shù)的表中序號(hào)(索引)送入AL;3、執(zhí)行XLAT
MOVBX,0030H MOVAL,5 XLAT目標(biāo)地址傳送指令
LEA,LDS,LES第三章8086/8088微處理器及其系統(tǒng)LEAd,s(LEA:LoadEffectiveAddress)功能:把源操作數(shù)s(存儲(chǔ)器操作數(shù))的16位偏移地址傳送到寄存器d例:LEABX,[SI+100AH]假設(shè):CS=1500H,IP=0200H,DS=2000H,SI=0030H
源=1234H,存放在[SI+100AH]開始的兩個(gè)存儲(chǔ)單元中執(zhí)行LEABX,[SI+100AH]結(jié)果:BX=103AH注意:MOVBX,[SI+100AH]
和LEABX,[SI+100AH]有什么不同?LDS,取某變量的32位地址指針LDSd,s(LoadpointerintoregisterandDS)功能:取變量的32位地址指針過程:s指定連續(xù)4個(gè)存儲(chǔ)單元, 將前兩個(gè)字節(jié)作為偏移量,送入d;
將后兩個(gè)字節(jié)作為段地址,送入DS例如:LDSDI,DS:[2130H]
設(shè)(DS)=3000HDIDS
偏移量段基址32130HLES,取某變量的32位地址指針LESd,s功能:同LDS,區(qū)別在于段地址送入ES。標(biāo)志位傳送指令第三章8086/8088微處理器及其系統(tǒng)LAHF,將標(biāo)志寄存器低八位的內(nèi)容送給AHSAHF,將AH的內(nèi)容送給標(biāo)志寄存器的低八位
PUSHF,將標(biāo)志寄存器內(nèi)容送入堆棧POPF,將標(biāo)志寄存器內(nèi)容彈出堆棧例如:
...
REPZCMPSB;串比較
LAHF;保存標(biāo)志位
ADDSI,CX
SAHF;恢復(fù)標(biāo)志位
JNEEXIT
說明:本例使用串比較指令,循環(huán)終止與否的依據(jù)是零標(biāo)志位。如果直接在JNEEXIT前面加上ADDSI,CX,則會(huì)改變標(biāo)志寄存器的內(nèi)容影響比較結(jié)果,因此使用LAHF和SAHF對(duì)標(biāo)志寄存器進(jìn)行保護(hù)。I/O數(shù)據(jù)傳送指令第三章8086/8088微處理器及其系統(tǒng)功能:AX/AL與I/O口的數(shù)據(jù)傳送從端口輸入: 從端口輸出:INAL,PORT(8bit) OUTPORT(8bit),ALINAX,PORT(8bit) OUTPORT(8bit),AXINAL,DX(16bit) OUTDX(16bit),ALINAX,DX(16bit) OUTDX(16bit),AX輸入輸出指令直接輸入輸出指令:格式:INAL,PORT;操作:AL(PORT)1byteINAX,PORT;AX(PORT)2bytes
OUTPORT,AL;(PORT)1byteALOUTPORT,AX;(PORT)2bytesAX注:PORT為輸入輸出端口號(hào),范圍為0~255(00~FFH)間接輸入輸出指令格式:INAL,DX;操作:AL(DX)1byteINAX,DX;AX(DX)2bytesOUTDX,AL;(DX)ALOUTDX,AX;(DX)AX
在間接輸入輸出指令之前,需將端口號(hào)送入DX.
MOVDX,XXXXH輸入輸出指令的使用IN指令:用于從數(shù)據(jù)端口輸入數(shù)據(jù)或從狀態(tài)端口輸入狀態(tài)字.
例:INAL,28H;LOP:INAL,27H;MOVDS:[2000H],AL;TESTAL,01H;JNZLOP………
OUT指令:用于輸出數(shù)據(jù)或命令給指定的I/O端口例1MOVAL,[SI]OUT80H,AL;設(shè)80H為數(shù)據(jù)口的口地址例2MOVDX,280H;設(shè)280H為控制口的口地址
MOVAL,01HOUTDX,AL(二)算術(shù)運(yùn)算指令第三章8086/8088微處理器及其系統(tǒng)1、加法:ADD,ADC,INC2、減法:SUB,SBB,DEC,NEC,CMP3、乘法:MUL,IMUL4、除法:DIV,IDIV,CBW,CWD5、十進(jìn)制調(diào)整:AAA,DAA,AAS,DAS,AAD1、加法第三章8086/8088微處理器及其系統(tǒng)(1)ADDd,sdd+s加法(字節(jié)/字)(2)ADCd,sdd+s+CF帶進(jìn)位加法(字節(jié)/字),用于 多字節(jié)相加(3)INCddd+1加1(字節(jié)/字)
CF:標(biāo)志寄存器的進(jìn)位位ADD相加結(jié)果保留在d中結(jié)果影響標(biāo)志位源操作數(shù)s:8/16位通用寄存器、存儲(chǔ)器、立即數(shù)目標(biāo)操作數(shù)d:8/16位通用寄存器、存儲(chǔ)器注意:
1)目標(biāo)操作數(shù)d不能是立即數(shù)
2)d和s不能同時(shí)為存儲(chǔ)器操作數(shù)第三章8086/8088微處理器及其系統(tǒng)例1:ADDAL,20HADDBX,[0800H]ADD[2000H],CX例2:ADDAX,BX;ADDAX,CX;ADDAX,DX;AX
AX+BX+CX+DX例:ADDWORDPTR[BX+106BH],1234H
CS=1000H,IP=0300H,DS=2000H,BX=1200H第三章8086/8088微處理器及其系統(tǒng)CS:1000HIP:0300H+BX:1200HDS:2000HOPWMODREGR/MDISP-LDISP-HDATA-L00110100DATA-H0001001010000001100001110110101100010000++81876B103412103000102030405200002226B2226C......4433CS段DS段+*16*166B10ADD例:數(shù)組元素相加。數(shù)組ARRAY有10個(gè)單元,要求將3號(hào)、5號(hào)、7號(hào)單元內(nèi)容相加。MOVAL,0 ;AL清零MOVSI,3 ;SI指向元素3ADDAL,ARRAY[SI];加3號(hào)單元ADDAL,ARRAY[SI+2];加5號(hào)單元ADDAL,ARRAY[SI+4];加7號(hào)單元ARRAY:數(shù)組名稱ADD例帶進(jìn)位加法。兩個(gè)4字節(jié)數(shù),分別存放在BXAX和DXCX中。將它們相加,結(jié)果存放在BXAX中。ADDAX,CXADCBX,DX BXAX+DXCXCF------------------------------- BXAX2、減法(1)SUBd,sdd-s減法(2)SBBd,sdd-s-CF帶借位減法(3)DECddd-1目標(biāo)操作數(shù)減1(4)NEGddd+1取負(fù)(5)CMPd,sd-s 相減后置標(biāo)志位第三章8086/8088微處理器及其系統(tǒng)例:SUBAX,[BX]
CS=1000H,IP=60C0H,DS=2000H,BX=970EH第三章8086/8088微處理器及其系統(tǒng)CS:1000HIP:60C0H+BX:970EHDS:2000HOPDWMODREGR/M0010101100000111+672B160C001020304
200002970E2970F......FF00CS段DS段*16*16AX:8811HSUB8712HSUB例如:SUBAX,[BX];AX=AX-(BX所指的兩個(gè)存儲(chǔ)單元的內(nèi)容)SUBCL,BL;CL=CL-BLSUBBH,6AH;BH=BH-6AHSUBAX,0AAAAH;AX=AX-0AAAAHSUBDI,TEMP[SI];DI=DI-(TEMP+SI所指的兩個(gè)單元(1個(gè)字)的內(nèi)容)
SUBDI,1000[SI]SBB例1:SBBAX,BX;SBBWORDPTR[DI],50A0H;SBBDI,[BP+2];例2:兩個(gè)4字節(jié)數(shù),分別存放在BXAX和SIDI中。將它們相減,結(jié)果存放在BXAX中。SUBAX,DI;SBBBX,SI; BXAX-SIDI------------------------------- BXAXDECDECd;dd-1例如:DECBL;DECCX;DECBYTEPTR[DI];字節(jié)內(nèi)容減1DECWORDPTR[BP];字內(nèi)容減1NEGNEGd;dd+1求補(bǔ)碼指令
d:通用寄存器/存儲(chǔ)器CMPCMPd,s;比較指令,d-s,但結(jié)果不回送d,只影響標(biāo)志位
s:源操作數(shù),8/16位通用寄存器、存儲(chǔ)器、立即數(shù);
d:目的操作數(shù),8/16位通用寄存器、存儲(chǔ)器注:比較大小時(shí),無符號(hào)數(shù)和有符號(hào)數(shù)判斷條件不同。無符號(hào)數(shù):判斷CF有符號(hào)數(shù):判斷OF和SF
OF⊕SF=0,d>=s OF⊕SF=1,d<s3、乘法指令(1)MULs無符號(hào)數(shù)乘法乘數(shù):s指定的源操作數(shù),可以是通用寄存器
或存儲(chǔ)器被乘數(shù):存放在AL/AX中積:16/32位長;高位放在AH/DX中,低位放在AL/AX中結(jié)果影響標(biāo)志位(2)IMULs有符號(hào)數(shù)乘法第三章8086/8088微處理器及其系統(tǒng)例:MULBYTEPTR(BX+2AH)
CS=3000H,IP=0250H,AL=12H,DS=2000H,BX=0234H第三章8086/8088微處理器及其系統(tǒng)CS:3000HIP:0250H+BX:0234HDS:2000HOPWMODREGR/MDISP-8111101100100011100101010+。。。F6672A3000030250200002025E......66CS段DS段*16*1612HMUL072CH+3乘法代碼AXIMULIMULs;對(duì)有符號(hào)數(shù)的乘法指令對(duì)有符號(hào)數(shù),必須用IMUL,若用MUL,則結(jié)果會(huì)出現(xiàn)錯(cuò)誤。4、除法指令(1)DIVs無符號(hào)數(shù)除法被除數(shù):AX(字節(jié)除)或DX、AX中(字除)除數(shù):s指定的源操作數(shù),可以是通用寄存器或存儲(chǔ)器商:字節(jié)除:商——AL,余數(shù)——AH
字除:商——AX,余數(shù)——DX(2)IDIVs有符號(hào)數(shù)乘法(3)CBW,CWD字節(jié)轉(zhuǎn)換第三章8086/8088微處理器及其系統(tǒng)IDIV與DIV的區(qū)別區(qū)別:符號(hào)位的處理IDIV約定:除數(shù)為字節(jié),則被除數(shù)為AX;若被除數(shù)在AL中,則用CBW擴(kuò)展;除數(shù)為字,則被除數(shù)為DX,AX;若被除數(shù)在AX中,則用CWD擴(kuò)展。CBWCWDCBW:將字節(jié)擴(kuò)展為字,即將AL的最高位擴(kuò)展到AH。
AL最高位為0,則AH=00H; AL最高位為1,則AH=FFH;
實(shí)際上就是將AL的最高位送入AH的所有各位。CWD:將字?jǐn)U展為雙字,即將AX的最高位擴(kuò)展到DX。
AX最高位為0,則DX=0000H; AX最高位為1,則DX=FFFFH;執(zhí)行后,AX不變。
實(shí)際上就是將AX的最高位送入DX的所有各位。CBW和CWD兩條指令通常只對(duì)帶符號(hào)數(shù)使用。CBW指令只能對(duì)AL的內(nèi)容進(jìn)行擴(kuò)展,擴(kuò)展后AL的內(nèi)容不變但占用AH;CWD指令只能對(duì)AX的內(nèi)容進(jìn)行擴(kuò)展,擴(kuò)展后AX的內(nèi)容不變但占用DX。例如:若AX=379AH,則執(zhí)行完CBW指令后,AX=FF9AH,若執(zhí)行的是CWD指令,則DX=0000H,AX=379AH;若AX=977AH,
則執(zhí)行完指令CBW后,AX=007AH,若執(zhí)行的是CWD指令,則DX=FFFFH,AX=977AH。例:AX÷BX CWD IDIVBX
5、十進(jìn)制調(diào)整指令第三章8086/8088微處理器及其系統(tǒng)DAADecimaladjustforaddition在ADD和ADC之后對(duì)AL中的BCD碼結(jié)果進(jìn)行調(diào)整AAAASCIIadjustforaddition在ADD之后對(duì)AL中的ASCII碼結(jié)果進(jìn)行調(diào)整DASDecimalAdjustforSubtraction在SUB、SBB之后對(duì)AL中的BCD結(jié)果進(jìn)行調(diào)整AASASCIIadjustforSubtraction在SUB、SBB之后對(duì)AL中的ASCII結(jié)果進(jìn)行調(diào)整AAMASCIIAdjustforMultiplication在MUL、IMUL之后對(duì)AL中的BCD碼結(jié)果AADASCIIAdjustforDivision在DIV、IDIV之前對(duì)AX進(jìn)行調(diào)整BCD碼,組合(壓縮)型,
分離(非壓縮,拆開)型所謂BCD數(shù),就是二進(jìn)制編碼的十進(jìn)制數(shù)(BinaryCodedDecimal),它是用4位二進(jìn)制碼表示一位十進(jìn)制數(shù)(0000~1001是合法BCD碼;1010~1111是非法BCD碼).組合BCD數(shù):用一個(gè)字節(jié)表示2位BCD數(shù)例:37分離BCD數(shù):用一個(gè)字節(jié)的低4位表示一位BCD數(shù),高4位為0.
例:37001101110000001100000111例1:18+7=2500011000--------18+00000111--------700011111-----1F(1111是非法BCD碼)對(duì)結(jié)果進(jìn)行變換“調(diào)整”。調(diào)整方法:“加6調(diào)整”
00011111+00000110
00100101--------25(正確結(jié)果)
組合BCD數(shù)十進(jìn)制調(diào)整原理可見,在BCD碼結(jié)果中,只要一位BCD數(shù)字所對(duì)應(yīng)的二進(jìn)制碼超過9(1010~1111),就應(yīng)“加上6”,進(jìn)行調(diào)整。由軟件(調(diào)整指令)來完成。例2
:19+8=2700011001---------19+00001000---------8
00100001----------21(錯(cuò)誤!)運(yùn)算時(shí),低位向高位產(chǎn)生了進(jìn)位(AF=1或CF=1),實(shí)際上是“滿16進(jìn)一”,但進(jìn)到高位,當(dāng)成了10,“少6”,需“加6調(diào)整”.00100001+0000011000100111-----------27(正確)因此,在BCD數(shù)運(yùn)算時(shí),若AF=1(或CF=1)就需在低4位(或高4位)上進(jìn)行“加6調(diào)整”。
BCD數(shù)十進(jìn)制加、減法調(diào)整規(guī)則BCD數(shù)加法十進(jìn)制調(diào)整規(guī)則:如果兩個(gè)BCD數(shù)字相加的結(jié)果是一個(gè)在1010~1111之間的二進(jìn)制數(shù),或者有向高一位數(shù)字的進(jìn)位(AF=1或CF=1),則應(yīng)在現(xiàn)行數(shù)字上加6(0110B)調(diào)整。BCD數(shù)減法十進(jìn)制調(diào)整規(guī)則:
(1)AF=1,或運(yùn)算結(jié)果的低位是一個(gè)在1010~1111之間的二進(jìn)制數(shù),則在低位上要進(jìn)行減6調(diào)整。
(2)CF=1,或運(yùn)算結(jié)果的高位是一個(gè)在1010~1111之間的二進(jìn)制數(shù),則在高位上要進(jìn)行減6調(diào)整。例:有兩個(gè)字符串形式的十進(jìn)制數(shù),2658和3619,求二者之和。即2658=?
由題意,被加數(shù)和加數(shù)的每一位都以ASCII碼形式存放在內(nèi)存中。假定二數(shù)在內(nèi)存中均是低位在前,高位在后,另5個(gè)單元存放相加的結(jié)果。內(nèi)存中數(shù)據(jù)存放形式見下頁圖。36H32H39H31HSTRING1STRING238H35H36H33H被加數(shù)加數(shù)數(shù)據(jù)段‘8’‘5’‘6’‘2’‘9’‘1’‘6’‘3’SUM結(jié)果......程序段為:
LEASI,STRING1;STRING1偏移地址送SILEADI,STRING2;STRING2偏移地址送DI
LEABX,SUM;SUM偏移地址送BXMOVCX,4;循環(huán)4次
CLC;清進(jìn)位標(biāo)志AGAIN:MOVAL,[SI]ADCAL,[DI];帶進(jìn)位加
AAA;未壓縮BCD碼調(diào)整
MOV[BX],AL;結(jié)果存入SUMINCSI;調(diào)整指針
INCDIINCBXDECCX;循環(huán)計(jì)數(shù)器減1
JNZAGAIN
;若未處理完,則轉(zhuǎn)AGAIN
對(duì)AX中由兩個(gè)非壓縮BCD碼相乘的結(jié)果進(jìn)行調(diào)整。調(diào)整操作為:
(AL)/0AH,(AH)←商,(AL)←余數(shù)對(duì)AL和AH進(jìn)行操作;AAM跟在MUL指令之后;影響標(biāo)志位PF、SF、ZF,其它無定義;另:用AAM可實(shí)現(xiàn)≤99的二-十進(jìn)制轉(zhuǎn)換。乘法的十進(jìn)制調(diào)整指令A(yù)AM例1:按十進(jìn)制乘法計(jì)算7×8=?
程序段如下:
MOV AL,07H ;(AL)=07H MOV CL,08H ;(CL)=08H MUL CL ;(AX)=0038H
AAM
;(AH)=05H,(AL)=06H
所得結(jié)果為非壓縮的BCD碼。例2:把3AH轉(zhuǎn)換成等值的十進(jìn)制數(shù)。
MOVAL,3AH;58
AAM
;(AH)=05H,(AL)=08H除法的十進(jìn)制調(diào)正指令A(yù)AD對(duì)非壓縮BCD除法運(yùn)算進(jìn)行調(diào)整。調(diào)整操作為:
(AL)←(AH)×0AH+(AL)AH←0操作對(duì)象為AH,AL;AAD要在DIV指令之前使用;影響標(biāo)志位PF、SF、ZF,其它無定義;用AAD可實(shí)現(xiàn)≤99的十-二進(jìn)制轉(zhuǎn)換。例1:按十進(jìn)制除法計(jì)算55÷7=?
程序段如下:
MOV AX,0505H ;(AX)=55BCD MOV CL,07H ;(CL)=7
AAD
;(AX)=0037H DIV CL ;(AH)=6,(AL)=7
所得結(jié)果為非壓縮的BCD碼(商7余6)。例2:把73轉(zhuǎn)換成等值的二進(jìn)制數(shù)。
MOVAX,0703H;(AX)=73BCD
AAD
;(AX)=0049H(三)邏輯運(yùn)算和移位循環(huán)指令第三章8086/8088微處理器及其系統(tǒng)邏輯運(yùn)算指令與ANDd,s或ORd,s異或XORd,s非NOTd測試TESTd,s移位算術(shù)左移SALd,count算術(shù)右移SARd,count邏輯左移SHLd,count邏輯右移SHRd,count循環(huán)循環(huán)左移ROLd,count循環(huán)右移RORd,count帶進(jìn)位循環(huán)左移RCLd,count帶進(jìn)位循環(huán)右移RCRd,count移位、循環(huán)移位指令功能第三章8086/8088微處理器及其系統(tǒng)7/150C7/150C7/150C7/150C7/15C7/15C7/15C7/15CSALSARSHLSHR000ROLRORRCLRCR算術(shù)左移算術(shù)右移邏輯左移邏輯右移循環(huán)移位移位、循環(huán)移位指令功能移位指令的目的操作數(shù):寄存器或存儲(chǔ)單元。當(dāng)移位位數(shù)大于1時(shí),則用CL寄存器值表示,該操作數(shù)表達(dá)為CL。例如: SHLBX,1 SARAX,CL移位指令按照移入的位設(shè)置進(jìn)位標(biāo)志CF,根據(jù)移位后的結(jié)果影響SF、ZF、PF。邏輯左移SHL和算術(shù)左移SAL實(shí)際上是同一條指令的兩種助記符形式。1、邏輯運(yùn)算指令●運(yùn)算規(guī)則:按位操作,無進(jìn)/借位
●對(duì)標(biāo)志位的影響(除NOT指令外):
CFOFSFZFPFAF00***無定義
根據(jù)運(yùn)算結(jié)果設(shè)置(1)邏輯”與”
AND對(duì)兩個(gè)操作數(shù)進(jìn)行按位邏輯“與”操作。格式:ANDdest,src用途:保留操作數(shù)的某幾位,清零其他位。例1:保留AL中低4位,高4位清0。
ANDAL,0FH例2:AL中有字符’a’~’z’,將其轉(zhuǎn)換成大寫。
ANDAL,01011111B ANDAL,10100100B CMPAL,10100100BJZYES;如果是,則轉(zhuǎn)向YES……; 如果否,………
……YES:……;
例:測試AL的bit7,bit5,bit2是否都是1。(2)邏輯”或”
OR對(duì)兩個(gè)操作數(shù)進(jìn)行按位邏輯”或”操作。格式:ORdest,src用途:對(duì)操作數(shù)的某幾位置1;對(duì)兩操作數(shù)進(jìn)行組合。例:把AL中的非壓縮BCD碼變成相應(yīng)十進(jìn)制數(shù)的ASCII碼。
ORAL,30H例:把AL的第5位置為1
ORAL,00100000B例:把AH和AL中的非壓縮BCD碼組合成壓縮的BCD碼,放到AL中。
MOVCL,4 SHLAH,CL;邏輯左移
ORAL,AH(3)邏輯“非”(取反)NOT對(duì)操作數(shù)進(jìn)行按位邏輯”非”操作。格式:NOTmem/reg例:NOTCXNOTBYTEPTR[DI](4)邏輯”異或”
XOR對(duì)兩個(gè)操作數(shù)按位進(jìn)行”異或”操作。格式:XORdest,src用途:對(duì)reg清零(自身異或)
把reg/mem的某幾位變反(與’1’異或)例1:把AX寄存器清零。例2:把DH的bit4,3變反①M(fèi)OVAX,0XORDH,18H②XORAX,AX③ANDAX,0④SUBAX,AX
(5)測試指令TEST
操作與AND指令類似,但不將”與”的結(jié)果送回,只影響標(biāo)志位。TEST指令常用于位測試,與條件轉(zhuǎn)移指令一起用。例:測試AL的內(nèi)容是否為負(fù)數(shù)。
TESTAL,80H
;檢查AL中D7=1?
JNZMINUS
;是1(負(fù)數(shù)),轉(zhuǎn)MINUS
……;否則(正數(shù))不轉(zhuǎn)移MINUS:
……
……2.移位指令(1)非循環(huán)移位指令算術(shù)左移指令SAL(ShiftArithmeticLeft)
算術(shù)右移指令SAR(ShiftArithmeticRight)
邏輯左移指令SHL(ShiftLeft)
邏輯右移指令SHR(ShiftRight)這4條指令的格式相同,以SAL為例:
SALmem/reg,CL;移位位數(shù)大于1時(shí)1;移位位數(shù)等于1時(shí)移位指令執(zhí)行的操作如下圖所示:最低位最高位CF0(a)算術(shù)/邏輯左移SAL/SHL最低位最高位CF(b)算術(shù)右移SAR最低位最高位CF(c)邏輯右移SHR0非循環(huán)移位指令功能示意圖算術(shù)移位——把操作數(shù)看做有符號(hào)數(shù);邏輯移位——把操作數(shù)看做無符號(hào)數(shù)。移位位數(shù)放在CL寄存器中,如果只移1位,也可以直接寫在指令中。例如:
MOVCL,4 SHRAL,CL;AL中的內(nèi)容右移4位影響C,P,S,Z,O標(biāo)志。結(jié)果未溢出時(shí):左移1位≡操作數(shù)*2
右移1位≡操作數(shù)/210=8+2=23+21,可用移位實(shí)現(xiàn)乘10操作。程序如下:SALAL,1;2xMOVAH,AL;AH=2x
SALAL,1;4xSALAL,1;8xADDAL,AH;AL=8x+2x=10x例:把AL中的數(shù)x乘10例:前例中計(jì)算x×10。(1)采用乘法指令:
MOV BL,10MUL BL
共需70~77個(gè)T周期。(2)采用移位和加法指令:
SAL AL,1;2TMOV AH,AL;2T
SAL AL,1;2TSAL AL,1;2TADD AL,AH;3T
只需11個(gè)T周期,僅相當(dāng)于乘法的1/7。用移位操作代替乘除法可提高運(yùn)算速度(2)循環(huán)移位指令
不含進(jìn)位位的循環(huán)左移指令ROL
不含進(jìn)位位的循環(huán)右移指令ROR
含進(jìn)位位的循環(huán)左移指令RCL
含進(jìn)位位的循環(huán)右移指令RCR格式同非循環(huán)移位指令。移位位數(shù)放在CL寄存器中,如果只移1位,
也可以直接寫在指令中。循環(huán)移位指令只影響標(biāo)志位CF和OF。這4條指令的功能如下圖示:最低位最高位CF(a)ROL最低位最高位CF(c)RCL最低位最高位CF(b)ROR最低位最高位CF(d)RCR循環(huán)移位指令功能示意圖循環(huán)移位舉例:例1:將AL的高4位與低4位互換。
MOVCL,4ROLAL,CL例2:將1A00H內(nèi)存單元中的雙字循環(huán)左移1位。
CMP[1A00H],8000HCMC;進(jìn)位位求反
RCLWORDPTR[1A02H],1RCLWORDPTR[1A00H],1例:設(shè)在1000H開始存有四個(gè)壓縮的BCD碼12、34、56、78。要求把它們轉(zhuǎn)換為ASCII碼存放在3000H開始的單元中。假定DS、ES都已設(shè)置為數(shù)據(jù)段的段基址。程序見下頁。1000H3000H1234567832H31H34H33H36H35H38H37H
MOVSI,1000H ;SI←BCD首址
MOVDI,3000H ;DI←ASCII首址
MOVBX,4 ;置計(jì)數(shù)器初值BBB:MOVAL,[SI]
;AL←BCD碼,第一次取12H
ANDAL,0FH
;屏蔽高4位→02H
ORAL,30H
;轉(zhuǎn)換為ASCII碼→32H
STOSB
;保存結(jié)果
LODSB;再取[SI],準(zhǔn)備轉(zhuǎn)換高4位
MOVCL,4;設(shè)計(jì)數(shù)器
SHRAL,CL
;邏輯右移4位
ORAL,30H
;得到高4位ASCII碼
STOSB
;保存結(jié)果
DECBX ;(BX)←(BX)-1JNZBBB
;(BX)≠0,則繼續(xù)循環(huán)(四)串操作指令第三章8086/8088微處理器及其系統(tǒng)基本字符串指令字節(jié)串/字串傳送MOVSd,sMOVSB/MOVSW字節(jié)串/字串比較CMPSd,sCMPSB/CMPSW字節(jié)串/字串搜索SCASdSCASB/SCASW讀字節(jié)串/字串LODSsLODSB/LODSW寫字節(jié)串/字串STOSsSTOSB/STOSW重復(fù)前綴無條件重復(fù)REP當(dāng)相等/為0時(shí)重復(fù)REPE/REPZ當(dāng)不相等/不為0時(shí)重復(fù)REPNE/REPNZ串操作指令特點(diǎn)串長度≤64KByte使用隱含尋址方式:
源串:DS——段基址,SI——偏移地址 目標(biāo)串:ES——段基址,DI——偏移地址 串長度:CX可在基本操作前加重復(fù)前綴,重復(fù)次數(shù)由CX決定SI、DI和CX要事先預(yù)置SI、DI的增減由DF決定:DF=0,遞增;DF=1,遞減
關(guān)于DF的兩條指令:
STD 清零DF=1遞減方向
CLD 設(shè)置DF=0遞增方向第三章8086/8088微處理器及其系統(tǒng)
重復(fù)前綴包括:REPCX≠0時(shí)重復(fù)執(zhí)行REPE/REPZCX≠0∧ZF=1時(shí)重復(fù)執(zhí)行REPNE/REPNZCX≠0∧ZF=0時(shí)重復(fù)執(zhí)行串指令使用的一般方法設(shè)置源串地址設(shè)置目標(biāo)串地址設(shè)置串長度設(shè)置操作方向DF串指令MOVSI,源串首地址(或LEASI,源串)MOVDI,目的串首地址(或LEADI,目的串)MOVCX,串長度CLD(或STD)串指令1、串傳送指令MOVSB/MOVSW功能:
第三章8086/8088微處理器及其系統(tǒng)。。。。。。。。源串目標(biāo)串MOVSSI指針DI指針。。。。指令執(zhí)行的操作為:MOVSB:((ES):(DI))←((DS):(SI))SI±1,DI±1MOVSW:((ES):(DI+1)(DI))←((DS):(SI+1)(SI))SI±2,DI±2指令也可寫成:MOVSdest,src但要求:①src用DS:SI尋址,dest用ES:DI尋址②傳送是字節(jié)還是字,由操作數(shù)的類型決定例:MOVSB
第三章8086/8088微處理器及其系統(tǒng)程序CLD;
DF=0,SI、DI自動(dòng)遞增MOVCX,100 ;串的長度 MOVSI,2000H ;源串第一個(gè)元素的偏移地址,DS為基址MOVDI,1020H ;目標(biāo)串第一個(gè)元素的偏移地址,ES為基址REPMOVSB
;重復(fù)執(zhí)行,CX遞減,直到CX=0 CLD ;DF=0,SI、DI自動(dòng)遞增
MOVCX,100 ;串的長度
MOVSI,2000H ;源串第一個(gè)元素的偏移地址,DS為基址
MOVDI,1020H ;目標(biāo)串第一個(gè)元素的偏移地址,ES為基址
again:
MOVal,[si] mov[di],al
;傳送一個(gè)字節(jié)
DECCX
;傳送次數(shù)減1
JNZagain
;判斷傳送次數(shù)cx是否為0。不為0(ZF=0),則轉(zhuǎn) ;移到again位置繼續(xù)執(zhí)行;否則,結(jié)束舉例用串傳送指令實(shí)現(xiàn)200個(gè)字節(jié)的數(shù)據(jù)傳送:
LEASI,MEM1LEADI,MEM2MOVCX,200CLD
REPMOVSBHLT2、串比較指令CMPS功能: 按順序比較數(shù)據(jù)串,確定串中第一個(gè)不同的數(shù)據(jù)操作:
1、(源串的一個(gè)元素)-(目標(biāo)串對(duì)應(yīng)的一個(gè)元素)
2、根據(jù)結(jié)果置標(biāo)志位
3、SI、DI遞增(減)
4、與REPE/REPZ重復(fù)前綴配合使用第三章8086/8088微處理器及其系統(tǒng)例:比較兩個(gè)串,若相同,則BX=0;若不同,則BX指向第一個(gè)不相同的字節(jié)的地址,該字節(jié)的內(nèi)容存入AL中。
CLD MOVCX,100 MOVSI,2500H MOVDI,1400H REPECMPSB;串比較,直到ZF=0(元素相減結(jié)果不為0)或CX=0 JZEQQ
;相減結(jié)果為0,則轉(zhuǎn)到EQQ DECSI ;執(zhí)行過CMPSB,SI已遞增,所以要減1 MOVBX,SI ;BX指向第一個(gè)不相同的字節(jié)的地址
MOVAL,[SI] ;第一個(gè)不同的字節(jié)送入AL JMPSTOP
;轉(zhuǎn)到STOPD
EQQ:MOVBX,0 ;兩串完全相同,則BX=0
STOP:HLT第三章8086/8088微處理器及其系統(tǒng)初始化3、串搜索指令SCAS功能:搜索串中的關(guān)鍵字;串掃描指令SCAS將附加段中的字或字節(jié)內(nèi)容與AL/AX寄存器內(nèi)容進(jìn)行比較,根據(jù)比較結(jié)果設(shè)置標(biāo)志位;每次比較后修改DI寄存器的值,使之指向下一元素。操作:
1、將待查的關(guān)鍵字存入AX或AL中;
2、將AX/AL減去DI所指的元素;
3、根據(jù)結(jié)果置標(biāo)志位;
4、DI遞增(減);
5、加前綴REPNE/REPNZ可以重復(fù)操作,直到ZF=1(表示相同)或CX=0;第三章8086/8088微處理器及其系統(tǒng)例:在長度為N的字符串中查找“$”。若有,則將$的地址送入BX;若無,則將BX清0。設(shè)字符串的首元素偏移地址為DSTO。第三章8086/8088微處理器及其系統(tǒng)程序: CLD MOV
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中生社會(huì)實(shí)踐能力的多元化發(fā)展與評(píng)價(jià)考核試卷
- 保健食品營養(yǎng)需求分析與滿足策略實(shí)施效果考核試卷
- 合成氣制合成油考核試卷
- 國際貿(mào)易信用證條款解析與應(yīng)用考核試卷
- 網(wǎng)購家具合同范本
- 簡單的工傷合同范本
- 賣車簡單合同范本
- 農(nóng)業(yè)訂單合同范本
- 電視購物產(chǎn)品退換政策協(xié)議
- 瑜伽培訓(xùn)合同協(xié)議書
- 員工外宿免責(zé)協(xié)議書(2篇)
- 2025年中智科技集團(tuán)有限公司招聘筆試參考題庫含答案解析
- IT科技產(chǎn)業(yè)云計(jì)算服務(wù)平臺(tái)開發(fā)方案
- 2025年山東省郵政招聘筆試參考題庫含答案解析
- 血透室停電停水應(yīng)急預(yù)案
- 人教版小學(xué)數(shù)學(xué)三年級(jí)下冊(cè)第一單元《位置與方向(一)》單元測試
- 《零售藥店實(shí)務(wù)》期末考試復(fù)習(xí)題及答案
- 校園安全案例解析
- 電力變壓器聲紋檢測技術(shù)導(dǎo)則
- 《病理科(中心)建設(shè)與配置標(biāo)準(zhǔn)》
- 《校園廉潔教育》主題班會(huì)課件全文
評(píng)論
0/150
提交評(píng)論