




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1第3章8086的指令系統(tǒng)2幾個概念8086的尋址方式8086指令集主要內(nèi)容3CPU內(nèi)部14個16位寄存器8086CPU內(nèi)部寄存器問4一、幾個概念指令:是指使計算機執(zhí)行某種操作的命令。指令系統(tǒng):是指處理器所能成的所有指令的集合------指令集,每種計算機都有組它的指令系統(tǒng)。機器指令:用二進(jìn)制編碼(代碼各種組合)形式表示一條指令稱為機器指令。通常指令以二進(jìn)制編碼的形式存放在存儲器中,CPU可以直接識別機器指令。符號指令:用符號表示的指令稱為符號指令。5指令的組成:任意一條指令都由操作碼和操作數(shù)構(gòu)成。操作碼規(guī)定了計算機執(zhí)行什么樣操作。操作數(shù)它指明了操作的對象和操作對象的地址。6一條指令要解決的兩個問題:要指出進(jìn)行什么操作——操作碼;要指出操作數(shù)和操作結(jié)果放在何處——尋址方式。因此:7組成操作數(shù)操作碼CPU指令[標(biāo)號:]指令助記符
[操作數(shù)[,操作數(shù)]][;注釋]尋找操作數(shù)或操作數(shù)地址的方式指明了操作的對象和操作對象的地址規(guī)定了計算機執(zhí)行什么樣操作任意一條指令都由操作碼和操作數(shù)構(gòu)成格式尋址方式?8如數(shù)據(jù)傳輸指令,格式
:MOV目的操作數(shù),源操作數(shù)(助記符)操作碼部分操作數(shù)可見,指令中的操作數(shù)有源操作數(shù)和目的操作數(shù)之分如:MOVAX1234H9二、
8086的尋址方式
主要內(nèi)容:8086的尋址方式說明尋址方式介紹立即數(shù)尋址;寄存器尋址;直接尋址;寄存器間接尋址;基址/變址尋址;基址+變址尋址;I/O端口尋址108086的尋址方式說明尋址方式:是尋找操作數(shù)或操作數(shù)地址的方式。存放位置:8086指令中的操作數(shù)有三種可能的存放位置。①操作數(shù)在指令中,即指令的操作數(shù)部分就是操作數(shù)本身,這種操作數(shù)叫立即操作數(shù)。
如:MOVAX,1234H
11②操作數(shù)包含在CPU的某個內(nèi)部寄存器中,這種操作數(shù)叫寄存器操作數(shù),這時指令的操作數(shù)部分是CPU內(nèi)部寄存器的一個編碼。
如:MOVAX,BX
12③操作數(shù)在內(nèi)存的數(shù)據(jù)區(qū)中,這種操作數(shù)叫存儲器操作數(shù),這時指令的操作數(shù)部分包含此操作數(shù)所在的內(nèi)存地址。
如:MOVAX,[1234H]
此外,操作數(shù)在端口中。
如:INAL,20
13
邏輯地址:8086CPU中,內(nèi)存中任何存儲單元的實際地址都由兩部分組成:段基址和段內(nèi)偏移地址,用段基址:段內(nèi)偏移地址來表示。有效地址EA
:在存儲器尋址時,指令的操作數(shù)部分給出的地址是段內(nèi)偏移地址。段內(nèi)偏移量由幾個基本部分組合而成,所以也稱為有效地址EA。
★★14
組成有效地址EA的基本部分包括:基址寄存器內(nèi)容、變址寄存器內(nèi)容、位移量等。其中,基址、變址寄存器中通常為某局部存儲區(qū)的起點。有效地址EA的計算公式如下:
EA=[基址寄存器BX、BP]+[變址寄存器SI、DI]
+位移量
有效偏移地址15立即尋址操作數(shù)就在指令中提供——立即數(shù)尋址方式。即操作數(shù)直接包含在指令中,它緊跟在操作碼的后面,與操作碼一起放在代碼段區(qū)域中。尋址方式介紹
立即數(shù)總是和操作碼一起被取入CPU的指令隊列,在指令執(zhí)行時,不再需要訪問存儲器。16立即尋址MOVAX,34EAH
;將34EAH送AX,AH中為
34H,AL中為EAHMOV BL,20
;將十進(jìn)制數(shù)20送入BL寄存器AX17
立即數(shù)可以是8位、16位操作數(shù)。若是16位,低位字節(jié)存放在相鄰兩個字節(jié)存儲單元的低地址單元中。立即數(shù)可以用二進(jìn)制數(shù)、八進(jìn)制數(shù)、十進(jìn)制數(shù)以及十六進(jìn)制數(shù)來表示。如:
MOVAL,10;十進(jìn)制數(shù)(D) MOVAL,00100101B;二進(jìn)制數(shù)(B) MOVAL,0AH ;十六進(jìn)制(H)
18寄存器尋址操作數(shù)在CPU內(nèi)部寄存器中——寄存器尋址方式。如:
MOVBP,SP;其過程如圖所示:
寄存器尋址圖示SPBP19寄存器可以是AX、BX、CX、DX、SI、DI、SP、BP(通用寄存器)。
寄存器可用來存放源操作數(shù),也可用來存放目的操作數(shù)。寄存器尋址方式是CPU內(nèi)部的操作,不需要使用訪問總線周期,因此指令的執(zhí)行速度比較快。MOVAX,1234H;AX的內(nèi)容為1234HMOVAL,AH;AH的內(nèi)容12H送AL如20直接尋址
操作數(shù)在內(nèi)存單元中,指令中[]給出被訪問單元的邏輯偏移地址,即有效地址(EA),再轉(zhuǎn)換為物理地址,選中內(nèi)存單元,讀出操作數(shù)——直接尋址如: MOV AX,[3E4CH]
EA21MOV AX,[3E4CH];段基址(DS)×10H+3E4CH(偏移地址EA)源操作數(shù)物理地址:段基址(DS)×10H+1234H段基址(ES)×10H+1234HMOV [1234H],BL;MOV ES:[1234H],BL目的操作數(shù)物理地址:;目的操作數(shù)物理地址:在對內(nèi)存進(jìn)行尋址時,需計算物理地址。物理地址=段基址×10H+偏移地址有效地址(EA)
22
在默認(rèn)方式下,操作數(shù)存放在數(shù)據(jù)段(DS)。如果要對除DS段之外的其他段(CS、ES、SS)中的數(shù)據(jù)尋址,應(yīng)在指令中增加前綴,指出段寄存器名,這就是段跨越。23MOV AX,[1070H],假設(shè)(DS)=3000H,問存放源操作數(shù)的物理地址及其AX的內(nèi)容。
物理地址=段基址(DS)×10H+(EA)
=30000H+1070H=31070H
指令的執(zhí)行情況如圖指令的執(zhí)行結(jié)果是:(AX)=2520H,即內(nèi)存31070H單元的內(nèi)容傳送到寄存器AX中.練習(xí):24寄存器間接尋址
操作數(shù)在內(nèi)存單元中,操作數(shù)的有效偏移地址(EA)不是直接給出的,EA在指定的寄存器中,即EA[寄存器]。如:MOV SI,61A8H
;被訪問內(nèi)存單元邏輯偏移地址61A8H,送SIMOV DX,[SI];SI寄存器給出被訪問內(nèi)存單元邏輯偏移地址圖解252000H61A8H物理地址=(DS)×10H
+(SI)若(DS)
=2000H×10H
DHDLDSSI261A8H34H12H12H34H261A9H26BX、SI、DI以DS作為默認(rèn)段寄存器,BP、SP以SS作為默認(rèn)段寄存器BP、BX為基址寄存器SI、DI為變址尋址寄存器EA可放在寄存器BX、SI、DI、BP、SP中。默認(rèn)下,可用段寄存器DS,SS。27邏輯地址的隱式用法:
DS:BX;SI;DISS:BP;SP。操作數(shù)的物理地址計算公式有以下幾個:物理地址=(DS)×10H+(BX)
物理地址=(DS)×10H
+(DI)
物理地址=(DS)×10H
+(SI)
物理地址=(SS)×10H
+(BP)
物理地址=(SS)×10H
+(SP)若指令中指定了跨越前綴(段跨越),則可以從指定的段中獲得操作數(shù)。28基址/變址尋址(相對尋址)
操作數(shù)在內(nèi)存單元中,在寄存器間接尋址給出的偏移量(EA)基礎(chǔ)上,加一個相對位移量,位移量是帶符號的16位十六進(jìn)制數(shù)。當(dāng)使用BX或BP時--基址尋址當(dāng)使用SI或DI時--變址尋址29
如:MOV CX,36H[BX]EA=36H+(BX)段基址(DS)×10H+36H+(BX)源操作數(shù)的物理地址:再如:MOV -20[BP]
,ALEA=-14H+(BP)目的操作數(shù)物理地址:段基址(SS)×10H-14H+(BP)30基址+變址尋址
操作數(shù)在內(nèi)存單元中,EA由三部分組成:基址寄存器BX或BP的內(nèi)容+變址寄存器的內(nèi)容+位移量。如:MOV AX,8AH[BX][SI];EA=8AH+(BX)+(SI)物理地址為(DS)X10H+8AH+(BX)+(SI)。31
在基址加變址尋址方式中,基址寄存器、變址寄存器的使用規(guī)定以及段寄存器的默認(rèn)規(guī)定與基址/變址尋址方式相同。
在尋址方式中,當(dāng)基址寄存器和變址寄存器的默認(rèn)段寄存器不同時,一般由基址寄存器來決定默認(rèn)用哪一個段寄存器作為段基址。若在指令中規(guī)定了段跨越,則可以用其他寄存器作為段基址。32
物理地址=(DS)×10H+(BX)+(SI)+位移量或物理地址=(SS)×
10H+(BP)+(DI)+位移量
如:MOVAX,20HES:[BX][DI]則物理地址=(ES)×10H+(BX)+(DI)+20H邏輯地址的隱式用法:段跨越寫法:33I/O端口尋址8086采用獨立編址,因此,尋址通過I/O指令,見I/O指令。34三、
8086的指令集8086指令系統(tǒng)按功能分6類:數(shù)據(jù)傳送類算術(shù)運算類位操作類(邏輯運算與移位指令)串操作類程序控制類處理機控制類常用的符號累加器ax,al寄存器r:ax,bx,cx,dx,si,di,sp,bp,….段寄存器seg:ds,es,ss,cs內(nèi)存mem:[nn],[bx],[si],[di],[bp][bx/bp+count],[si/di+count][bx+si/di+count],[bp+si/di+count]立即數(shù)im368086指令集-數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令累加器專用(I/O)傳送指令目標(biāo)地址傳送指令標(biāo)志寄存器傳送指令數(shù)據(jù)傳送指令37數(shù)據(jù)傳送類指令
目標(biāo)指令的共同特點是:1、除POP和SAHF指令外,這類指令的操作結(jié)果不會影響FR寄存器中的標(biāo)志。2、指令中有兩個操作數(shù),目的操作數(shù)和源操作數(shù),其執(zhí)行過程為:目的操作數(shù)源操作數(shù),當(dāng)指令中僅列出一個操作數(shù)時,另一操作數(shù)為隱含。39傳送指令(MOV)
指令格式:MOV目的操作數(shù),源操作數(shù)8086指令集
-數(shù)據(jù)傳送指令-通用傳送指令40
MOV的數(shù)據(jù)傳送方向示意圖不包括IP41使用中需要注意的是:①MOV指令不能在兩個存貯器單元之間進(jìn)行數(shù)據(jù)直接傳送。②MOV指令不能在兩個段寄存器之間進(jìn)行數(shù)據(jù)直接傳送。③立即數(shù)不能直接傳送給段寄存器。④目的操作數(shù)不能為立即數(shù)、CS。⑤源操作數(shù)和目的操作數(shù)數(shù)據(jù)類型相同。42(2)堆棧操作指令進(jìn)棧指令PUSH
出棧指令POP指令格式:
PUSH源操作數(shù)
POP目的操作數(shù)源操作數(shù)可以是通用寄存器、段寄存器和存儲器。目的操作數(shù)可以是通用寄存器、段寄存器(CS除外)或存儲器。43
操作過程:
PUSH進(jìn)棧指令使SP-2→SP,然后將16位的源操作數(shù)壓入堆棧,先高位后低位。
POP出棧指令的執(zhí)行過程與PUSH相反。它從當(dāng)前棧頂彈出16位操作數(shù)到目的操作數(shù),同時SP+2→SP,使SP指向新的棧頂。44說明:①堆棧操作總是以字為單位進(jìn)行。②PUSH和POP指令不影響標(biāo)志位。③允許PUSHCS,但不允許POPCS。④堆棧的“后進(jìn)先出”。指令格式為:XCHG目的操作數(shù),源操作數(shù)XCHGR,OPRDOPRD:R,MEM
操作數(shù)不能為立即數(shù);
源和目的不能同時為存儲單元;
段寄存器不能作為操作數(shù)。(3)XCHG交換指令
468086指令集
-數(shù)據(jù)傳送指令-累加器專用傳送指令(1)輸入輸出指令輸入指令格式:
INAL,nINAX,nINAL,DXINAX,DX輸出指令格式:
OUTn,ALOUTn,AXOUTDX,
ALOUTDX,
AXn表示8位端口地址(00H~FFH)47
在計算機中,輸入/輸出操作是由CPU利用輸入、輸出指令并通過累加器AL或AX進(jìn)行的。輸入指令完成由輸入端口到CPU的信息傳送,輸出指令完成從CPU到輸出端口的信息傳送。指令功能:在AL或AX寄存器與I/O端口之間傳送數(shù)據(jù)。
說明:48由指令直接提供端口號,如:IN AL,50H ;將50H端口的字節(jié)讀入ALIN AX,70H ;分別將70H/71H端口的內(nèi)容讀入AL、AHOUT44H,AL ;將AL中的內(nèi)容輸出到44H端口OUT80H,AX ;將AL、AH中的內(nèi)容分別輸出到80H、81H兩端口
例子49端口號由DX間接給出如:INAL,DX;從DX所指的端口中讀取INAX,DX;從DX和DX+1所指出的兩個端口中讀取OUTDX,AL;將AL中的字節(jié)輸出到DX所指的端口中OUTDX,AX;將AL中的字節(jié)輸出到DX所指的端口中,將AH中的字節(jié)輸出到DX+1所指端口中的例子50INAL,21H返回51OUT43H,AL返回 指令格式為:XLAT
功能[bx+al]->al
例:查表求n的平方。n:[0-9]1、將0-9的平方表建立在偏移地址為2000H的內(nèi)存中,如圖。2、查表
3)XLAT換碼指令完成求5的平方指令序列為:MOVBX,2000H;指向平方表的首地址MOVAL,5;將5換碼成5的平方值XLAT ;查表,平方值在AL中3、目標(biāo)地址傳送指令1)LEA有效地址傳送到寄存器2)LDS裝入一個新的物理地址3)LES裝入一個新的物理地址4、標(biāo)志寄存器傳送指令1)LAHFAH送FR寄存器的低8位2)SAHFFR寄存器的低8位送AH3)PUSHFFR寄存器推入堆棧4)POPF從棧頂中彈出存入FR寄存器56數(shù)據(jù)傳送類指令
目標(biāo)指令中的數(shù)據(jù)類型無符號數(shù)
帶符號數(shù)
ASCII碼
BCD數(shù)(壓縮BCD和非壓縮BCD)
588086指令系統(tǒng)
-算術(shù)運算指令
算術(shù)運算指令主要涉及兩種類型的數(shù)據(jù)無符號數(shù)8位無符號數(shù)的范圍為0~25516位無符號數(shù)的范圍為0~65535有符號數(shù)
8位有符號數(shù)的范圍為-128~+12716位有符號數(shù)的范圍為-32768~+32767所有算術(shù)運算指令均影響狀態(tài)標(biāo)志(PF,SF,ZF,CF,OF)59算術(shù)運算類指令表。
60
(1)算術(shù)加法指令A(yù)DD
指令格式:ADD目的操作數(shù),源操作數(shù)
指令功能:將源操作數(shù)與目的操作數(shù)相加,結(jié)果存放于目的操作數(shù)。即目的操作數(shù)+源操作數(shù)→目的操作數(shù)。
8086指令系統(tǒng)
–算術(shù)運算指令-加法指令61不帶進(jìn)位的加法指令,如:
ADD AL,50H ;AL和50H相加,結(jié)果放在AL中
ADD DI,SI ;DI和SI的內(nèi)容相加,結(jié)果在DI中 ADD[BX+DI],AX;BX+DI和BX+DI+12個單元和AX相加,結(jié)果在BX+DI和BX+DI+1所指單元ADDAX,[BX+2000H];BX+2000H和BX+2001H
所指單元內(nèi)容和AX的內(nèi)容相加,結(jié)果在AX中。62
(2)帶進(jìn)位算術(shù)加法指令A(yù)DC
指令格式:ADC目的操作數(shù),源操作數(shù)指令功能:將源操作數(shù)與目的操作數(shù)以及進(jìn)位標(biāo)志位CF的值相加,并將結(jié)果存放于目的操作數(shù),即:目的操作數(shù)+源操作數(shù)+CF→目的操作數(shù)。
8086指令系統(tǒng)
–算術(shù)運算指令-加法指令63如:ADCAX,SI;AX和SI中的內(nèi)容以及
CF的值相加,結(jié)果在AXADCDX,[SI];SI和SI+1所指的單元的內(nèi)容和DX的內(nèi)容以及CF
的值相加,結(jié)果在DX64例:實現(xiàn)32位加法
MOVAX,0F271H;加數(shù)的低16位
ADDAX,5698H;與被加數(shù)的低16位相加,并影響CFMOVDX,5B68H;加數(shù)的高16位
ADCAX,0AC6DH;與被加數(shù)的高16位相和CF相加
65
(3)加1指令I(lǐng)NC
指令格式:INC目的操作數(shù)
指令功能:將指定目的操作數(shù)內(nèi)容加1INC指令不影響進(jìn)位標(biāo)志CF。
8086指令系統(tǒng)
–算術(shù)運算指令-加法指令66如:INCAX ;將AX中的內(nèi)容加1INCBL ;將BL中的內(nèi)容加1INCBYTEPTR[BX]
;將BX所指單元的內(nèi)容加1具體指令形式:
INCmem;mem←mem+1INCreg;reg←reg+1操作數(shù)是內(nèi)存尋址,需使用偽指令(4)DAA對壓縮BCD數(shù)加法操作的結(jié)果進(jìn)行校正指令功能:對AL寄存器的內(nèi)容進(jìn)行十進(jìn)制調(diào)整(5)
AAA對非壓縮BCD數(shù)加法操作的結(jié)果進(jìn)行校正指令功能:對AL寄存器的內(nèi)容進(jìn)行十進(jìn)制調(diào)整8086指令系統(tǒng)
–算術(shù)運算指令-加法指令68
減法指令有算術(shù)減法SUB
帶借位算術(shù)減法指令SBB
減1指令DEC
比較CMP等指令求補NEG
8086指令系統(tǒng)
–算術(shù)運算指令-減法指令69MOVAL,86HSUBAL,54H;(AL)=32H(1)指令格式:SUB目的操作數(shù),源操作數(shù)8086指令系統(tǒng)
–算術(shù)運算指令-算術(shù)減法指令70SUBBX,CX;將BX中的內(nèi)容減去CX中的內(nèi)容,結(jié)果在BX中SUB[BP+2],CL;將BP+2所指堆棧單元中的值減去CL中的值,結(jié)果放在BP+2所指的堆棧單元中SUBAL,20 ;AL中的數(shù)減去20,結(jié)果在AL中SUBSI,5010H;SI中的數(shù)減去5010H,結(jié)果在SI中71
如:DECAX ;將AX的內(nèi)容減1,再送回AX中DECBL ;將BL的內(nèi)容減1,結(jié)果送回BL中DECBYTEPTR
[DI+2]
;將DI+2所指單元的內(nèi)容減1,結(jié)果送回此單元
(2)減1指令DEC
指令格式:DEC目的操作數(shù)
指令功能:將指定目的操作數(shù)內(nèi)容減1。8086指令系統(tǒng)
–算術(shù)運算指令-算術(shù)減法指令72
(3)比較指令CMP。
指令格式:CMP目的操作數(shù),源操作數(shù)指令功能:將目的操作數(shù)減去源操作數(shù)。與SUB不同的是,結(jié)果不予保存,僅影響標(biāo)志位。CMPAX,2000H ;將AX的內(nèi)容和
2000H相比較,結(jié)果影響標(biāo)志位CMPAL,50H;將AL中的數(shù)和50H比較,結(jié)果影響標(biāo)志位8086指令系統(tǒng)
–算術(shù)運算指令-算術(shù)減法指令73比較指令通常用于比較兩個操作數(shù)的大小。由受影響的標(biāo)志位狀態(tài)來判斷兩個操作數(shù)比較的結(jié)果。不論是無符號數(shù)比較還是有符號數(shù)比較,若在比較指令后,ZF=1,則兩者相等,否則不相等。若兩者不相等,則可在比較兩個數(shù)之后,利用其他標(biāo)志位的狀態(tài)來確定兩者中哪個大。
74
如果是兩個無符號數(shù)比較,則可根據(jù)進(jìn)位標(biāo)志
CF的狀態(tài)來判斷:若CF=1,則目的操作數(shù)<源操作數(shù);若CF=0,則目的操作數(shù)>源操作數(shù)。如果是兩個有符號數(shù)比較,則要根據(jù)SF和OF兩個標(biāo)志的關(guān)系來判斷:若SF、OF為0,則目的操作數(shù)>=源操作數(shù);若SF為1、OF為0,則目的操作數(shù)<源操作數(shù)。
在程序中,比較指令常用于條件轉(zhuǎn)移之前,條件轉(zhuǎn)移指令根據(jù)CMP操作之后的狀態(tài)標(biāo)志決定程序轉(zhuǎn)移或不轉(zhuǎn)移。
75
乘法指令包括無符號數(shù)乘法、帶符號數(shù)乘法兩種。無符號數(shù)乘法指令MUL。
指令格式:MUL源操作數(shù)
指令功能:完成兩個無符號操作數(shù)的相乘。要求被乘數(shù)放在AL或AX累加器中,用于字節(jié)運算和字運算,另一乘數(shù)可通過指令中的源操作數(shù)(除立即數(shù)方式以外的尋址方式)獲得。8086指令系統(tǒng)
–算術(shù)運算指令-算術(shù)乘法指令76
說明:
8位×8位=16位,16位×16位=32位;被乘數(shù)必須放AX或AL中,指令中隱含;
16位運算結(jié)果放AX中,32位運算結(jié)果放DX和
AX中;乘法指令的執(zhí)行結(jié)果會使標(biāo)志位發(fā)生變化。只有進(jìn)位標(biāo)志CF、溢出標(biāo)志OF有意義,其它標(biāo)志位無定義。77無符號數(shù)的乘法指令例MULBL;AL中無符號數(shù)與BL中無符號數(shù)相乘,結(jié)果在AX中MULBX;AX和BX中的無符號數(shù)相乘,結(jié)果在DX和AX中指令規(guī)定的DIV無符號數(shù)除法
指令功能:完成兩個操作數(shù)相除
DIVOPRDAX/OPRDAL:商,AH:余數(shù)
DXAX/OPRDAX:商,DX:余數(shù)IDIV帶符號數(shù)除法
指令功能:完成兩個操作數(shù)相除
另外還有:CBW帶符號數(shù)字節(jié)擴展CWD帶符號數(shù)字?jǐn)U展AAD非壓縮BCD數(shù)除法校正
8086指令系統(tǒng)
–算術(shù)運算指令-算術(shù)除法指令79(1)邏輯運算指令A(yù)ND目的操作數(shù),源操作數(shù);OR目的操作數(shù),源操作數(shù)NOT目的操作數(shù)XOR目的操作數(shù),源操作數(shù)TEST(測試)8086指令系統(tǒng)
–位操作指令邏輯運算指令邏輯移位指令
AND可以使指定位為0OR可以使指定位為1XOR可以使指定位為非81比如:ANDAL,11H;AL中內(nèi)容和11H相與,結(jié)果在
AL;OR AX,00F0H;AX和00F0H相或,結(jié)果在
AXXORAX,AX;AX內(nèi)容本身進(jìn)行異或,結(jié)果AX清零
NOT AL ;AL中內(nèi)容求反碼,結(jié)果AL中對某位進(jìn)行屏蔽(0)或保留(1)對某位進(jìn)行置(1)或保留(0)對某位求反(1)或保留(0)828086指令系統(tǒng)
–位操作指令
測試指令TEST
指令格式:TEST目的操作數(shù),源操作數(shù)
指令功能:將8位、16位寄存器或存儲器中的內(nèi)容和源操作數(shù)“與”
。
83說明目的操作數(shù)不能為立即數(shù)TEST指令和AND指令的運算規(guī)則相同,但它不產(chǎn)生運算結(jié)果,僅影響標(biāo)志位,常用于對某位是“1”或“0”的檢測。如:判斷AX寄存器中D1位是否為“1”。
TESTAX,0002H
執(zhí)行后,檢測ZF標(biāo)志,若為0,則D1位為1。2、邏輯移位指令
1)SHL邏輯左移 指令功能:將8位、16位寄存器或存儲器內(nèi)容左移,移空的位補0SHLOPRD,1ORSHLOPRD,CL
2)SAL算術(shù)左移
指令功能:將8位、16位寄存器或存儲器內(nèi)容左移,移空的位補0
舉例:擴展BCD碼BCD碼2、邏輯移位指令3)SHR邏輯右移
指令功能:將8位、16位寄存器或存儲器內(nèi)容右移,移空的位補0
4)SAR算術(shù)右移
指令功能:將8位、16位寄存器或存儲器內(nèi)容右移,移空的位由最高位補充。舉例:BCD碼擴展BCD碼5)ROL不帶進(jìn)位循環(huán)左移 指令功能:將8位、16位寄存器或存儲器內(nèi)容左移,移空的位由移出位補充。6)ROR不帶進(jìn)位循環(huán)右移 指令功能:將8位、16位寄存器或存儲器內(nèi)容右移,移空的位由移出位補充。7)RCL帶進(jìn)位循環(huán)左移 指令功能:將8位、16位寄存器或存儲器內(nèi)容左移,移空的位由CF位補充。
8)RCR帶進(jìn)位循環(huán)右移
指令功能:將8位、16位寄存器或存儲器內(nèi)容右移,移空的位由CF位補充。舉例:倒序程序四、串處理指令源操作數(shù)指針DS:SI,目的操作數(shù)指針ES:DI每操作一次SI,DI修改一次,方向由DF控制重復(fù)操作的退出cx控制條件控制(ZF標(biāo)志)四、串處理指令1、串傳送指令
MOVSB/MOVSW2、串比較指令CMPSB/COMPSW3、串搜索指令
SCASB/SCASW4、串裝入指令LODSB/LODSW5、串存儲指令STOSB/STOSB6、指令前綴
REP、REPZ/REPE、REPNZ/REPNE
控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令用于實現(xiàn)分支、循環(huán)、過程等程序結(jié)構(gòu),是僅次于傳送指令的最常用指令
控制轉(zhuǎn)移類指令通過改變IP(和CS)值,實現(xiàn)程序執(zhí)行順序的改變918086指令系統(tǒng)
–控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令中包括5類指令,即無條件轉(zhuǎn)移和條件轉(zhuǎn)移指令循環(huán)控制指令子程序調(diào)用和返回指令中斷指令和中斷返回指令處理器控制指令控制轉(zhuǎn)移類指令用來控制程序執(zhí)行的順序,通過控制轉(zhuǎn)移指令可實現(xiàn)各種結(jié)構(gòu)化程序設(shè)計,如分支結(jié)構(gòu)程序、循環(huán)結(jié)構(gòu)程序等。一、無條件轉(zhuǎn)移指令使程序轉(zhuǎn)到指定的目標(biāo)地址處,從目標(biāo)地址處開始執(zhí)行指令label:要轉(zhuǎn)移到的目標(biāo)地址(目的地址、轉(zhuǎn)移地址)JMP指令分成4種類型:⑴段內(nèi)轉(zhuǎn)移、直接尋址⑵段內(nèi)轉(zhuǎn)移、間接尋址⑶段間轉(zhuǎn)移、直接尋址⑷段間轉(zhuǎn)移、間接尋址JMPlabel
;程序轉(zhuǎn)向label標(biāo)號指定的地址目標(biāo)地址的尋址方式直接尋址方式轉(zhuǎn)移地址直接在指令的機器代碼中間接尋址方式轉(zhuǎn)移地址在寄存器或主存單元中用標(biāo)號表達(dá)用寄存器或存儲器操作數(shù)表達(dá)目標(biāo)地址的范圍:段內(nèi)段內(nèi)轉(zhuǎn)移——近轉(zhuǎn)移(near)在當(dāng)前代碼段64KB范圍內(nèi)轉(zhuǎn)移(±32KB范圍)不需要更改CS段地址,只要改變IP偏移地址段內(nèi)轉(zhuǎn)移——短轉(zhuǎn)移(short)轉(zhuǎn)移范圍可以用一個字節(jié)表達(dá),在段內(nèi)-128~+127范圍的轉(zhuǎn)移代碼段代碼段目標(biāo)地址的范圍:段間段間轉(zhuǎn)移——遠(yuǎn)轉(zhuǎn)移(far)從當(dāng)前代碼段跳轉(zhuǎn)到另一個代碼段,可以在1MB范圍需要更改CS段地址和IP偏移地址目標(biāo)地址必須用一個32位數(shù)表達(dá),叫做32位遠(yuǎn)指針,它就是邏輯地址代碼段代碼段
實際編程時,匯編程序會根據(jù)目標(biāo)地址的距離,自動處理成短轉(zhuǎn)移、近轉(zhuǎn)移或遠(yuǎn)轉(zhuǎn)移
程序員可用操作符short、nearptr或farptr強制段內(nèi)轉(zhuǎn)移、直接尋址JMPlabel ;IP←IP+位移量位移量是緊接著JMP指令后的那條指令的偏移地址,到目標(biāo)指令的偏移地址的地址位移當(dāng)向地址增大方向轉(zhuǎn)移時,位移量為正;向地址減小方向轉(zhuǎn)移時,位移量為負(fù)
jmpagain
;轉(zhuǎn)移到again處繼續(xù)執(zhí)行
……again:
deccx
;標(biāo)號again的指令
……
jmpoutput
;轉(zhuǎn)向output
……output:
movresult,al
;標(biāo)號output的指令實際為相對尋址段內(nèi)間接轉(zhuǎn)移無條件轉(zhuǎn)移指令的格式:
JMPREG16/MEM16;(IP)+DISP(16位)IP實例
JMPSIJMP[BX]JMPWORDPTR[BP][DI]段內(nèi)轉(zhuǎn)移、間接尋址JMPr16/m16 ;IP←r16/m16將一個16位寄存器或主存字單元內(nèi)容送入IP寄存器,作為新的指令指針,但不修改CS寄存器的內(nèi)容jmpax ;IP←AXjmpwordptr[2000h]
;IP←[2000h]
段間直接轉(zhuǎn)移無條件轉(zhuǎn)移指令的格式:
JMPFARPTRLABEl標(biāo)號是一個遠(yuǎn)標(biāo)號,該標(biāo)號在另一個代碼段內(nèi)段間轉(zhuǎn)移、直接尋址JMPfarptrlabel
;IP←label的偏移地址 ;CS←label的段地址將標(biāo)號所在段的段地址作為新的CS值,標(biāo)號在該段內(nèi)的偏移地址作為新的IP值,程序跳轉(zhuǎn)到新的代碼段執(zhí)行jmpfarptrotherseg
;遠(yuǎn)轉(zhuǎn)移到代碼段2的otherseg段間轉(zhuǎn)移、間接尋址JMPfarptrmem
;IP←[mem],CS←[mem+2]用一個雙字存儲單元表示要跳轉(zhuǎn)的目標(biāo)地址。這個目標(biāo)地址存放在主存中連續(xù)的兩個字單元中的,低位字送IP寄存器,高位字送CS寄存器movwordptr[bx],0movwordptr[bx+2],1500hJMPfarptr[bx];轉(zhuǎn)移到1500h:0實例CODESEGMENT……MOVAX,1MOVBX,2ADDBX,AX
JMPLOOP1ADDBX,4ADDBX,5……LOOP1:……CODEENDS程序中每條指令的尋址是由CS
和IP決定的。讓程序轉(zhuǎn)移到另一個位置需要修改IP(段內(nèi)轉(zhuǎn)移/NEAR)或
CS:IP(段間轉(zhuǎn)移/FAR)如段內(nèi)轉(zhuǎn)移(-128-+127)則稱為短轉(zhuǎn)移,用SHORT來表示。實例MOVAX,0JMPNEXTMOVBX,0MOVCX,0NEXT:MOVAH,4CHINT21HMOVAX,0NEXT:MOVBX,0MOVCX,0JMPNEXTMOVAH,4CHINT21H說明:目標(biāo)地址的計算以當(dāng)前IP的值為中心,前移或者后移,稱為相對轉(zhuǎn)移。以新的值完全代替當(dāng)前的IP值,稱為絕對轉(zhuǎn)移。
在86系列中,所有的段內(nèi)直接轉(zhuǎn)移都是相對轉(zhuǎn)移,所有的段內(nèi)間接轉(zhuǎn)移和段間間接轉(zhuǎn)移都是絕對轉(zhuǎn)移。2、條件轉(zhuǎn)移指令
1)
單條件轉(zhuǎn)移指令 ①
JC ;CF標(biāo)志為1,則轉(zhuǎn)移 ②
JNC ;CF標(biāo)志為0,則轉(zhuǎn)移 ③
JE/JZ ;ZF標(biāo)志為1,則轉(zhuǎn)移 ④
JNE/JNZ;ZF標(biāo)志為0,則轉(zhuǎn)移 ⑤
JS ;SF標(biāo)志為1,則轉(zhuǎn)移 ⑥
JNS ;SF標(biāo)志為0,則轉(zhuǎn)移 ⑦
JO ;OF標(biāo)志為1,則轉(zhuǎn)移 ⑧
JNO ;OF標(biāo)志為0,則轉(zhuǎn)移 ⑨
JP/JPE;PF標(biāo)志為1,則轉(zhuǎn)移 ⑩
JNP/JPO;PF標(biāo)志為0,則轉(zhuǎn)移
105類別指令名稱指令格式條件轉(zhuǎn)移進(jìn)位位為1轉(zhuǎn)移JC目標(biāo)標(biāo)號進(jìn)位位為0轉(zhuǎn)移JNC目標(biāo)標(biāo)號等于/結(jié)果為0轉(zhuǎn)移JE/JZ目標(biāo)標(biāo)號不等于/結(jié)果不為0轉(zhuǎn)移JNE/JNZ目標(biāo)標(biāo)號大于/不小于也不等于轉(zhuǎn)移JG/JNLE目標(biāo)標(biāo)號大于或等于/不小于轉(zhuǎn)移JGE/JNL目標(biāo)標(biāo)號小于/不大于也不等于轉(zhuǎn)移JL/JNGE目標(biāo)標(biāo)號106類別指令名稱指令格式條件轉(zhuǎn)移小于或等于/不大于轉(zhuǎn)移JLE/JNG目標(biāo)標(biāo)號溢出轉(zhuǎn)移JO目標(biāo)標(biāo)號不溢出轉(zhuǎn)移JNO目標(biāo)標(biāo)號奇偶位為0/奇偶性為奇轉(zhuǎn)移JNP/JPO目標(biāo)標(biāo)號奇偶位為1/奇偶性為偶轉(zhuǎn)移JP/JPE目標(biāo)標(biāo)號符號標(biāo)志位為0轉(zhuǎn)移JNS目標(biāo)標(biāo)號符號標(biāo)志位為1轉(zhuǎn)移JS目標(biāo)標(biāo)號107類別指令名稱指令格式循環(huán)控制循環(huán)LOOP目標(biāo)標(biāo)號等于/結(jié)果為0循環(huán)LOOPE/LOOPZ目標(biāo)標(biāo)號不等于/結(jié)果不為0循環(huán)LOOPNE/LOOPNZ目標(biāo)標(biāo)號CX內(nèi)容為0轉(zhuǎn)移JCXZ目標(biāo)標(biāo)號中斷中斷INT中斷類型溢出時中斷INTO中斷返回IRET108
2)條件轉(zhuǎn)移指令
條件轉(zhuǎn)移指令以某些標(biāo)志位的狀態(tài)或有關(guān)標(biāo)志位的邏輯運算結(jié)果作為依據(jù),以此決定是否轉(zhuǎn)移。這些標(biāo)志位通常由條件轉(zhuǎn)移指令的上一條指令所設(shè)置。條件轉(zhuǎn)移指令將根據(jù)這些標(biāo)志位的狀態(tài),判斷是否滿足對應(yīng)的測試條件。若滿足條件,則轉(zhuǎn)移到指令指定的地方,否則繼續(xù)執(zhí)行條件轉(zhuǎn)移指令之后的指令。執(zhí)行條件轉(zhuǎn)移指令不影響標(biāo)志位。109
單條件轉(zhuǎn)移指令(1)指令格式:JZ操作數(shù)或JE操作數(shù)指令功能:轉(zhuǎn)移條件:ZF=1,
ZF標(biāo)志位為1,則轉(zhuǎn)移
(2)指令格式:JNZ/JNE操作數(shù)指令功能:ZF標(biāo)志位為0,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 虧損企業(yè)抵押貸款合同標(biāo)準(zhǔn)文本
- 入職合同范例國家
- 農(nóng)產(chǎn)品平臺銷售合同標(biāo)準(zhǔn)文本
- 養(yǎng)殖購銷合同標(biāo)準(zhǔn)文本
- ip孵化合同標(biāo)準(zhǔn)文本
- 供水勞務(wù)合同樣本
- 買房過戶協(xié)議合同標(biāo)準(zhǔn)文本
- 專業(yè)合同范例軟件有些
- 人才違約合同標(biāo)準(zhǔn)文本
- 人工荒山開墾合同標(biāo)準(zhǔn)文本
- 安全專項費用使用申請表
- 瀝青路面施工-熱拌瀝青混合料路面施工
- 垃圾處理監(jiān)理大綱
- 管制無線電陸空通話(2022年版)學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫2023年
- 冷縮式電力電纜終端頭制作流程課件
- 小學(xué)生作文紙模板
- 銀行員工以案促改心得體會三篇
- 初中歷史(六三學(xué)制)2021年北京市中考?xì)v史試題(原卷版)
- 超粘磨耗層施工方案
- 急診就診流程圖
- 閻立忠老師-產(chǎn)業(yè)園區(qū)規(guī)劃招商運營實戰(zhàn)
評論
0/150
提交評論