物理指令系統(tǒng)3-2_第1頁
物理指令系統(tǒng)3-2_第2頁
物理指令系統(tǒng)3-2_第3頁
物理指令系統(tǒng)3-2_第4頁
物理指令系統(tǒng)3-2_第5頁
已閱讀5頁,還剩150頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第三章8086的指令系統(tǒng)西安建筑科技大學(xué)電子信息科學(xué)與技術(shù)張愛萍指令:使計算機(jī)執(zhí)行某種特定操作的二進(jìn)制編碼。指令系統(tǒng):指一種計算機(jī)能夠識別和執(zhí)行的所有不同指令的集合。

§3.18086的尋址方式(addressingmode)§3.28086指令系統(tǒng)(instructset)一、復(fù)習(xí)(1)高級語言與匯編語言

例:計算a+b

高級語言處理:只需定義a、b的類型;匯編語言處理:就需要知道a、b的位置,看a、b是存放在寄存器中,還是存儲器中。

(2)存儲器分段(畫圖)

2000:0002H12H2000:0000H偏移地址=0002H00000H.20000H20001H20002H20003H20004H...0FFFFFH......00H0000:0000HFFFF:FFFFH物理地址

邏輯地址(3)指令

MOVOPRD1,OPRD2OPRD1目的操作數(shù)

OPRD2源操作數(shù)目的〈——源如果操作數(shù)存放在存儲器中,稱為存儲器操作數(shù),例:[2001],[BX],[BP]…;如果操作數(shù)放在寄存器中,稱為寄存器操作數(shù),例AX,BX,CX…。二、基本概念(1)尋址方式尋找操作數(shù)地址的規(guī)則、方法。有效地址物理地址(2)有效地址偏移地址§3.18086的尋址方式

3.1.1

操作數(shù)的尋址方式立即數(shù)尋址寄存器尋址直接尋址寄存器間接尋址寄存器相對尋址基址、變址尋址基址、變址相對尋址1.立即數(shù)尋址在這種尋址方式中,操作數(shù)直接出現(xiàn)在指令中,不需要計算有效地址,執(zhí)行速度較快,這種方式叫立即數(shù)尋址方式。

例:MOVAX,1234H這條指令的功能是:把立即數(shù)1234H送入AX中。圖3-1立即尋址示意圖說明:1、立即數(shù)只能是8位或16位整數(shù),不能為小數(shù)或其他類型,若是16位,低字節(jié)在前高字節(jié)在后;2、立即數(shù)只能為源操作數(shù),不能為目的操作數(shù)

;3、立即數(shù)是指令格式的一部分,放在代碼段中,得到指令,就得到操作數(shù),而不需要運(yùn)算操作數(shù)的地址,所以該種尋址方式是不需要尋址的;4、主要用于給REG或者M(jìn)em賦初值,也可以與寄存器操作數(shù)或者存儲器操作數(shù)進(jìn)行邏輯運(yùn)算。例:MOVAL,08H;

MOVAX,3697HADDAX,100H2.寄存器尋址例:MOVDS,AX圖3-2寄存器尋址示意圖

如果操作數(shù)就在CPU的內(nèi)部寄存器中,那么寄存器名在指令中給出。這種尋址方式就叫寄存器尋址方式。說明:1、對16位操作數(shù)來說,寄存器可以為AX、BX,CX,DX、SI、DI、SP、BP、DS、SS、ES以及CS(但CS只能作為源操作數(shù)),對于8位操作數(shù)來說,寄存器可為AH,AL、BH,BL,CH,CL、DH,DL。

2、采用寄存器尋址方式的指令在執(zhí)行時,操作就在CPU內(nèi)部進(jìn)行,因此執(zhí)行速度快。

使用直接尋址方式時,數(shù)據(jù)總是在存儲器中,存儲單元的有效地址由指令直接指出,所以直接尋址是對存儲器進(jìn)行訪問時可采用的最簡單的方式。例:MOVAX,

[2010H](假設(shè)DS=3000H

)物理地址=DS×16+2010H=3000H×16+2010H=32010H3.直接尋址指令功能是將32010H和32011H兩單元的內(nèi)容送到AX中。圖3-3直接尋址方式示意圖MOVAX,BUF或MOVAX,[BUF]將DS段內(nèi)以有效地址BUF(符號地址)起始的兩個單元的內(nèi)容送入AX寄存器中要注意的是采用直接尋址方式時,如果指令前面沒有用前綴指明操作數(shù)在哪一段,則默認(rèn)為段寄存器是數(shù)據(jù)段寄存器DS。

若操作數(shù)存放在其他段,指令中要使用段超越前綴來說明例:MOVBX,ES:[1200]

采用寄存器間接尋址方式時,操作數(shù)一定在存儲器中,存儲單元的有效地址由寄存器指出,這些寄存器可以為BX、BP,SI和DI之一,由于上述4個寄存器所黙認(rèn)的段寄存器不同,這樣又可以分兩種情況:

①以SI、DI、BX進(jìn)行間接尋址,則操作數(shù)通常存放在現(xiàn)行數(shù)據(jù)段中。操作數(shù)的物理地址為:(DS)×16+(SI/DI/BX)4.寄存器間接尋址例:MOVAX,[SI]

圖3-4間接尋址方式(1)示意圖

②寄存器BP間接尋址,則操作數(shù)存放在堆棧段區(qū)域中。物理地址:(SS)×16+(BP)例:MOVAX,[BP](假設(shè)SS=3000H)物理地址=SS×16+BP=30000H+2000H=32000H指令功能是將32000H和32001H兩單元的內(nèi)容送到AX中。

圖3-5間接尋址方式(2)示意圖5.寄存器相對尋址

在這種尋址方式中,操作數(shù)存放在存貯器中。其物理地址為:(DS)×16+(SI/DI/BX)+8位或16位偏移量或(SS)×16+(BP)+8位或16位偏移量其中8位或16位偏移量可以是符號地址也可以是數(shù)值地址。例:MOVAX,DISP[SI]物理地址=DS×16+SI+DISP=30000H+1000H+0300H=31300H圖3-6相對尋址方式示意圖注:MOVBX,[BP+COUNT]書寫有下面的等效形式:MOVBX,[BP]+COUNTMOVBX,COUNT[BP]

在8086中,通常把BX和BP作為基址寄存器,而把SI、DI作為變址寄存器。將這兩種寄存器聯(lián)合起來進(jìn)行的尋址就稱為基址、變址尋址。這時,其物理地址為:(DS)×16+(BX)+(SI/DI)或(SS)×16+(BP)+(SI/DI)6.基址、變址尋址例:MOVAX,[BX][SI]物理地址=DS×16+SI+BX=30000H+1000H+3000H=34000H指令功能是將34000H和34001H兩單元的內(nèi)容送到AX中。

圖3-7基址、變址尋址方式(1)示意圖例:MOVAX,[BP][SI]物理地址=SS×16+BP+SI=30000H+3000H+1000H=34000H指令功能是將340000H和34001H兩單元的內(nèi)容送到AX中。

圖3-8基址、變址尋址方式(2)示意圖例:MOVAX,DISP[BP][SI]物理地址=SS×16+SI+BP+DISP=30000H+1000H+3000H+0300H=34300H指令功能是將34300H和34301H兩單元的內(nèi)容送到AX中。

這種尋址實際上是基址、變址尋址的擴(kuò)充。其物理地址為:(DS)×16+(BX)+(SI/DI)+8位或16位偏移量(SS)×16+(BP)+(SI/DI)+8位或16位偏移量7.基址、變址相對尋址圖3-9相對基址、變址尋址方式示意圖小結(jié)

1、區(qū)分偏移地址和有效地址;

2、當(dāng)操作數(shù)在存儲器中存放,共有五種尋址方式;

3、操作數(shù)采取哪一種尋址方式,會影響機(jī)器的運(yùn)行速度和效率,因此選擇合適的尋址很重要。下節(jié)學(xué)習(xí)轉(zhuǎn)移類指令的尋址方式3.1.2轉(zhuǎn)移地址的尋址方式

段內(nèi)直接尋址段內(nèi)間接尋址段間直接尋址段間間接尋址必備知識一、尋址方式1、直接尋址——直接尋址方式2、間接尋址——寄存器間接尋址方式

寄存器相對尋址方式

基址、變址尋址方式

相對基址、變址尋址方式二、轉(zhuǎn)移(CS:IP決定指令在內(nèi)存中的位置,那么發(fā)生轉(zhuǎn)移時)

段內(nèi)轉(zhuǎn)移——轉(zhuǎn)移之前和之后在同一個代碼段內(nèi)

此時CS不變,IP變化;段間轉(zhuǎn)移——轉(zhuǎn)移之前和之后在不同的代碼段內(nèi)

此時CS、IP都變化.必備知識三、指令1、無條件轉(zhuǎn)移指令

JMPDISPJMPCXJMP[BX]

…2、條件轉(zhuǎn)移指令

JZDISPJNZDISP

…1.段內(nèi)直接尋址

段內(nèi)直接尋址方式也稱為相對尋址方式,轉(zhuǎn)移的目標(biāo)地址:當(dāng)前IP內(nèi)容+8位或16位的位移量DISP。物理地址:CS×16+I(xiàn)P+DISP例:JZDISPJMPDISP(以此為例來說明)其中DISP是符號地址,也可以是數(shù)值地址,表示8位或者16位的位移量。假設(shè)DISP=50H,IP=1000H,CS=3000H,那么該指令使CPU轉(zhuǎn)向31050H去執(zhí)行。

圖3-10段內(nèi)相對轉(zhuǎn)移尋址方式示意圖JMPSHORTLOP;IP←(IP)+8位偏移量,段內(nèi)短轉(zhuǎn)移,轉(zhuǎn)移范圍在-128B~+127B范圍內(nèi),轉(zhuǎn)向符號地址LOP處JMPNEARPTRL2;IP←(IP)+16位偏移量,段內(nèi)近轉(zhuǎn)移,轉(zhuǎn)移范圍在正負(fù)32KB范圍,轉(zhuǎn)向符號地址L2處這種尋址方式適用于無條件轉(zhuǎn)移、條件轉(zhuǎn)移(偏移量僅為8位偏移量)指令。

這種尋址方式在段內(nèi)進(jìn)行,其轉(zhuǎn)移的目標(biāo)地址由等于一個寄存器或存儲單元的內(nèi)容。可以使用除立即數(shù)方式以外的任何一種尋址方式,例:JMPCX;IP←(CX)即:將寄存器CX的內(nèi)容取代IP寄存器內(nèi)容

JMP[BX];IP←[BX]即:將存儲器[BX]的內(nèi)容取代IP寄存器內(nèi)容2.段內(nèi)間接尋址圖3-11段內(nèi)間接尋址方式示意圖這種尋址方式只適合無條件轉(zhuǎn)移指令。假設(shè)CS=3000H,IP=1000H,DS=4000H,CX=4000H,BX=5000H,(45000H)=8830H。

在這種尋址方式中,指令直接提供了轉(zhuǎn)移目的地的段地址和偏移地址。用指令中指定的段地址來取代CS寄存器的內(nèi)容,指定的偏移地址來取代IP寄存器的內(nèi)容,完成從一個段到另一個段的轉(zhuǎn)移操作。例:JMPFARPTRDADD1功能:將DADD1所在的段基址——〉CS寄存器,偏移地址——〉IP寄存器,

DADD1是目標(biāo)地址,用符號表示,F(xiàn)ARPTR是表示段間直接轉(zhuǎn)移的操作符。特點:程序執(zhí)行從一個代碼段轉(zhuǎn)移到另一個代碼段。3.段間直接尋址圖3-12段間直接尋址方式示意圖假設(shè)指令JMPFARPTRDADD1位于C1內(nèi),程序執(zhí)行此指令時

CS=2000H,IP=3000H。目標(biāo)地址DADD1位于段基址為4000H的C2內(nèi),偏移量為3000H。那么執(zhí)行指令后,程序從43000H單元開始執(zhí)行。

用存儲器兩個連續(xù)字內(nèi)容取代IP和CS寄存器的原始內(nèi)容,從而達(dá)到段間轉(zhuǎn)移的目的。例:JMPDWORDPTR[BP][DI]

轉(zhuǎn)移地址:

(IP)←(SS:BP+DI)(CS)←(SS:BP+DI+2)由于確定轉(zhuǎn)移地址需要32位信息,因此只適用于存貯器尋址方式。4.段間間接尋址圖3-13段間間接尋址方式示意圖假設(shè)CS=2000H,SS=3000H,BP=1000H,DI=2000H,(33000H)=2000H,(33002H)=8000H。下面我們學(xué)習(xí)I/O端口的尋址方式代碼段1堆棧段代碼段2I/O端口尋址:

操作數(shù)存放在I/O端口的方式。1.直接I/O端口尋址方式

(用八條地址線編址)端口地址由指令直接提供的一個8位立即數(shù),這種尋址方式只能用于00H~FFH的固定端口尋址。例:INAL,13H2.間接I/O端口尋址方式(用16條地址線編址)

被尋找的端口地址由DX寄存器給出,由于DX能表達(dá)16位地址,可訪問64K范圍內(nèi)的I/O端口。例:MOVDX,1234H OUTDX,AL3.1.3I/O端口尋址

下面我們學(xué)習(xí)指令系統(tǒng)8086的指令系統(tǒng)大致可分為6種類型:①數(shù)據(jù)傳送指令②算術(shù)運(yùn)算指令③邏輯運(yùn)算指令④控制轉(zhuǎn)移指令⑤串處理指令⑥處理機(jī)控制指令

§3.28086指令系統(tǒng)關(guān)于指令的學(xué)習(xí)要點:1、指令格式;2、指令功能;3、指令使用說明;4、指令對標(biāo)志寄存器的各個位有沒有影響.

3.2.1數(shù)據(jù)傳送指令1.通用傳送指令通用傳送指令中包括:

基本傳送指令MOV

交換指令XCHG

堆棧指令PUSH和POP數(shù)據(jù)傳送指令是計算機(jī)中最基本、最常用、最重要的一種操作。它的功能是把操作數(shù)傳送到目的地址。(1)基本傳送指令圖3-14數(shù)據(jù)傳送方向示意圖

指令格式:MOVdst,src執(zhí)行功能:該指令可把一個字節(jié)或一個字操作數(shù)從源地址傳送到目的地址中去。dst:可以是累加器、寄存器、存貯器;src:可以是累加器、寄存器和存貯器以及立即操作數(shù)。說明:從通用寄存器到通用寄存器

MOVAX,BX

;傳送寄存器BX內(nèi)容至AX,BX的內(nèi)容保持不變

MOVBL,AL

(2)從立即數(shù)到通用寄存器

MOVAX,0066H;AX=0066HMOVBH,03H;BH=03H

注意:立即數(shù)不能直接送段寄存器MOVDS,2000H

錯誤MOVAX,2000HMOVDS,AX

正確(3)從立即數(shù)到存儲器立即數(shù)可以傳送到存儲器的任何存儲單元,存儲單元可采用直接、寄存器間接、寄存器相對、基址變址(相對)尋址MOVWORDPTR[BX],84;傳送立即數(shù)84送至一個存儲單元,存儲單元的有效地址由BX給出

MOVBYTEPTR[BX+SI],84;傳送立即數(shù)84送至一個存儲單元,存儲單元的有效地址由BX和SI給出(4)從存儲器到通用寄存器存儲器中任何存儲單元的內(nèi)容可以直接傳送到通用寄存器

MOVSI,MEM_VALUEMOVDX,ARRAY[SI](5)從通用寄存器到存儲器

MOVARRAY[BX+DI],DXMOVMEM_VALUE,AX從存儲器或通用寄存器到段寄存器

除CS寄存器不能作為目的操作數(shù),換句話說,這個寄存器的值不能隨意修改。而IP寄存器既不能作源操作數(shù),也不能作目的操作數(shù)。例如:

MOVCS,[35AH]

錯誤

MOVCS,AX

錯誤

MOVAX,IP

錯誤

MOVIP,WORDPTR[BX]

錯誤

(7)從段寄存器到存儲器或通用寄存器

此類指令,CS可作為源操作數(shù)使用。

MOVDX,DSMOVBX,ESMOVGAMMA,CS(8)

MOV指令對標(biāo)志位沒有影響。

(9)需要注意的是,MOV指令不能在兩個存貯器單元之間進(jìn)行數(shù)據(jù)直接傳送。如:

MOV[2000H],[35AH]

錯誤

MOVWORDPTR[BX],[8729H]

錯誤

為了實現(xiàn)存貯器單元之間的數(shù)據(jù)傳送,必須用內(nèi)部寄存器作為中介。

MOVAL,DATAlMOVDATA2,AL實際上,上述幾點中有些對于其它通用傳送指令,甚至其他種類的指令也是適合的,由讀者在后面的學(xué)習(xí)中去思考。(2)交換指令例如:看書指令格式:

XCHGOPR1,OPR2功能:OPR1

,OPR2中的內(nèi)容互換,分三步(TEMP)(OPR1);(OPR1)(OPR2);(OPR2)(TEMP);指令規(guī)定:參加交換的兩操作數(shù)必須有一個是寄存器操作數(shù),

也就是只能在兩個8/16位通用寄存器之間,8/16位通用寄存器和MEM之間內(nèi)容互換。且兩操作數(shù)類型必須一致。(3)堆棧操作指令PUSHsrc(壓入堆棧指令)操作:SPSP-2,(SP+1,SP)srcPOPdst(彈出堆棧指令)操作:(dst)(SP+1,SP),SPSP+2例如:

MOVAX,1234HMOVDX,5678HMOVSP,2000HPUSHAXPUSHDX┇POPDXPOPAX當(dāng)執(zhí)行完兩條壓入堆棧的指令時,堆棧中的內(nèi)容如圖所示。

①SP-2→SP ;SP=1FFEH ,(SP)←AX②SP-2→SP ;SP=1FFCH ,(SP)←DX①DX←(SP) ;SP+2→SP ,SP=1FFEH②AX←(SP) ;SP+2→SP ,SP=2000H說明:1)、每執(zhí)行一條壓入堆棧指令,堆棧地址指針SP減2,壓入堆棧的數(shù)據(jù)放在棧頂。彈出堆棧的過程與此剛好相反,每彈出1個字,棧頂指針SP的值加2;2)、該指令在子程序和中斷服務(wù)程序中使用;3)、堆棧指令進(jìn)行的是字操作,對標(biāo)志位沒有影響;4)、SP的值任何時候總是指向當(dāng)前的棧頂;5)、該指令可用除立即數(shù)以外的其他尋址方式;6)、PUSH指令的操作數(shù)為寄存器(IP除外)或存儲單元7)、POP指令的操作數(shù)為寄存器(CS除外)或者存儲單元2.地址傳送指令地址傳送類指令包括:LEA指令LDS指令(不講)LES指令(不講)共同點:源操作數(shù)均為存儲器操作數(shù)指令格式:LEAREG,SRC執(zhí)行功能:REGSRC,該指令把給出的源操作數(shù)的有效地址傳送到指定的寄存器。源操作數(shù)必須是一個存儲器操作數(shù),目的操作數(shù)必須是一個16位的通用寄存器。這條指令通常用來建立串指令操作所需的地址指針。SRC可以是變量名、標(biāo)號或地址表達(dá)式

LEABX,DATA和MOVBX,OFFSETDATA等價

LEASI,BUFFER和MOVSI,OFFSETBUFFER等價

(1)LEA指令輸入/輸出指令用來完成累加器(AX/AL)與I/O端口之間的數(shù)據(jù)傳送功能。3.累加器專用傳送指令

IN

輸入指令指令格式:IN

AL,PORT(字節(jié)操作);

IN

AX,PORT(字操作);

IN

AL,DX(字節(jié)操作);

IN

AX,DX(字操作);

執(zhí)行操作:將指定端口中的內(nèi)容送至累加器(1)輸入/輸出指令

OUT輸出指令指令格式:OUT

PORT,AL(字節(jié)操作);

OUT

PORT,AX(字操作);

OUT

DX,AL(字節(jié)操作);

OUT

DX,AX(字操作);執(zhí)行操作:將累加器中的內(nèi)容傳送到指定端口說明:在8086/8088系統(tǒng)中,I/O端口與CPU之間的信息交換由IN和OUT指令完成。外部設(shè)備的地址取值范圍為0000H~FFFFH.若端口地址在00H~FFH之間,可以使用直接尋址方式;若端口地址的尋址范圍是64K(0000H~FFFFH),由16位寄存器DX來作間接尋址。

例如:INAX,20H;將端口號為20H、21H單元的內(nèi)容送AX中OUT 22H,AL;將AL中的數(shù)據(jù)從22H端口輸出MOV DX,210H;端口地址210H送DXIN AL,DX;讀210H端口一個字節(jié)到AL中OUT DX,AX;將AX中的數(shù)據(jù)從210H端口輸出

指令格式:XLAT

OPR或XLAT執(zhí)行操作:AL←(BX+AL)指令功能:AL←DS:[BX+AL];把BX的值作為內(nèi)存字節(jié)數(shù)組首地址、下標(biāo)為AL的數(shù)組元素的值傳送給AL。有兩個隱含操作數(shù)BX和AL。對標(biāo)志位的影響:不影響標(biāo)志位用途:用于查表,表首地址的偏移地址在BX中,表長度可達(dá)256字節(jié)。例看書(2)XLAT換碼指令4.標(biāo)志寄存器傳送指令⑴LAHF

讀標(biāo)志指令指令格式:LAHF執(zhí)行操作:AH←FLAG0-7。⑵SAHF

寫標(biāo)志指令指令格式:SAHF執(zhí)行操作:FLAG0-7←AH;對標(biāo)志寄存器的影響:直接影響標(biāo)志位。⑶PUSHF

標(biāo)志寄存器進(jìn)棧指令指令格式:PUSHF執(zhí)行操作:SP←SP-2,(SP+1,SP)←FLAG標(biāo)志寄存器內(nèi)容。對標(biāo)志寄存器的影響:不影響標(biāo)志位⑷POPF

標(biāo)志寄存器出棧指令指令格式:POPF執(zhí)行操作:FLAG←(SP+1,SP),SP←SP+2,影響標(biāo)志位。對標(biāo)志寄存器的影響:影響標(biāo)志位小結(jié)

8086的數(shù)據(jù)傳送指令有通用傳送指令、地址傳送指令、累加器專用指令以及標(biāo)志傳送指令4類,以實現(xiàn)CPU的內(nèi)部寄存器之間、CPU和存儲器之間、CPU和I/O端口之間的數(shù)據(jù)傳送。

8086可提供加、減、乘、除4種基本算術(shù)運(yùn)算的操作指令。這些指令可實現(xiàn)字節(jié)或字的運(yùn)算,也可以用于有符號數(shù)和無符號數(shù)的運(yùn)算。圖3-15進(jìn)行加、減運(yùn)算的源操作數(shù)和目的操作數(shù)的關(guān)系3.2.2算術(shù)運(yùn)算指令(4類)1.加法指令(3條)(1)不帶進(jìn)位的加法指令指令格式:ADDdst,src指令功能:dst←(dst)+(src)源操作數(shù)可以是累加器、通用寄存器、存貯器和立即數(shù)。目的操作數(shù)可以是累加器、通用寄存器或存貯器。例如:ADD AL,30 ;AL←AL+30ADD AX,1234H ;AX←AX+1234HADD AX,BX ;AX←AX+BXADDCX,MEM_WORD;

CX←CX+(MEM_WORD)ADDMEM_WORD,AX;

(MEM_WORD)

←AX+(MEM_WORD)

ADD BETA[SI],100;(SI+BETA)←((SI+BETA))+100ADD BETA[SI],AX;(SI+BETA)←((SI+BETA))+AX說明:1)在使用時還要注意兩個操作數(shù)類型一致。例如:ADDAX,0CFA8H若指令執(zhí)行前,AX=5623H,則指令執(zhí)行后,AX=25CBH,且CF=1,OF=0,SF=0,ZF=0,AF=0,PF=0。

2)兩個存儲器操作不能直接相加。(2)帶進(jìn)位的加法指令指令格式:ADCdst,src指令功能:dst←(dst)+(src)+CF

這條指令與ADD指令基本相同,只是在對兩個操作數(shù)進(jìn)行相加運(yùn)算時還應(yīng)加上進(jìn)位位的當(dāng)前值,然后再將結(jié)果送至目的操作數(shù)。主要用于雙精度(雙字長)以及多字節(jié)的數(shù)據(jù)運(yùn)算。例如:現(xiàn)有兩個雙精度字902387A5H和27BCB400H,其中被加數(shù)902387A5H存放在DATA1為首的內(nèi)存單元中,加數(shù)27BCB400H存放在DATA2為首的內(nèi)存單元中。要求結(jié)果存放在DATA3為首的單元中。MOVAX,DATA1ADDAX,DATA2MOVDATA3,AXMOVAX,DATA1+2ADCAX,DATA2+2MOVDATA3+2,AX該指令對標(biāo)志位的影響與ADD指令對標(biāo)志位的影響相同。圖3-16雙精度字算術(shù)運(yùn)算示意圖看書例(3)INC加1指令指令格式:INCdst指令功能:dst←(dst)+1其操作數(shù)可以是通用寄存器,也可以是存儲器。例如:INCALINCCXINCMEM_WORD[BX]在循環(huán)程序中常用于修改地址指針和循環(huán)次數(shù)等。該指令執(zhí)行結(jié)果對標(biāo)志位AF、OF、PF、SF和ZF有影響,而對CF位不產(chǎn)生影響.如在執(zhí)行INCBL指令前,BL=0FFH,執(zhí)行后BL=00H,但不影響CF的值。2.減法指令(5條)(1)不帶借位的減法指令指令格式:SUBdst,src指令功能:dst←(dst)-(src)源操作數(shù)src:可以是累加器、通用寄存器、存儲器、立即數(shù);目的操作數(shù)dst:可以是累加器、通用寄存器、存儲器。指令執(zhí)行后對各狀態(tài)標(biāo)志位OF、SF、ZF、AF、PF和CF均可產(chǎn)生影響。

(2)帶借位的減法指令指令格式:SBBdst,src指令功能:dst←(dst)-(src)-CF該指令與SUB相類似,只不過在兩個操作數(shù)相減時,還應(yīng)減去借位標(biāo)志CF的當(dāng)前值。這條指令主要用于雙精度(雙字長)以及多字節(jié)的減法運(yùn)算。

該指令對標(biāo)志位AF、CF、OF、PF、SF和ZF都將產(chǎn)生影響。

(3)DEC減1指令指令格式:DECdst指令功能:dst←(dst)-1所用的操作數(shù)可以是寄存器,也可以是存儲器。在相減時,把操作數(shù)看作為無符號的二進(jìn)制數(shù)。該指令執(zhí)行結(jié)果將影響標(biāo)志位AF、OF、PF、SF和ZF,但對CF標(biāo)志不產(chǎn)生影響,例如:

MOVAX,0000H;AX=0000HDECAX;AX=FFFFH,ZF=0,OF=0,SF=1,PF=1,AF=1,CF不變(4)NEG求補(bǔ)指令指令格式:NEGdst指令功能:dst←0-(dst)

或dst←(dst)取反+1例如:NEGALNEGWORDPTR[SI]

如果操作數(shù)為0時,求補(bǔ)運(yùn)算的結(jié)果使CF=0,其余情況CF=1;當(dāng)操作數(shù)的值為-128(16進(jìn)制數(shù)為80H)或者一32768(16進(jìn)制數(shù)為8000H)執(zhí)行求補(bǔ)指令后,溢出標(biāo)志OF=1,其余情況均為0.(5)比較指令指令格式:CMPdst,src指令功能:(dst)-(src)該指令執(zhí)行減法操作,不保存相減的結(jié)果。指令執(zhí)行后兩操作數(shù)的內(nèi)容不變,但相減的結(jié)果影響標(biāo)志位AF、CF、OF、PF、SF、ZF。在程序設(shè)計時,比較指令后一般緊跟條件轉(zhuǎn)移指令。例如:MOVBX,4336HCMPBX,0136JCDISP如何利用狀態(tài)標(biāo)志來判斷兩操作數(shù)的關(guān)系呢?下面分三種情況來分析。1)兩個操作數(shù)相等如果所比較的兩個操作數(shù)相等時,那么標(biāo)志位ZF=1,所以根據(jù)ZF就可以判斷兩數(shù)是否相等。2)兩個操作數(shù)不等兩個無符號數(shù)的比較無符號數(shù)相減時,CF就是借位標(biāo)志。如果CF=0,表示無借位,即被減數(shù)大,減數(shù)小。如果CF=1,表示有借位,即被減數(shù)小,減數(shù)大。

兩個有符號數(shù)的比較(1)A、B同號:A>0,B>0或A<0,B<0,此時A-B不會溢出(OF=0),因而只需判斷SF的值即可。當(dāng)A>=B時,SF=0,反之,SF=1。(2)A、B異號:

A>0,B<0或A<0,B>0,A-B有可能會溢出,分兩種情形討論:當(dāng)無溢出(OF=0),A>=B時,SF=0,否則SF=1;當(dāng)有溢出(OF=1),A>=B時,SF=1,否則SF=0[A+B]補(bǔ)=[A]補(bǔ)+[B]補(bǔ),[A-B]補(bǔ)=[A]補(bǔ)+[-B]補(bǔ)兩個有符號的比較時,同符號數(shù)相比較,相減的結(jié)果不會超出帶符號數(shù)的表示范圍,即不會產(chǎn)生溢出,OF=0;兩個不同號的帶符號數(shù)比較,相減的結(jié)果有可能產(chǎn)生溢出。這時可以用如下結(jié)論判斷:當(dāng)OF⊕SF=0時,A>=B;當(dāng)OF⊕SF=1時,A<B.例:CMP

AL,0 ;AL和0進(jìn)行比較

JGE

NEXT ;若AL≥0則轉(zhuǎn)到NEXT執(zhí)行

例若自BLOCK開始的內(nèi)存緩沖區(qū)中,有100個帶符號的數(shù),希望找到其中最大的一個值,并將它放到MAX單元中。

MOV

SI,OFFSETBLOCK MOV AL,[SI] INC SI MOV CX,99AGAIN:CMP AL,[SI] JG NEXT MOV AL,[SI]NEXT:INC SI DEC CX JNE AGAIN MOV MAX,AL HLT 循環(huán)初始化循環(huán)內(nèi)容循環(huán)控制(1)無符號數(shù)乘法指令MUL指令格式:MULsrc指令功能:若src為字節(jié)數(shù)據(jù),則執(zhí)行AX←AL×(src);

若src為字?jǐn)?shù)據(jù),則執(zhí)行DX、AX←AX×(src)3.乘法指令(2條)目的操作數(shù)為:AL或AX(隱含給出)源操作數(shù)為:通用寄存器、存儲器。不能為立即數(shù)和段寄存器。

例:MOVAX,0FFFFHMOVBX,0010HMULBL;BL=10H,AX=0FF0H,CF=1,OF=1例:MOVAX,0FFFHMOVBX,0010HMULBX;BX=0010H,DX=0000H,AX=FFF0H,CF=0,OF=0MUL指令對狀態(tài)標(biāo)志SF、ZF、AF、PF不影響,

CF、OF由運(yùn)算結(jié)果來確定。當(dāng)乘積結(jié)果的高半部分為零時(字節(jié)操作的AH,字操作的DX),CF和OF均為0,否則均為1。(2)帶符號數(shù)乘法指令I(lǐng)MUL指令格式:IMULsrc指令功能:若src為字節(jié)數(shù)據(jù),則執(zhí)行AX←(AL)×(src)

若src為字?jǐn)?shù)據(jù),則執(zhí)行DX、AX←(AX)×(src)目的操作數(shù)為:AL或AX(隱含給出)源操作數(shù)為:通用寄存器、存儲器。不能為立即數(shù)和段寄存器。IMUL指令對CF、OF有影響。當(dāng)乘積結(jié)果的高半部分是低半部分的符號擴(kuò)展時,二者均為0,否則均為1。例見P54。(1)無符號數(shù)除法指令DIV指令格式:DIVsrc指令功能:src為8位:AL(商)←(16位)÷(8位)AH(余數(shù))←(16位)÷(8位)

且被除數(shù)在AX中;

src為16位:AX(商)←(32位)÷(16位)DX(余數(shù))←(32位)÷(16位)

且被除數(shù)在AX與DX中。4.除法指令(4條)例如:在存儲器中有X和Y兩個單元,存有無符號數(shù),現(xiàn)要求完成X/Y,將商存入Z單元。執(zhí)行的指令如下:

MOVAL,XMOVAH,0DIVYMOVZ,AL(2)IDIV帶符號數(shù)除法指令指令格式:IDIVsrc指令操作:與DIV指令相同,但被除數(shù)、除數(shù)、商、余數(shù)全部均為帶符號數(shù),且余數(shù)的符號位同被除數(shù)。說明:(1)、如果是一個雙字除以一個字,即進(jìn)行(32位)÷(16位),則商的范圍為-32768~32767;(2)、如果是一個字除以一個字節(jié),即進(jìn)行(16位)÷(8位),則商的范圍為-128~127。運(yùn)算結(jié)果超出了表示范圍,那么會作為除數(shù)為0的情況來處理,即產(chǎn)生0號中斷。(3)CBW字節(jié)轉(zhuǎn)換為字指令指令格式:CBW指令功能:AL中的符號位擴(kuò)展到AH中。若AL中的D7=0,則(AH)=00H;若AL

的D7=1,則(AH)=FFH。例:MOVAL,-16;AL=0F0H(-16)

CBW;AX=0FFF0H(-16)符號擴(kuò)展指令擴(kuò)展帶符號數(shù)的字節(jié)數(shù)為16位或者32位(4)CWD字轉(zhuǎn)換為雙字指令指令格式:CWD指令功能:AX中的符號位擴(kuò)展到DX中。若AX中的D15=0,則(DX)=0000H;

若AX的D15=1,則(DX)=FFFFH。例:MOVAL,-16;AL=0F0H(-16)

CBW;AX=0FFF0H(-16)

CWD;

DXAX=0FFFFFFF0H(-16)加法減法乘法除法ADDSUBMULDIVADCSBBIMULIDIVINCDECCMPNEG算術(shù)運(yùn)算類指令小結(jié)符號擴(kuò)展指令:CBW和CWD例:編程實現(xiàn)[v-(x*y+z-540)]/x。假設(shè)x,y,z,v均為16位的有符號數(shù),而且x,y,z在相應(yīng)的內(nèi)存單元中,要求:將上式計算結(jié)果的商存入AX,余數(shù)存入DX。

MOV

AX,x IMUL y;x*y MOV CX,AX MOV BX,DXMOV AX,Z CWD ADDCX,AXADCBX,DX;x*y+z SUB CX,540 SBB BX,0;x*y+z-540 MOV AX,vCWDSUBAX,CXSBBDX,BX;v-(x*y+z-540)MOVCX,xIDIVCX ;[v-(x*y+z-540)]/x1.邏輯運(yùn)算指令8086邏輯運(yùn)算指令包括AND(與)OR(或)

NOT(非)

XOR(異或)指令

TEST(測試)指令3.2.3位操作指令(包括邏輯運(yùn)算和移位指令)(1)AND邏輯“與”指令指令格式:ANDdst,src指令功能:dst←(dst)∧(src)特點:只有參加相與的兩位全為“1”時,相“與”結(jié)果才為“1”,否則相“與”結(jié)果為“0”。相“與”結(jié)果送回目的操作數(shù)。

AND指令可以進(jìn)行字節(jié)操作,也可以進(jìn)行字操作。目的操作數(shù):可以是累加器,也可以是通用寄存器,也可以是存儲器。源操作數(shù):可以是立即數(shù)、寄存器,也可以是存儲器。且二者不能同時為存儲器操作數(shù)。所以AND[BX],[BX]是錯誤的。用途:某一個操作數(shù),如果自己與自己相“與”,操作數(shù)不變,但可以使進(jìn)位標(biāo)志位CF清0。

例:ANDAL,AL;

AL中的內(nèi)容不變,CF=0。

要將寄存器某些位屏蔽,可用AND指令。例:ANDAL,OFCH;把AL中的第0、1位屏蔽。對標(biāo)志寄存器的影響:該指令執(zhí)行以后,標(biāo)志位CF=0,OF=0。標(biāo)志位PF、SF、ZF反映運(yùn)算的結(jié)果,而標(biāo)志位AF未定義。

(2)OR邏輯“或”指令指令格式:OROPRDl,OPRD2指令功能:OPRD1←(OPRD1)∨(OPRD2)特點:只要參加相“或”的兩位中任一位為“1”時,相“或”結(jié)果為“1”,如果兩位都為0時,其結(jié)果才為0。

OR指令可以進(jìn)行字節(jié)操作,也可以進(jìn)行字操作。目的操作數(shù)OPRDl:可以是累加器、通用寄存器、也可以是存儲器。源操作數(shù)OPRD2:可以是立即數(shù)、寄存器,也可以是存儲器。且二操作數(shù)不能同時為存儲器。對標(biāo)志位的影響:OF=CF=0,SF、ZF、PF標(biāo)志反映運(yùn)算結(jié)果。用途:用或指令可以使操作數(shù)的某些位置1,其他位則保持不變。例如:ORAL,20H;把AL中的第5位置1

邏輯“或”有時又稱為邏輯“加”。例如:MOVAL,60HMOVBL,08HORAL,BL

結(jié)果AL為68H。(3)NOT邏輯求反指令指令格式:NOTdst指令功能:dst←dst

該指令對操作數(shù)進(jìn)行求反操作,然后將結(jié)果送回。操作數(shù)可以是寄存器或存貯器的內(nèi)容。該指令對標(biāo)志位不產(chǎn)生影響。例如:

MOVAL,8FHNOTAL

兩條指令執(zhí)行后AL=70H。

(4)XOR邏輯“異或”指令指令格式:XOROPRDl,OPRD2指令功能:OPRD1←(OPRD1)⊕(OPRD2)特點:只有參加相“異或”的兩位值不同時,其結(jié)果為“1”;否則就為0。

XOR指令可以進(jìn)行字節(jié)操作,也可以進(jìn)行字操作。目的操作數(shù)OPRDl:可以是累加器、通用寄存器,也可以是存儲器。源操作數(shù)OPRD2:可以是立即數(shù)、寄存器,也可以是存儲器。且二操作也不能同時為存儲器操作數(shù)。對標(biāo)志位的影響:標(biāo)志位CF=0,OF=0,標(biāo)志位PF、SF,ZF將反映“異或”操作的結(jié)果。標(biāo)志AF未定義。用途:要使操作數(shù)的某些位變反可以使用XOR指令,只要把源操作數(shù)中立即數(shù)字段的相應(yīng)位置1就可以達(dá)到目的。例如:求AL內(nèi)容第0、1、2三位變反

XORAL,7

指令功能:對AL中的0、1、2位求反。

XOR指令多用于檢測數(shù)據(jù)位的變化,兩個數(shù)據(jù)輸入相同,則輸出為零,否則,輸出為1。指令執(zhí)行后可使寄存器清零。例如:XORAX,AXXORSI,SI(5)TEST測試指令指令格式:TESTdst,src;指令功能:(dst)∧(src)

該指令的操作功能與AND指令相同,其結(jié)果將反映在標(biāo)志位上,但結(jié)果不送回。對標(biāo)志位的影響:OF=CF=0,SF、ZF、PF標(biāo)志反映運(yùn)算結(jié)果。用途:利用該指令,可以在不改變原有操作數(shù)的情況下,用來檢測某一位或某幾位是“0”不是“1”。編程時作為條件轉(zhuǎn)移指令的先行指令。例如:若要檢測AL中的最高位是否為1,且為1時則轉(zhuǎn)移。在這種情況下可以用如下指令:

TESTAL,80HJNZTHERE

┇THERE:MOVBL,05H例:見書P59關(guān)于AND、OR、XOR指令的使用口訣:某位和1“與”不變,和0“與”則清零;某位和1“或”為1,和0“或”則不變;某位和1“異或”則求反,和0“異或”則不變。2.移位指令

SAL/SHL算術(shù)左移和邏輯左移指令

SAR算術(shù)右移指令

SHR邏輯右移指令

ROL不帶進(jìn)位的循環(huán)左移指令

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

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

RCR帶進(jìn)位的循環(huán)右移指令shiftrotate(1)SAL算術(shù)左移(ShiftArithematicLeft)和SHL邏輯左移(ShiftLogicLeft)指令指令格式:SAL/SHLOPRD,CL/1指令功能:這兩條指令的操作結(jié)果是完全一樣的,將目的操作數(shù)OPRD中的二進(jìn)制數(shù)向左移動1位或按CL寄存器中指定的位數(shù)。左移一位時,操作數(shù)的最高位移出送到CF中,同時最低位送0。圖3-17算術(shù)左移/邏輯左移目的操作數(shù)OPRD:可以是累加器、寄存器、也可是存儲器。目的操作數(shù)可以是8位,也可以16位。對標(biāo)志位的影響:除AF任意外,操作結(jié)果影響CF、PF、ZF、SF、OF用途:利用左移1位操作可實現(xiàn)操作數(shù)乘2的運(yùn)算。例如:SHLAL,1MOVCL,4SHLAL,CL利用左移一位操作,通過CF可判斷一個數(shù)是正數(shù)還是負(fù)數(shù)。(2)SAR算術(shù)右移指令(ShiftArithematicRight)

指令格式:SAROPRD,CL/1指令功能:該指令每執(zhí)行一次移位操作,就使操作數(shù)右移一位,但符號位保持不變,而最低位移至標(biāo)志位CF,目的操作數(shù)可以是8位,也可以16位。

例如:MOVAH,5AHSARAH,1

指令執(zhí)行完后,(AH)=2DH,CF=0用途:可保持目的操作數(shù)的符號位不變,用于有符號數(shù)移位。(3)SHR邏輯右移指令(ShiftLogicRight)

指令格式:SHROPRD,CL/1指令功能:該指令每執(zhí)行一次移位操作,就使操作數(shù)右移一位,左面的最高位將補(bǔ)0,最低位移至標(biāo)志位CF中。目的操作數(shù)可以是8位,也可以16位。

例如:MOVBL,4EHSHRBL,1

指令執(zhí)行后,(BL)=27H,CF=0

用途:1、可用于截取字節(jié)或字中的某些位。2、右移n位,相當(dāng)于把二進(jìn)制數(shù)除以2n3.循環(huán)移位指令(1)ROL不帶進(jìn)位的循環(huán)左移指令(RotateLeft)指令格式:ROLOPRD,CL/1指令功能:左移一位時,操作數(shù)的最高位移出送到CF中,同時送至最低位。目的操作數(shù)可以是8位,也可以16位。

例如:MOVAL,5BHROLAL,1指令執(zhí)行完后,(AL)=B6H,CF=0(2)ROR不帶進(jìn)位的循環(huán)右移指令(RotateRight)指令格式:ROROPRD,CL/1指令功能:右移一位時,操作數(shù)的最低位移出送到CF中,同時送至最高位。目的操作數(shù)可以是8位,也可以16位。

例如:MOVAL,6BHROLAL,1

指令執(zhí)行完后,(AL)=B5H,CF=1(3)RCL帶進(jìn)位的循環(huán)左移指令

(RotatethroughCFLeft)指令格式:RCLOPRD,CL/1指令功能:左移一位時,操作數(shù)的最高位移出送到CF中,而原來的CF位送至最低位。目的操作數(shù)可以是8位,也可以16位。

例如:RCLAL,1

執(zhí)行指令前AL=4CH,CF=1

則指令執(zhí)行后,(AL)=99H,CF=0(4)RCR帶進(jìn)位的循環(huán)右移指令

(RotatethroughCFRight)指令格式:RCROPRD,CL/1指令功能:右移一位時,操作數(shù)的最低位移出送到CF中,而原來的CF位送至最高位。

例如:RCRAL,1

執(zhí)行指令前AL=5CH,CF=1

則指令執(zhí)行完后,(AL)=AEH,CF=03.2.4串操作指令準(zhǔn)備工作包括:

源(讀出)存儲區(qū)首地址放入DS:SI

目的(寫入)存儲區(qū)首地址放入ES:DI

串的長度放在CX寄存器中根據(jù)需要建立方向標(biāo)志位DF的值。(控制DF方向的指令:CLD和STD)1、MOVS(MoveString)串傳送指令指令格式:MOVSOPRD1,OPRD2MOVSB;字節(jié)傳送

MOVSW;字傳送指令功能:((DI))←((SI))字節(jié)操作SI←(SI)

1;DI←(DI)

1;字操作SI←(SI)

2;DI←(DI)

2;該類指令執(zhí)行時,將把當(dāng)前數(shù)據(jù)段中用SI指針指出的源串的一個字節(jié)或者一個字傳送到DI指針指向的附加段的目的地址中去,并根據(jù)DF的值來確定串傳送的方向。2、LODS(LoadString)串裝入指令(讀串)指令格式LODSOPRD1,OPRD2LODSB;字節(jié)傳送

LODSW;字傳送指令功能:字節(jié)操作AL←((SI))

SI←(SI)

1

字操作AX←((SI))

SI←(SI)

2

該類指令是字串裝入指令。它將由SI所指定的源串字節(jié)或字裝入到累加器AL或AX中去,并根據(jù)DF的值修改指針SI,以指向下一個要裝入的字節(jié)或字。

3、STOS(StoreString)串存儲指令(寫串)指令格式:STOSOPRD1,OPRD2STOSB;字節(jié)存儲

STOSW;字存儲指令功能:字節(jié)操作((DI))←(AL)

DI←(DI)

1

字操作((DI))←AXDI←(DI)

2

該類指令是字串存貯指令。它將AL或AX中的字節(jié)或字存貯到由DI所指定的附加段中去,且根據(jù)DF的值來修改DI的值。4、CMPS(CompareString)串比較指令指令格式:CMPSOPRD1,OPRD2CMPSB;字節(jié)比較

CMPSW;字比較指令功能:((SI))-((DI))字節(jié)操作SI←(SI)

1;DI←(DI)

1;字操作SI←(SI)

2;DI←(DI)

2;

該類指令執(zhí)行時,將當(dāng)前數(shù)據(jù)段由SI所指出的字節(jié)和字同當(dāng)前附加段中由DI所指出的目的串的字節(jié)或字進(jìn)行比較,把比較結(jié)果送標(biāo)志位。該指令對操作數(shù)不產(chǎn)生影響。

5、SCAS(ScansString)串掃描指令指令格式:SCASOPRD1,OPRD2SCASB;字節(jié)掃描

SCASW;字掃描指令功能:字節(jié)操作AL-((DI))

DI←(DI)

1;字操作AX-((DI))

DI←(DI)

2;

該類指令是串掃描指令,用于尋找內(nèi)存區(qū)中指定的數(shù)據(jù)和字符。指令執(zhí)行時,AL/AX的值減去(ES:DI)存儲單元的內(nèi)容,ZF=1,內(nèi)容相同,否則不同,結(jié)果將改變標(biāo)志位,但不改變操作數(shù)的值。

為解決對CX的控制,采用兩種方法:在程序中用“DECCX”或LOOP指令將數(shù)據(jù)長度減1,用以控制整個數(shù)據(jù)串的處理。使用指令前綴。所謂指令前綴,是寫在串指令之前的、用以控制整個串?dāng)?shù)據(jù)處理的前綴。它不能單獨成為指令而被執(zhí)行。指令前綴有3種,它們分別與不同串指令結(jié)合在一起使用,以達(dá)到控制的目的。(1)重復(fù)前綴REP重復(fù)串操作直到CX=0為止。格式:REPstringprimitive其中stringprimitive可為MOVS,LODS或STOS指令。執(zhí)行操作:①如CX=0則退出REP,否則繼續(xù)執(zhí)行;②CX←CX-1;③執(zhí)行其后的串指令;④重復(fù)①~③。6、指令前綴(2)重復(fù)前綴REPE/REPZ相等或為零時重復(fù)操作指令格式為:REPE/REPZstringprimitive其中stringprimitive可為CMPS指令。執(zhí)行的操作:①如CX=0或ZF=0(即某次比較的結(jié)果兩個操作數(shù)不等)時退出,否則繼續(xù)執(zhí)行;②CX←CX-1;③執(zhí)行其后的串指令;④重復(fù)①~③。

(3)重復(fù)前綴REPNE/REPNZ不相等或不為零時重復(fù)操作指令格式為:REPNE/REPNZstringprimitive其中stringprimitive可為SCAS指令。執(zhí)行的操作:①如CX=0或ZF=1(即某次比較的結(jié)果兩個操作數(shù)相等)時退出,否則繼續(xù)執(zhí)行;②CX←CX-1;③執(zhí)行其后的串指令;④重復(fù)①~③。

例如:將1000個字符的字符串從內(nèi)存的BUFFERl搬移到內(nèi)存的BUFFER2中去。

MOVSI,OFFSETBUFFERl;

MOVDI,OFFSETBUFFER2;

MOVCX,1000;

CLDREPEMOVSB;注意,上述程序中的BUFFERl應(yīng)處于DS段中,而BUFFER2應(yīng)處于ES段中。上面的程序還可以寫成:

MOVCX,1000CLDLEASI,BUFFERlLEAD1,BUFFER2NEXT:MOVSBLOOPNEXT

例:判斷上例中已傳送好的數(shù)據(jù)串有無傳送錯誤。CLDLEADI,OFFSETBUFFER2LEASI,OFFSETBUFFER1MOVCX,1000REPECMPSBJNZNEXTMOVAL,0JMPDONENEXT:MOVAL,0FFH……DONE:例:在數(shù)據(jù)段定義首地址為A的10個字符,將這10個字符以相反次序傳送到附加段首地址為B的內(nèi)存單元中。編寫程序如下:

LEASI,A

LEADI,B

ADDDI,9

MOVCX,10MOVE:CLD

LODSB

STD

STOSB

LOOPMOVE1.無條件轉(zhuǎn)移指令(跳轉(zhuǎn)指令),以JMP作為助記符。無條件轉(zhuǎn)移指令使程序離開原程序位置而跳轉(zhuǎn)到JMP指令指定的另一個程序位置去執(zhí)行。(1)段內(nèi)直接短轉(zhuǎn)移指令格式:JMPSHORTOPR指令功能:IP←(IP)+8位偏移量其中OPR為轉(zhuǎn)移目標(biāo)地址,可直接使用符號地址,SHORT為屬性運(yùn)算符,指示匯編程序?qū)⒌刂穮R編成8位偏移量,范圍在-128~+127之內(nèi)。

3.2.5程序控制指令(5種)例:AA:JMPSHORTNEXT…NEXT:MOVAX,1234H…目的地址NEXT與源地址AA下一條指令之間保持在-128到+127范圍內(nèi)。(2)段內(nèi)直接近轉(zhuǎn)移指令格式:JMPNEARPTROPR指令功能:IP←(IP)+16位偏移量其中OPR為轉(zhuǎn)移目標(biāo)地址,可直接使用符號地址,又稱標(biāo)號。NEARPTR為屬性運(yùn)算符,指示匯編程序?qū)⒌刂穮R編成16位偏移量,范圍在64K之內(nèi)。例:AA:JMPNEARPTRNEXT…NEXT:MOVAX,1234H…目的地址NEXT與源地址AA下一條指令之間保持在正負(fù)32KB范圍內(nèi)。(3)段內(nèi)間接轉(zhuǎn)移指令格式:JMPWORDPTROPRD指令功能:IP←(EA)OPRD的有效地址由尋址方式?jīng)Q定。OPRD為除立即數(shù)以外的任何一種尋址方式,寄存器尋址,把寄存器中的內(nèi)容送到IP中;存儲器尋址,把存儲器單元的內(nèi)容給IP指針??梢灾苯拥卣f,段內(nèi)間接轉(zhuǎn)移,其轉(zhuǎn)移地址在寄存器中或存儲器中。例如:MOVCX,2000HJMPCX(4)段間直接轉(zhuǎn)移指令格式:JMPFARPTROPR指令功能:IP←OPR的段內(nèi)偏移地址

CS←OPR所在段的段基址(5)段間間接轉(zhuǎn)移指令格式:JMPDWORDPTROPR功能:

IP←(EA)CS←(EA+2)段間轉(zhuǎn)移時,目的地址與JMP指令所在地址不在同一段內(nèi)。執(zhí)行該指令

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論