微機(jī)原理(第三版)第三章_第1頁
微機(jī)原理(第三版)第三章_第2頁
微機(jī)原理(第三版)第三章_第3頁
微機(jī)原理(第三版)第三章_第4頁
微機(jī)原理(第三版)第三章_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1第3章8086/8088指令系統(tǒng)3.1概述1.指令的一般格式 操作碼(OperationCode)操作數(shù)(Operand)源操作數(shù)(SourceOperand)目的操作數(shù)(DestinationOperand)何種操作存放運(yùn)算數(shù)據(jù)或結(jié)果的地址參加運(yùn)算的數(shù)據(jù)或數(shù)據(jù)的地址2立即數(shù)——直接在指令中出現(xiàn),只能做為源操作數(shù)尋址(Addressing):取得操作數(shù)的途徑

2.操作數(shù)的類型寄存器操作數(shù)——寄存器做為操作數(shù)存儲(chǔ)器操作數(shù)——指令含直接或間接的地址信息,可能默認(rèn)使用若干地址寄存器where?33.指令的分類(1)數(shù)據(jù)傳送類;(2)算術(shù)運(yùn)算類;(3)邏輯運(yùn)算和移位;(4)串操作;(5)控制轉(zhuǎn)移類;(6)處理器控制。每個(gè)指令類具有多種格式,如運(yùn)算有+-×÷…每個(gè)格式中的操作數(shù)具有多個(gè)尋址方式8086可以組合出千余種具體的指令4在8086指令系統(tǒng)中,說明操作數(shù)所在地址的尋址方式可分為8種:

①立即尋址⑤寄存器相對(duì)尋址②直接尋址⑥基址-變址尋址③寄存器尋址⑦相對(duì)的基址-變址尋址④寄存器間接尋址⑧隱含尋址3.28086的尋址方式

51.立即尋址ImmediateAddressingMOV AX,1234H操作碼低8位代碼段高8位立即數(shù)注意:1)立即數(shù)只可以作源操作數(shù).2)立即數(shù)的類型與目的操作數(shù)相同MOV BL,25562.直接尋址DirectAddressingMOV AX,[1000h]1)地址用方括號(hào)標(biāo)識(shí),以區(qū)別于立即數(shù);指令碼直接地址默認(rèn)段寄存器+EAPAMemory2)有效地址(EA,EffectiveAddress);3)默認(rèn)的段寄存器為DS,但也可以顯式地指定其他段寄存器——稱為段超越前綴;4)偏移地址也可用符號(hào)地址來表示,如BUFFER73.寄存器尋址RegisterMOV AX,1234HMOV BL,255MOV AH,AL寄存器操作數(shù),尋址速度快指令碼寄存器編碼Datum寄存器84.寄存器間接尋址RegisterIndirectADD AX,[BX]MOV DX,[SI]MOV [DI],AL指令碼寄存器編碼默認(rèn)段寄存器+EAPA地址信息寄存器Memory只有寄存器BX,BP,SI,DI可以作為間接尋址的寄存器;其中BP對(duì)應(yīng)的是SS,其它對(duì)應(yīng)DS95.寄存器相對(duì)尋址RegisterRelativeMOV [BX][1000H],DX指令碼寄存器編碼默認(rèn)段寄存器+EAPA地址信息寄存器偏移地址+MemoryMOV AX,[BP+8]堆棧段106.基址-變址尋址BasedIndexedADDcx,[bx][di]基址寄存器:BX,BP變址寄存器:DI,DI指令碼基址寄存器編碼默認(rèn)段寄存器+EAPA基址信息基址寄存器變址寄存器編碼+變址信息變址寄存器Memory117.基址-變址相對(duì)尋址

RelativeBasedIndexedMovax,[bx][si][2000h]指令碼基址寄存器編碼默認(rèn)段寄存器+EAPA基址信息基址寄存器變址寄存器編碼+變址信息Memory偏移地址碼變址寄存器12課堂練習(xí):1.判斷下列指令操作數(shù)屬于哪種尋址方式.MOVAX,DS:[BP][DI]MOV AL,‘A’MOVCX,TABLE[SI];TABLE為字符常數(shù)MOV[3F00H],AXMOVAX,[BX][BP]MOVES:AX,DXMOVAX,[DX]2.下列指令格式正確嗎?課堂練習(xí):已知8086中一些寄存器的內(nèi)容和一些存儲(chǔ)單元的內(nèi)容如圖,試指出下列指令執(zhí)行后,AX中的內(nèi)容?12H34H56H78H…2AH4CHB7H65H30100H30101H30102H30103H31200H31201H31202H31203H0100H0002H3000HBXSIDS1)MOVAX,[1200H]2)MOVAX,[BX][SI]3)MOVAX,1100H[BX]4)MOVAX,1100H[BX+SI]143.38086/8088指令系統(tǒng)學(xué)習(xí)和應(yīng)用指令需要關(guān)注的問題:指令的功能類別,具體格式,尋址方式限制執(zhí)行時(shí)間,指令的字節(jié)數(shù)(時(shí)空)指令執(zhí)行對(duì)F寄存器的影響是否影響堆棧是否需要特定的寄存器實(shí)現(xiàn)配合

153.3.1數(shù)據(jù)傳送指令

細(xì)分,如下四種:通用傳送(*)目標(biāo)地址傳送標(biāo)志傳送輸入輸出(*)立即數(shù)寄存器存儲(chǔ)器I/O16(1)MOVdest,src;dest←src可實(shí)現(xiàn):1.通用傳送指令寄存器之間傳送(除CS和IP)

例:MOV CL,DLMOVDS,AXMOV AX,BXMOVAX,ES寄存器(除CS、IP)與存儲(chǔ)器之間傳送

例:MOVAX,[SI]MOV[1000H],ALMOVDS,DATA[SI+BX]MOVDEST[BP+DI],ES17MOV指令使用規(guī)則:

1、源操作數(shù)與目的操作數(shù)類型要一致。2、不能在兩個(gè)存儲(chǔ)單元之間直接傳送。 MOV[1000H],[2000H] (某些單片機(jī)內(nèi)部RAM可以)3、立即數(shù)不能送段寄存器。MOVDS,300H3、段寄存器之間不能傳送。MOVDS,ES5、CS、IP不能做目的操作數(shù)。MOVCS,AX6、立即數(shù)不允許作為目的操作數(shù)

原則:邏輯上合理,有必要,使用頻率高,效率高

立即數(shù)送通用REG或存儲(chǔ)器例:MOVCL,4 MOVAX,03FFHMOVBYTEPTR[BX],5MOVWORDPTR[100H],5678H18幾個(gè)不能直接傳送的解決辦法:(用AX等寄存器作橋梁)

存儲(chǔ)器←存儲(chǔ)器:

MOVAX,[1000H] MOV[2000H],AX

段寄存器←段寄存器:

MOVAX,DS MOVES,AX

段寄存器←立即數(shù):

MOVAX,DATA MOVDS,AX19例:指出下列指令的錯(cuò)誤:

MOV [BX],[DI] MOV AH,CX MOV AX,[SI][DI] MOV CS,0 MOV DS,100; MOV [1000H],23H MOV IP,2000H; MOV AX,[0100H+BX+BP]20練習(xí):已知ES=3000H,DS=2000H,BX=5006H,SI=2008H,指令MOVAX,[BX][SI]中,源操作數(shù)的尋址方式是

,相應(yīng)的物理地址是

。21MOVSI,OFFSETMEM1MOVDI,OFFESTMEM2MOVCX,200NEXT:MOVAL,[SI]MOV[DI],ALINCSIINCDIDECCXJNZNEXTHLTMEM1,MEM2是符號(hào)地址(變量)先定義后使用。在這是字節(jié)傳送,定義為字節(jié)變量應(yīng)用舉例:把內(nèi)存中首地址為MEM1的200個(gè)字節(jié)送到首地址為MEM2的區(qū)域中。200MEM1MEM2…...…...22SS指示堆棧段的段基址,堆棧指針SP始終指向堆棧的頂部,SP的初值規(guī)定了所用堆棧區(qū)的大小。堆棧的最高地址叫棧底。2堆棧操作指令堆棧LIFO方式工作、被分配的連續(xù)存儲(chǔ)區(qū)域;8086的堆棧以字為單位進(jìn)行壓入/彈出操作。棧底低地址高地址SPSS堆棧段進(jìn)棧方向退棧方向棧頂23

①壓棧指令格式:PUSHsrc;源操作數(shù)可為REG、M,目的隱含SP例:PUSHAX,設(shè)(AX)=1020H(SS)=1050H,(SP)=0004H操作:

[(SP)-1]←高字節(jié)AH,

[(SP)-2]←低字節(jié)AL(SP)←(SP)-2進(jìn)棧方向執(zhí)行后10500H10501H10502H10503H10504H?;?020棧頂執(zhí)行前?;窏m敆5譇X102010500H10501H10502H10503H10504H24

彈出指令格式:POPdest

;目的操作數(shù)可為REG、M例:POPBX,設(shè)(SS)=1050H,(SP)=0002H操作:(BL)←[SP]

(BH)←[SP+1]

(SP)←(SP)+21020執(zhí)行前?;窏m敆5?020BX10500H10501H10502H10503H10504H執(zhí)行后10500H10501H10502H10503H10504H棧基址棧頂出棧方向258086堆棧指令使用時(shí)應(yīng)注意幾點(diǎn):①堆棧操作總是按字進(jìn)行②不能從棧頂彈出一個(gè)字給CS③堆棧指針為SS:SP,SP永遠(yuǎn)指向棧頂④入棧時(shí)SP先自動(dòng)-2,出棧后SP自動(dòng)增量+226課堂練習(xí):已知(SS)=0A2F0H,(SP)=00C0H,(AX)=8B31H,(CX)=0F213H,執(zhí)行指令

PUSHAXPUSHCXPOPAX(SP)=?(AX)=?27格式:XCHGdest,src;交換兩操作數(shù)的內(nèi)容通用REG通用REG要求:MM

兩操作數(shù)中必須有一個(gè)在寄存器中;操作數(shù)不能為段寄存器和立即數(shù);源和目地操作數(shù)類型要一致。舉例:XCHG AX,BXXCHG [2000],CL

XCHGAL,BL(3)交換指令XCHG28(4)查表指令XLAT

執(zhí)行的操作:AL←[(BX)+(AL)]又叫查表轉(zhuǎn)換指令,它可根據(jù)表項(xiàng)序號(hào)查出表中對(duì)應(yīng)代碼的內(nèi)容。執(zhí)行時(shí)先將表的首地址(偏移地址)送到BX中,表項(xiàng)序號(hào)存于AL中。

29303132...394142...4546...42000H+042000H+11‘0’‘1’‘2’‘9’‘A’‘B’‘E’‘F’十六進(jìn)制數(shù)ASCII碼表存儲(chǔ)器例如:內(nèi)存數(shù)據(jù)段有一張16進(jìn)制數(shù)的ASCII碼表,ASCII表在DS段,并假設(shè)(DS)=4000H。設(shè)表首地址偏移量是2000H,如欲查出表中第11個(gè)代碼(代碼序號(hào)從0開始)即十六進(jìn)制數(shù)B的ASCII碼。30則可用如下幾條指令實(shí)現(xiàn):MOVBX,2000H

;(BX)←表首地址MOVAL,0BH

;(AL)←序號(hào)XALT

;查表轉(zhuǎn)換執(zhí)行后得到:(AL)=42H=’B’注意:轉(zhuǎn)換表長(zhǎng)度最大為256個(gè)表項(xiàng)(字節(jié))。31(3)字節(jié)/字?jǐn)U展格式:CBW;combinebytetowordCWD;combinewordtodoublewordCBW隱含的源操作數(shù)AL;結(jié)果存AXCWD隱含的源操作數(shù)AX;結(jié)果存DX322.輸入輸出(I/O)指令功能:CPU訪問I/O端口只用累加器AL或AX來傳送信息。外設(shè)外設(shè)I/OI/OCPU(1)輸入指令格式:INacc,PORT;PORT端口號(hào)0~255

例:1)INAL,80H;(AL)←(80H端口)

2)

INAX,80H;(AH)←(81H端口);(AL)←(80H端口)3)MOVDX,03B0HINAL,DX;(AL)←((DX))INacc,DX;DX表示的端口范圍達(dá)64K33例:OUT68H,AX;(69H,68H)←(AX)(2)輸出指令OUT

格式:OUTport,acc或OUTDX,accMOVDX,220HOUTDX,AL;((DX))←(AL)34例:已知(AX)=8060H,(DX)=03F8H,端口PORT1的地址是48H,內(nèi)容是40H,請(qǐng)指出下列指令執(zhí)行的結(jié)果.1)OUTDX,AL2)INAL,PORT1353.3.2算術(shù)運(yùn)算指令指令本身并不區(qū)分無符號(hào)數(shù)和帶符號(hào)數(shù):無符號(hào)數(shù)可用CF標(biāo)志判斷是否溢出;帶符號(hào)數(shù)可用OF標(biāo)志判斷是否溢出;帶符號(hào)數(shù)的溢出是一種出錯(cuò)狀態(tài),在運(yùn)算過程中應(yīng)當(dāng)避免。無符號(hào)數(shù)的溢出可看作是向更高位的進(jìn)位。361)不帶進(jìn)位的加法指令

ADDdest,src

;destdest+src1.加法指令src:n,通用REG,M三種尋址方式

dest:通用REG,M兩種尋址方式實(shí)例:ADDCL,10;

ADDSI,[BX+20H];

ADD[DI],200H;37例:MOVAL,7EHADDAL,5BH對(duì)標(biāo)志位的影響:CF=0,AF=1OF=1,PF=0SF=1ZF=038實(shí)例:

ADCAX,BX;

ADC[BX+200H],CL;2)帶進(jìn)位的加法指令

ADCdest,src

;destdest+src+CF3)加1指令

INCdest

;dest+1dest(不影響

CF,常用循環(huán)指令中修改指針或循環(huán)次數(shù))39例:已知數(shù)據(jù)如圖,低位在前,高位在后.1)將其看作兩個(gè)4字節(jié)(雙倍精度字)的無符號(hào)數(shù)相加:

28164148H+84522258=?結(jié)果存放在SUM開始的存儲(chǔ)區(qū)。ADC指令用于多字節(jié)加法運(yùn)算中

程序段如下:MOVAX,NUM1MOVBX,NUM2ADDAX,BX;低字相加MOVSUM,AXMOVAX,NUM1+2MOVBX,NUM2+2ADCAX,BX;高字相加

;包括低字的進(jìn)位MOVSUM+2,AX數(shù)據(jù)段16H28H58H22H48H41H52H84H被加數(shù)加數(shù)NUM1NUM2SUM40MOVCX,4LEASI,NUM1LEADI,NUM2LEABX,SUM字節(jié)運(yùn)算:AGAIN:MOVAL,[SI]ADCAL,[DI]MOV[BX],ALCLCINCSIINCDIINCBXLOOPAGAIN41思考題:

2)將其看作從NUM1單元開始的連續(xù)8個(gè)字節(jié)

數(shù)據(jù)相加,和為16位數(shù),放在SUM和SUM+1單元中.42(1)不考慮借位的減法指令SUB

SUBdest,src

;dest←(dest)-(src)2.減法指令(2)考慮借位的減法指令SBB(主要用于多字節(jié)的減法)

SBBdest,src

;dest←(dest)-(src)-(CF)(3)減1指令DEC

DECdest

;dest←(dest)-1,不影響CF例:

SUBAL,60H;SUB[BX+20H],DXSBBAX,CX;SBBWORDPTR[SI],2080HDECCL;DECBYTEPTR[DI+2]43(4)求補(bǔ)指令NEG:

NEGopr

;opr←0-(opr)對(duì)一個(gè)操作數(shù)取補(bǔ)碼相當(dāng)于用0減去此操作數(shù),故利用NEG指令可得到負(fù)數(shù)的絕對(duì)值。(5)比較指令CMP

CMPdest,src

;(dest)-(src)CMP也是執(zhí)行兩個(gè)操作數(shù)相減,但結(jié)果不送目標(biāo)操作數(shù),其結(jié)果只反映在標(biāo)志位上。例:CMPAL,0AH;

CMPDI,[BX+03]44根據(jù)標(biāo)志位來判斷比較的結(jié)果②比較的是兩個(gè)有符號(hào)數(shù),須考慮兩個(gè)數(shù)是同號(hào)或異號(hào)。1)根據(jù)ZF判斷兩個(gè)數(shù)是否相等。若ZF=1,則兩數(shù)相等。2)若兩個(gè)數(shù)不相等,則分兩種情況考慮:①比較的是兩個(gè)無符號(hào)數(shù)

若CF=0,則dest>src;

若CF=1,則dest<src。若OF⊕SF=0,則dest>src;若OF⊕SF=1,則dest<src。但這樣來使用標(biāo)志位太繁瑣,所以8086指令系統(tǒng)中的條件轉(zhuǎn)移指令自動(dòng)確定應(yīng)該用哪些標(biāo)志判斷。45例:在內(nèi)存中從DATA單元開始兩個(gè)8位數(shù),試比較大小,將大者送到MAX單元。MOVAL,DATACMPAL,DATA+1若是帶符號(hào)數(shù)JG大于轉(zhuǎn)移JNCDONE;判斷CF分支,或用JA指令

MOVAL,DATA+1DONE:MOVMAX,AL46進(jìn)行乘法時(shí):8位*8位→16位乘積,16位*16位→32位乘積隱含的操作數(shù)為AX,DX3.乘法指令(1)無符號(hào)數(shù)的乘法指令

MULsrc;字節(jié)操作數(shù)(AX)(AL)×(src)

;字操作數(shù)(DX,AX)(AX)×(src)(2)有符號(hào)數(shù)乘法指令

IMULsrc;要求兩操作數(shù)均為有符號(hào)數(shù)例: MUL BL;(AL)×(BL),乘積在AX中

MUL CX;(AX)×(CX),乘積在DX,AX中

IMULBL;(AX)←(AL)×(BL) MUL BYTEPTR[BX]474.除法指令進(jìn)行除法時(shí):16位/8位→8位商 32位/16位→16位商隱含的操作數(shù)為AX,DX(1) 無符號(hào)數(shù)除法指令

DIVsrc;字節(jié)操作(AX)/(SRC),;(AL)商,(AH)余數(shù);字操作(DX,AX)/(SRC),;(AX)商,(DX)

余數(shù)

(2)有符號(hào)數(shù)除法指令

IDIVsrc例:DIV WORDPTR[BX]DIVCL485.BCD碼運(yùn)算的十進(jìn)制調(diào)整指令壓縮BCD碼指令:DAA(加法調(diào)整)、DAS(減法調(diào)整)非壓縮BCD碼指令:AAA(加法調(diào)整)、AAS(減法調(diào)整)

AAM(乘法調(diào)整)、AAD(除法調(diào)整)1、這類指令都是無操作數(shù)指令,隱含的源操作數(shù)是AL/AX,目的是AL/AX。2、先執(zhí)行二進(jìn)制運(yùn)算指令如ADD、SUB、MUL等(除法除外),并將結(jié)果放AL(AX),然后緊接著執(zhí)行BCD碼指令。49指令操作(調(diào)整方法):若AL的低4位>9∨AF=1則(AL)←(AL)+6,AF←1若AL的高4位>9∨CF=1則(AL)←(AL)+60H,CF←10110100068+010110015911000001+01100110+66

100100111壓縮BCD碼加法調(diào)整DAA例:壓縮BCD碼68H+59H=?MOVAL,68HMOVBL,59HADDAL,BLDAA最后結(jié)果為:

(AL)=27H,CF=1,AF=150例:已知數(shù)據(jù)如圖,從NUM1和NUM2開始的壓縮BCD碼相加,和放在SUM和SUM+1單元中.MOVCX,4LEASI,NUM1LEADI,NUM2LEABX,SUMCLCAGAIN:MOVAL,[SI]ADCAL,[DI]

DAAMOV[BX],ALINCSIINCDIINCBXLOOPAGAIN數(shù)據(jù)段16H28H58H22H48H41H52H84H被加數(shù)加數(shù)NUM1NUM2SUM513.3.3邏輯運(yùn)算和位移指令邏輯運(yùn)算指令●運(yùn)算規(guī)則:按位操作,無進(jìn)/借位●對(duì)標(biāo)志位的影響(除NOT指令外):

CFOFSFZFPFAF00***無定義

根據(jù)運(yùn)算結(jié)果設(shè)置ANDDEST,SRC

;“與”兩位都是1,結(jié)果為1,否則為0,用于屏蔽。52例1:保留AL中低4位,高4位清0。例3:測(cè)試AL的bit7,bit5,bit2是否都是1。

ANDAL,0FH例2:AL中有字符’a’~’z’,將其轉(zhuǎn)換成大寫。ANDAL,01011111BAND AL,10100100B CMP AL,10100100B JZ MATCHNOTMATCH:

… JMP CONTINUEMATCH:

…CONTINUE: 53ORDEST,SRC ;

“或”兩位都是0,結(jié)果為0, ;否則為1。用于置位。例1:把AL中的非壓縮BCD碼變成相應(yīng)十進(jìn)制數(shù)的ASCII碼。例1:把AX寄存器清零ORAL,30H例2:把AL的第5位置為1ORAL,00100000BXORDEST,SRC;

“異或”,兩位相同為0,兩位不

;同為1。指定位取反或自身清0例2:把DH的bit4,3變反XORDH,18H①M(fèi)OVAX,0②XORAX,AX③ANDAX,0④SUBAX,AX54NOTDEST ;按位取反。

測(cè)試指令TEST;操作與AND指令類似,但不將”與”的結(jié)果送回,只影響標(biāo)志位。常用于位測(cè)試,與條件轉(zhuǎn)移指令一起用。例:測(cè)試AL的內(nèi)容是否為負(fù)數(shù)。

TESTAL,80H;檢查AL中D7=1?

JNZMINUS;是1(負(fù)數(shù)),轉(zhuǎn)MINUS

;否則為正數(shù)MINUS:552.移位指令(1)非循環(huán)移位指令算術(shù)左移指令SAL(ShiftArithmeticLeft)算術(shù)右移指令SAR(ShiftArithmeticRight)邏輯左移指令SHL(ShiftLeft)邏輯右移指令SHR(ShiftRight)這4條指令的格式相同

SALmem/reg,CL

;移位位數(shù)大于1時(shí)1

;移位位數(shù)等于1時(shí)56移位指令執(zhí)行的操作如下圖所示:最低位最高位最低位最高位CF(c)邏輯右移SHR0CF(b)算術(shù)右移SAR最低位最高位CF0(a)算術(shù)/邏輯左移SAL/SHL57移位1位時(shí),位數(shù)1直接寫在指令寄存器中;移位位數(shù)多于1時(shí),事先用指令將其放在CL寄存器中。例如: MOVCL,4 SHRAL,CL;AL中的內(nèi)容右移4位影響C,P,S,Z,O標(biāo)志。58例:把AL中的數(shù)x乘10因?yàn)?0=8+2=23+21,所以可用移位實(shí)現(xiàn)乘10操作。程序如下: MOVCL,3 SALAL,1;2x MOVAH,AL SALAL,1;4xSALAL,1;8xADDAL,AH;8x+2x=10x59循環(huán)左移指令ROL

循環(huán)右移指令ROR帶進(jìn)位位的循環(huán)左移指令RCL

帶進(jìn)位位的循環(huán)右移指令RCR(2)循環(huán)移位指令60循環(huán)移位指令功能示意圖最低位(c)RCL最低位(d)RCR最低位最高位CF(a)ROL最高位CF最低位最高位CF(b)ROR最高位CF61循環(huán)移位舉例:例1:將AL的高4位與低4位互換。MOVCL,4ROLAL,CL例2:一雙字,四字節(jié):高字節(jié)放DX中,低字節(jié)放AX中,若左移一位SALAX,1RCLDX,1例3:可實(shí)現(xiàn)對(duì)數(shù)據(jù)的檢測(cè):如檢測(cè)CF中0或1的個(gè)數(shù).623.3.5程序控制指令控制轉(zhuǎn)移指令分為轉(zhuǎn)移指令調(diào)用和返回指令循環(huán)控制指令中斷指令63轉(zhuǎn)移指令的實(shí)質(zhì):改變PC,在8086系列,即(CS:IP)的內(nèi)容。轉(zhuǎn)移指令分為無條件轉(zhuǎn)移和條件轉(zhuǎn)移。無條件轉(zhuǎn)移的尋址方式較多,轉(zhuǎn)移范圍大;條件轉(zhuǎn)移的測(cè)試條件豐富,轉(zhuǎn)移范圍小。1.轉(zhuǎn)移指令64例:程序片段CODE1 SEGMENT ---

JMPAGAIN

---

JMP fargoonAGAIN: --- ---CODE1 ENDSCODE2 SEGMENT ---goon: --- ---CODE2 ENDS程序片段中,JMPAGAIN,為段內(nèi)轉(zhuǎn)移,其標(biāo)號(hào)在同一段內(nèi);JMPfargoon為段間轉(zhuǎn)移,其的標(biāo)號(hào)在另一個(gè)程序段中。標(biāo)號(hào)代表地址,也稱為符號(hào)地址,可由軟件工具將其轉(zhuǎn)化為邏輯地址。(1)無條件轉(zhuǎn)移指令-JMPSEGMENT,ENDS是匯編語言程序中的偽指令(Directives)65

直接轉(zhuǎn)移:直接給出目標(biāo)地址/相對(duì)的位移量間接轉(zhuǎn)移:間接給出目標(biāo)地址的尋址方式段內(nèi)轉(zhuǎn)移:目標(biāo)地址在同一段內(nèi),只改變IP段間轉(zhuǎn)移:目標(biāo)地址不在同一段內(nèi),改變CS:IP根據(jù)JMP的遠(yuǎn)近根據(jù)目標(biāo)地址的尋址方式66段內(nèi)直接短轉(zhuǎn)移JMPSHORTLABLELABLE代表目標(biāo)地址2字節(jié)指令編碼:機(jī)器碼EB8位偏移量eEBe...源地址目標(biāo)地址e=目標(biāo)地址-源地址源地址=指令存儲(chǔ)地址+2執(zhí)行時(shí)e帶符號(hào)擴(kuò)展再加到IP中,于是下一指令周期從目標(biāo)地址處執(zhí)行。轉(zhuǎn)移范圍?67段內(nèi)直接轉(zhuǎn)移JMPNEARLABLELABLE代表目標(biāo)地址3字節(jié)指令編碼:機(jī)器碼E916位偏移量eE9e_H...源地址目標(biāo)地址e_Le=目標(biāo)地址-源地址源地址=指令存儲(chǔ)地址+3執(zhí)行時(shí)e加到IP中,于是下一指令周期從目標(biāo)地址處執(zhí)行。轉(zhuǎn)移范圍?68段間直接轉(zhuǎn)移JMPFARLABLELABLE是另一段中的符號(hào)地址5字節(jié)編碼機(jī)器碼EA16位段地址16位偏移量EAoffset_H01seg_LFFseg_HFF...offset_L00FFFF0100CSIP目標(biāo)地址執(zhí)行CS:IP被更新為目標(biāo)地址,于是下一指令周期從目標(biāo)地址處執(zhí)行。轉(zhuǎn)移范圍?例如LABLE=FFFF:000069段內(nèi)間接轉(zhuǎn)移JMPOPERANDOPERAND寄存器操作數(shù)或存儲(chǔ)器操作數(shù),16位目標(biāo)地址與尋址方式有關(guān)例:JMP BX IP(BX)實(shí)現(xiàn)轉(zhuǎn)移例:JMP WORDPTR[BX+DI]通過尋址,在存儲(chǔ)器中獲得一個(gè)字,用于更新IP,實(shí)現(xiàn)轉(zhuǎn)移70段內(nèi)間接轉(zhuǎn)移JMPOPERANDOPERAND為存儲(chǔ)器操作數(shù),32位按尋址方式在存儲(chǔ)器中獲得一個(gè)雙字,低16位用于更新IP,高16位用于更新CS,從而實(shí)現(xiàn)轉(zhuǎn)移例:JMP DWORD

PTR[BX]設(shè)(DS)=3000H,(BX)=3000H,(33000H)~(33003)依次為0BH,20H,10H,80H試分析轉(zhuǎn)移過程和目標(biāo)地址解:PA=(DS)*16+(BX)=33000HIP200BH,CS8010H執(zhí)行后,新的目標(biāo)地址8010:200BH71(2)條件轉(zhuǎn)移指令JxxlabelXX為測(cè)試條件,根據(jù)某標(biāo)志位或幾個(gè)標(biāo)志位的組合,決定是否進(jìn)行轉(zhuǎn)移;形成程序分支(Branch);一律為短轉(zhuǎn)移,轉(zhuǎn)移范圍為-128~+127結(jié)合無條件轉(zhuǎn)移,可以轉(zhuǎn)移得更遠(yuǎn)72單個(gè)標(biāo)志做判斷條件JCJNCJE/JZJNE/JNZJSJNSJOJNOJPJNPZFSFOFPFJCXZ(CX=0轉(zhuǎn))CF無符號(hào)數(shù)條件轉(zhuǎn)移(測(cè)試標(biāo)志CF、ZF)JBJNBJAJNA

判斷有符號(hào)數(shù)的大小(測(cè)試SF、OF、ZF)JLJNLJGJNG732.循環(huán)控制指令指令格式1:

LOOP

label循環(huán)次數(shù)先置于CX中;Label標(biāo)識(shí)一個(gè)循環(huán)的開始地址LOOP指令確定循環(huán)繼續(xù)或結(jié)束操作:CX←(CX)-1;若(CX)≠0,則轉(zhuǎn)至label處執(zhí)行;否則循環(huán)結(jié)束,執(zhí)行LOOP后面的指令;相當(dāng)于DECCX和JNZlabel兩條指令label距離本指令-128~+127的范圍之內(nèi)。74指令格式2:LOOPZlabel操作:(CX)-1→CX,(CX)≠0繼續(xù)循環(huán);但ZF≠1可提前結(jié)束循環(huán)。指令格式3:LOOPNZlabel操作:(CX)-1→CX,(CX)≠0繼續(xù)循環(huán),但ZF=1可提前結(jié)束循環(huán)。循環(huán)中的比較指令等,影響ZF標(biāo)志;例如,在數(shù)據(jù)塊中尋找某個(gè)關(guān)鍵字,找到后可以提前結(jié)束循環(huán)。75例:在以DATA為首地址的內(nèi)存數(shù)據(jù)段中,存放有200個(gè)16位帶符號(hào)數(shù),試找出其中最大和最小的符號(hào)數(shù),并分別放在MAX和MIN為首的內(nèi)存單元中。LEASI,DATAMOVCX,200MOVAX,[SI]INCSIINCSIMOVMAX,AXMOVMIN,AXDECCXNEXT:M

溫馨提示

  • 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)論