三章微處理器及其系統(tǒng)_第1頁
三章微處理器及其系統(tǒng)_第2頁
三章微處理器及其系統(tǒng)_第3頁
三章微處理器及其系統(tǒng)_第4頁
三章微處理器及其系統(tǒng)_第5頁
已閱讀5頁,還剩115頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論