資源描述:
《指令系統(tǒng)及匯編語言程序設(shè)計(jì)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、第2章指令系統(tǒng)及匯編語言程序設(shè)計(jì)2.38086/8088指令系統(tǒng)8086/8088的指令大致可分成以下六種:數(shù)據(jù)傳送、算術(shù)運(yùn)算、位操作、串操作、程序控制和處理器控制指令。2.3.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令是將數(shù)據(jù)、地址或立即數(shù)傳送到寄存器或存儲(chǔ)單元中。這類指令不影響狀態(tài)標(biāo)志位,只有FLAGS的指令(SAHF和POPF)例外。1.通用數(shù)據(jù)傳送指令(1)數(shù)據(jù)傳送指令指令格式:MOVDST,SRC功能:DST ←SRC操作說明:MOV指令將源操作數(shù)SRC的內(nèi)容傳送到目的操作數(shù)DST。指令執(zhí)行后目的操作數(shù)DST與源操作數(shù)SRC的內(nèi)容相等,即DST=SRC,源操作數(shù)本身不變。操作數(shù)的類型和傳送
2、方向如圖2.1所示。從上圖可以看出,在MOV指令中:1)源操作數(shù)可以為:存儲(chǔ)器、通用寄存器、段寄存器和立即數(shù)。2)目的操作數(shù)可以為:存儲(chǔ)器、通用寄存器和段寄存器(CS除外)。3)目的操作數(shù)和源操作數(shù)不能同時(shí)為存儲(chǔ)器、段寄存器;立即數(shù)不能送段寄存器,其余可以任意搭配。4)立即送存儲(chǔ)器時(shí)難以確定長(zhǎng)度,需要在存儲(chǔ)器操作數(shù)的前面加類型說明BYTEPTR或WORDPTR,例如:MOVBYTEPTR[SI+10H],30;8位立即數(shù)30送偏移地址為SI+10H的字節(jié)單元。MOVWORDPTR[BX+DI],2;16位立即數(shù)2送偏移地址為BX+DI的字單元。【例2.7】數(shù)據(jù)傳送指令舉例。①立即數(shù)送
3、寄存器MOVAL,10HMOVBX,2100H②寄存器之間傳送MOVDX,CXMOVAH,DLMOVDS,AXMOVDX,ES③通用寄存器與存儲(chǔ)器之間傳送MOVAX,[1000H]MOV[BP],DX④段寄存器與存儲(chǔ)器之間傳送MOV[BX][DI],ESMOVDS,10[BP+DI]【例2.8】指出下列數(shù)據(jù)傳送指令中的錯(cuò)誤。①M(fèi)OV10H,AX;立即數(shù)不能作為目的操作數(shù)②MOVDS,2000H;立即數(shù)不能送段寄存器③MOVCS,AX;CS不能作為目的操作數(shù)④MOVDS,ES;目的操作數(shù)和源操作數(shù)不能同時(shí)為段寄存器⑤MOV[DI],[SI];目的操作數(shù)和源操作數(shù)不能同時(shí)為存儲(chǔ)器⑥MOV
4、AL,BX;類型不匹配,AL為8位、BX為16位寄存器⑦M(jìn)OVDL,300;類型不匹配,DL為8位寄存器,300超過1B(2)堆棧操作指令堆棧是內(nèi)存中的一個(gè)特定的區(qū)域,其操作原則是“后進(jìn)先出(LastIn,F(xiàn)irstOut)”。由段寄存器SS確定堆棧段的起始地址,由堆棧初始化時(shí)寄存器SP的值設(shè)定堆棧底的地址。堆棧的形態(tài)如圖2.2所示。堆棧操作有入棧和出棧兩種。1)入棧指令指令格式:PUSHSRC功能:SP←SP-2,[SP+1][SP]←SRC操作說明:PUSH指令先將SP的內(nèi)容減2,然后再將操作數(shù)SRC的內(nèi)容送入由SP指出的棧頂即偏移地址為SP和SP+1的兩個(gè)連續(xù)字節(jié)中。指令中的操
5、作數(shù)SRC可以是存儲(chǔ)器、通用寄存器和段寄存器,但不能是立即數(shù)。【例2.9】PUSHAX;通用寄存器內(nèi)容入棧PUSHCS;段寄存器內(nèi)容入棧PUSH[SI];字存儲(chǔ)單元內(nèi)容入棧2)出棧指令指令格式:POPDST功能:DST←[SP+1][SP],SP←SP+2操作說明:POP指令先將堆棧指針SP所指示的棧頂存儲(chǔ)單元的值彈出到操作數(shù)DST中,然后再將SP的內(nèi)容加2。指令中的操作數(shù)DST可以是存儲(chǔ)器、通用寄存器或段寄存器(但不能是CS),同樣,不能是立即數(shù)?!纠?.10】POPAX;棧頂內(nèi)容彈出至通用寄存器POPES;棧頂內(nèi)容彈出段寄存器POPMEM[DI];棧頂內(nèi)容彈出至字存儲(chǔ)單元入棧和出
6、棧操作如圖2.3所示。使用堆棧時(shí)還應(yīng)注意:1)堆棧操作指令中的操作數(shù)必須是16位的字操作數(shù)。2)由SP指示現(xiàn)行堆棧頂?shù)奈恢谩6褩m斒歉?dòng)的。3)編程中PUSH、POP指令應(yīng)成對(duì)使用,以保持棧的平衡。(3)數(shù)據(jù)交換指令指令格式:XCHGOPR1,OPR2功能:OPR1←→OPR2操作說明:XCHG指令將兩個(gè)操作數(shù)內(nèi)容進(jìn)行交換。交換的內(nèi)容可以是一個(gè)字節(jié)(8位),也可以是一個(gè)字(16位),兩個(gè)操作數(shù)的長(zhǎng)度必須一致。參加交換的兩個(gè)操作數(shù)各自均可以是寄存器或存儲(chǔ)器,但不能二者同時(shí)為存儲(chǔ)器。即可以在寄存器與寄存器之間,或寄存器與存儲(chǔ)器之間進(jìn)行交換。段寄存器不能參加交換?!纠?.11】XCHGAL
7、,CL;8位寄存器間內(nèi)容交換XCHGAX,DX;16位寄存器間內(nèi)容交換XCHGBX,DATA[SI];寄存器與存儲(chǔ)單元間內(nèi)容交換(4)字節(jié)轉(zhuǎn)換指令指令格式:XLATSRC-table功能:AL←[BX+AL]操作說明:XLAT指令完成一字節(jié)的查表轉(zhuǎn)換。具體操作為:將BX和AL的內(nèi)容相加后作為偏移地址,取出該存儲(chǔ)單元的內(nèi)容送AL。使用這條指令之前應(yīng)預(yù)先把表頭地址存入BX寄存器,AL中存放表元素的序號(hào)。表中元素的序號(hào)依次是0,1,2,3,……,表的最大長(zhǎng)度為2