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

下載本文檔

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

文檔簡介

第3章指令系統(tǒng)微機(jī)原理與接口技術(shù)1

指令格式2

尋址方式3

機(jī)器碼表示4

數(shù)據(jù)傳送指令第3章指令系統(tǒng)5

算術(shù)運(yùn)算指令總目錄6

邏輯運(yùn)算和移位指令7

串操作指令8

程序控制指令9

處理器控制指令第3章指令系統(tǒng)§3.1指令格式

1、操作碼

2、操作數(shù)

3、尋址方式4、指令5、指令系統(tǒng)

§3.1指令格式1、操作碼

是指令操作功能的記述。2、操作數(shù)指出指令執(zhí)行的操作所需要數(shù)據(jù)的來源。OPCodeOperand§3.1指令格式(續(xù))3、尋址方式就是尋找操作數(shù)或操作數(shù)地址的方式。

MOV AX,1234H ;B83412MOV AX,[1234H] ;A13412操作碼操作數(shù)指令與指令系統(tǒng)4、指令:

控制計(jì)算機(jī)完成某種操作的命令。指令中應(yīng)包含的信息:運(yùn)算數(shù)據(jù)的來源、運(yùn)算結(jié)果的去向、執(zhí)行的操作。5、指令系統(tǒng):處理器所能識別的所有指令的集合。

§

3.2尋址方式3.2.1三種地址3.2.2尋址方式3.2.3IO端口尋址方式3.2.4轉(zhuǎn)移地址的尋址方式1、邏輯地址LA

2、有效地址EA

3、物理地址PA一、三種地址§3-2尋址方式一、三種地址§3-2尋址方式1、邏輯地址:(LogicalAddress

)2、有效地址:(EffectiveAddress

)指令中給出的操作數(shù)地址叫邏輯地址。以段基值:偏移量形式呈現(xiàn)。如:DS:[BX]在尋址方式中,邏輯地址的形成是由多個(gè)分量組合而成,該組合中的偏移地址又叫有效地址。有效地址EA是一個(gè)16位無符號數(shù),表示操作數(shù)所在單元到段首的距離。即邏輯地址的偏移地址。一、三種地址(續(xù))§3-2尋址方式3、物理地址:(PhysicalAddress

)4、PA的實(shí)際意義:在存儲器里以字節(jié)為單位存儲信息,每一個(gè)字節(jié)單元給以一個(gè)唯一的存儲器地址,稱為物理地址。PA就是,出現(xiàn)在CPU外部地址總線上的尋址物理內(nèi)存的地址信號

目的操作數(shù)和源操作數(shù)均可采用不同的尋址方式;兩個(gè)操作數(shù)的類型必需一致。5、MOV數(shù)據(jù)傳送指令格式:MOVdest,source目的

源二、尋址方式

1、立即尋址

2、寄存器尋址

3、直接尋址4、寄存器間接尋址5、寄存器相對尋址6、基址加變址尋址7、相對的基址加變址尋址二、尋址方式(續(xù))1.立即尋址(Immediateaddressing)

操作數(shù)就在指令中,緊跟在操作碼后面,作為指令一部分存放在內(nèi)存的代碼段中,這種操作數(shù)稱為立即數(shù)。例: MOV AX,34EAH;B8EA34 MOV BL,20H ;B320

立即數(shù)只能作為源操作數(shù)立即數(shù)可以是無符號或帶符號數(shù),其數(shù)值應(yīng)在可取值范圍內(nèi)圖3.2立即尋址例如: MOV AL,80H MOV AX,1090H MOV EAX,12345678H2、寄存器尋址(Registeraddressing)

操作數(shù)在寄存器中,指令中源操作數(shù)和目的操作數(shù)都可用這種尋址方式。例:MOV AL,BL ;88D8MOV AX,1234H ;B83412MOV AL,AH ;88E02、寄存器尋址(續(xù))32位: EAX、EBX、ECX、EDX、 ESI、EDI、ESP、EBP

8位:AH、AL、BH、BL、CH、CL、DH、DL16位:AX、BX、CX、DX、SI、DI、SP、BP存儲器尋址 在大多數(shù)情況下,操作數(shù)在存儲器中。 有效地址(EffectiveAddress)

EA=基址+變址×比例因子+位移量3、直接尋址(Directaddressing)

當(dāng)指令中的源操作數(shù)或目的操作數(shù),采用直接給出被訪問內(nèi)存單元的邏輯地址時(shí),這種尋址方式稱直接尋址。 例:MOV AX,[2100H] ;A10021MOV [1234H],AL ;A23412

MOVAX,[2000H]有效地址EA=2000H

其過程如圖3.3所示。指令中的16位段內(nèi)偏移地址的低字節(jié)在前,高字節(jié)在后。圖3.3直接尋址兩個(gè)概念段超越:MOV AX,[3E4CH] MOV AX,ES:[3E4CH] 符號地址:MOV AX,RESULT 4、寄存器間接尋址(Registerindirectaddressing)

內(nèi)存單元的邏輯偏移地址通過寄存器間接給出。

MOV AX,[BX]MOV AX,[SI]MOV AX,[DI]MOV AX,[BP]由寄存器間接給出操作數(shù)的偏移地址;存放偏移地址的寄存器稱為間址寄存器,它們是:BX,BP,SI,DI操作數(shù)的段地址(數(shù)據(jù)處于哪個(gè)段)取決于選擇哪一個(gè)間址寄存器:4、寄存器間接尋址BP默認(rèn)在堆棧段SSBX,SI,DI默認(rèn)在數(shù)據(jù)段DS例:MOVAX,[SI]其過程如圖3.5(a)所示。例:MOVAX,[BP]其過程如圖3.5(b)所示。圖3.5寄存器間接尋址5、寄存器相對尋址(RegisterRelativeAddressing)

這種尋址方式中提出位移量的概念,即在寄存器間接尋址給出的偏移地址上,加一相對位移量。EA=+DISP

[BP]

[BX]EA=+DISP

[DI]

[SI]5、寄存器相對尋址(續(xù))當(dāng)使用BX或BP寄存器時(shí),稱基址尋址。使用SI或DI寄存器時(shí),稱變址尋址。例:MOVCX,[BX+36H]MOV[BP-20

],ALDISP可以為8位、16位或32位補(bǔ)碼。

在一般情況下,若用BX、SI或DI進(jìn)行相對尋址時(shí),以數(shù)據(jù)段寄存器DS作為地址基準(zhǔn)。 而用BP尋址時(shí),則以堆棧段寄存器作為地址基準(zhǔn)。例:MOVAX,DISP[SI]其過程如圖3.6所示。圖3.6寄存器相對尋址

6、基址加變址尋址(BasedIndexedaddressing)

將基址寄存器和變址寄存器聯(lián)合起來進(jìn)行的尋址就稱為基址加變址尋址。EA=+

[BP][DI]

[BX][SI]BXBPSIDI基址寄存器變址寄存器EA=基址+變址

同理,若用BX作為基地址,則操作數(shù)應(yīng)放在數(shù)據(jù)段DS區(qū)域中; 若用BP作為基地址,則操作數(shù)應(yīng)放在堆棧段SS區(qū)域中。

例:MOV AX,[BX][SI]其過程如圖3.7所示。圖3.7基址、變址尋址

7、相對的基址加變址尋址

(BasedIndexedaddressing)

它的EA是由三部分組成的,基址寄存器BX或BP的內(nèi)容加上變址寄存器的內(nèi)容再加位移量。物理地址由基址寄存器按規(guī)則選擇段寄存器,也可以使用段超越。例:MOV AX,8AH[BX][SI]該例中EA=BX+SI+8AHPA=DS×10H+BX+SI+8AH

7.相對的基址加變址尋址(續(xù))

基址、變址、相對尋址方式實(shí)際上是第6種尋址方式的擴(kuò)充。 即操作數(shù)的地址是由基址、變址方式得到的地址再加上由指令指明的8位或16位的相對位移地址而得到的。

EA=++

[BP][DI]位移量

[BX][SI]8位或16位例:MOVAX,DISP[BX][SI]其過程如圖3.8所示。圖3.8基址、變址、相對尋址[]的使用規(guī)定立即數(shù)在[]中表示直接地址,如[1000H];[]有相加的意思,下面幾種寫法是等價(jià)的

6[BX][SI],[BX+6][SI],[BX+SI+6];只有BX,BP,SI,DI可以出現(xiàn)在[]內(nèi),表示間接地址。它們可以單獨(dú)出現(xiàn),也可以組合。但BX和BP不允許出現(xiàn)在同一個(gè)[]中,SI和DI也一樣;若[]中含BP,則隱含使用SS來提供段基址,其它均隱含用DS。均可以段超越。

在指令中沒有明顯的標(biāo)出,而指定寄存器參加操作,稱之為“隱含尋址”。 DAA MUL BL PUSH AXPOP CX . .

.

8、隱含尋址在有些指令的指令碼中,不僅包含有操作碼信息,而且還隱含了操作數(shù)地址的信息。例如乘法指令MUL的指令碼中只需指明一個(gè)乘數(shù)的地址,另一個(gè)乘數(shù)和積的地址是隱含固定的。這種將操作數(shù)的地址隱含在指令操作碼中的尋址方式稱為隱含尋址。

8.隱含尋址(續(xù))9.相對的帶比例因子的變址尋址 即操作數(shù)的EA地址是由變址寄存器之值乘以比例因子后,再加上由指令指明的8位或16位的相對位移量而得到的。 比例因子為1、2、4、8。方便處理: 字節(jié)、字、雙字和四字?jǐn)?shù)據(jù)。 EA=變址×比例因子+位移量 例如: IMUL EBX,[ESI*4+07H]10.基址加比例因子的變址尋址 即操作數(shù)的EA地址是由基址寄存器內(nèi)容,與變址寄存器之值乘以比例因子的乘積之和而得到的。 EA=基址+變址×比例因子 例如:

MOV EAX,[EBX][ESI*4]

MOV ECX,[EDI*8][EAX]11.相對的基址加比例因子的變址尋址 即操作數(shù)的EA地址是由基址寄存器內(nèi)容,與變址寄存器之值乘以比例因子的乘積之和,再加上由指令指明的8位或16位的相對位移量而得到的。

EA=基址+變址×比例因子+位移量

例如:

MOV EAX,[EBX][ESI*4+1200H]

MOV EAX,[EDI*4][EBP+80]作業(yè)訂正1.若CS=A000H,求當(dāng)前代碼段在存儲器中的物理地址范圍是什么?若數(shù)據(jù)段位于52000H到61FFFH的64K范圍內(nèi),問DS=?2.若當(dāng)前SS=3500H,SP=0800H,說明堆棧段在存儲器中的物理地址,若此時(shí)入棧10個(gè)字節(jié),SP內(nèi)容是什么?若再出棧6個(gè)字節(jié),SP為什么值?3.某程序數(shù)據(jù)段中存放了兩個(gè)字1EE5H和2A8CH,已知(DS)=7850H,數(shù)據(jù)存放的偏移地址為3121H及285AH。試畫圖說明它們在存儲器中的存放情況。若要讀取這兩個(gè)字,需要對存儲器進(jìn)行幾次操作?三、I/O端口尋址(I/Oportaddressing)

§3-2尋址方式

1、輸入指令例子:

2、輸出指令例子:IN AL,PORTIN AX,PORTOUTPORT,ALOUTPORT,AX三、I/O端口尋址(I/Oportaddressing)

§3-2尋址方式

3、IO指令格式:

4、PORT的兩種尋址方式:IN ACC,PORTOUT PORT,ACC直接尋址:INAL,60H間接尋址:INAL,DX(1)直接尋址輸入輸出指令中直接給出一個(gè)字節(jié)表示的接口地址。

直接地址:8bit

地址范圍:00H~FFH 例如:IN AL,35HOUT 63H,AX(2)寄存器間接尋址輸入輸出指令中接口地址由DX的內(nèi)容來決定。地址位數(shù):16bit

地址范圍:0000H~FFFFH例如:MOV DX,03F8HIN AL,DX

表示由接口地址03F8H輸入一個(gè)字節(jié)到AL。四、轉(zhuǎn)移地址的尋址方式

1、段內(nèi)直接尋址2、段內(nèi)間接尋址3、段間直接尋址4、段間間接尋址四、轉(zhuǎn)移地址的尋址方式(續(xù)1)

(1)、程序轉(zhuǎn)移:

(2)、段內(nèi)轉(zhuǎn)移:

取指令的地址由CS和IP決定。

所謂程序轉(zhuǎn)移,就是修改CS和IP的值。

只修改IP的值就是段內(nèi)轉(zhuǎn)移。四、轉(zhuǎn)移地址的尋址方式(續(xù)2)

(3)、段間轉(zhuǎn)移:

(4)、直接轉(zhuǎn)移和間接轉(zhuǎn)移:

同時(shí)修改CS和IP的值,就是段間轉(zhuǎn)移。

無論段內(nèi)轉(zhuǎn)移還是段間轉(zhuǎn)移都有直接轉(zhuǎn)移和間接轉(zhuǎn)移之分。

§

3.3指令的機(jī)器碼表示方法3.3.1指令格式和數(shù)據(jù)類型3.3.2編碼目的和特點(diǎn)3.3.3指令代碼的編制一、8086的指令格式及數(shù)據(jù)類型

指令由操作碼和操作數(shù)(地址碼)組成。8086的指令長度是可變的,一條指令一般由1-6個(gè)字節(jié)組成。

操作碼操作數(shù)§3.3指令的機(jī)器碼表示方法(續(xù))1.指令格式:2.指令中的操作數(shù)※單操作數(shù)指令

指令助記符指令的16進(jìn)制代碼INCAX;40HINCBX;43H※雙操作數(shù)指令

指令助記符指令的16進(jìn)制代碼MOVAL,04;B004HMOVAX,04;B80400※三個(gè)操作數(shù)指令

8086指令系統(tǒng)中,大多數(shù)指令中只有1-2個(gè)操作數(shù),但也有少數(shù)指令中有3個(gè)操作數(shù),不過有一操作數(shù)隱含在操作碼中。

ADDAX,BX;該指令完成操作數(shù)AX和BX相加。3.指令中的數(shù)據(jù)類型無符號數(shù)

帶符號數(shù)

ASCII碼

BCD數(shù)(壓縮BCD和非壓縮BCD)

§3.3指令的機(jī)器碼表示方法(續(xù))二、機(jī)器語言指令的編碼目的和特點(diǎn)目的:用二進(jìn)制編碼表示各種操作和尋址方式。特點(diǎn):沒有指令與機(jī)器語言的對照表,只有每種基本指令類型的編碼格式。三、機(jī)器語言指令代碼的編制1.寄存器之間或寄存器與存儲器之間數(shù)據(jù)傳送指令的編碼格式R/MREGMOD100010D/p>

操作碼0:數(shù)據(jù)從寄存器傳出1:數(shù)據(jù)傳至寄存器8086寄存器編碼表REGW=1(字)W=0(字節(jié))000011001010100111101110AXBXCXDXSPDIBPSIALBLCLDLAHBHCHDHREG段寄存器01110010CSDSESSSR/MREGMOD100010D/p>

操作碼0:數(shù)據(jù)從寄存器傳出1:數(shù)據(jù)傳至寄存器MODR/M00000101001110010111011100011011[BX]+[SI][BX]+[DI][BP]+[SI][BP]+[DI][SI][DI]D16(直接地址)[BX][BX]+[SI]+D8[BX]+[DI]+D8[BP]+[SI]+D8[BP]+[DI]+D8[SI]+D8[DI]+D8[BP]+D8[BX]+D8[BX]+[SI]+D16[BX]+[DI]+D16[BP]+[SI]+D16[BP]+[DI]+D16[SI]+D16[DI]+D16[BP]+D16[BX]+D16W=0W=1ALAXCLCXDLDXBLBXAHSPCHBPDHSIBHDIR/MREGMOD100010D/p>

操作碼0:數(shù)據(jù)從寄存器傳出1:數(shù)據(jù)傳至寄存器2.立即數(shù)尋址指令的編碼3.包含段寄存器的指令的編碼4.段超越前綴指令的編碼

§

3.4數(shù)據(jù)傳送指令3.4.1數(shù)據(jù)傳送指令3.4.2地址傳送指令3.4.3標(biāo)志傳送指令3.4.4輸入/輸出指令

8086的指令集1、

數(shù)據(jù)傳送類2、

算術(shù)運(yùn)算類3、

邏輯運(yùn)算和移位類4、

串操作類5、

控制轉(zhuǎn)移類6、

處理器控制類8086指令系統(tǒng)按功能可分為6大類型:一、通用數(shù)據(jù)傳送指令將數(shù)據(jù)從一個(gè)部位傳送到另一部位。除POP和SAHF指令外,不影響標(biāo)志寄存器中的狀態(tài)標(biāo)志位。功能:將一個(gè)字節(jié)或一個(gè)字操作數(shù)據(jù)從源傳送至目的地址中,源內(nèi)容保持不變。一、通用數(shù)據(jù)傳送指令1、MOV傳送指令

格式:MOVdest,source目的

源MOV指令的9種形式:REG通用寄存器AXAHBXALCXBHDXBLSPCHBPCLSIDHDIDL段寄存器SSDSESim立即數(shù)MEM存儲器CS①②③④⑤⑥⑦⑧⑨MOV指令的9種形式:MOVREG,im

;立即數(shù)送通用寄存器MOVREG,REG;通用寄存器之間傳送MOVREG,MEM;存儲器送通用寄存器MOVMEM,REG;通用寄存器送存儲器MOVMEM,im

;立即數(shù)送存儲器REGSSDSESimMEMCSMOVREG,SEG;段寄存器送通用寄存器(含CS)MOVMEM,SEG

;段寄存器送存儲器(含CS)MOVSEG,REG;通用寄存器送段寄存器(CS除外)⑨MOVSEG,MEM;存儲器送段寄存器(CS除外)目的操作數(shù)①寄存器REG②存貯器MEM③段寄存器SEG源操作數(shù)①立即數(shù)IM②寄存器REG④段寄存器SEG③存貯器MEM

MOVREG,OPRDOPRD:im,REG,MEM,SEGMOVREG,OPRD

MOVMEM,OPRDOPRD:im,REG,SEG

MOVSEG,OPRDOPRD:REG,MEM格式:MOVREG,im目的

源R------im型①立即數(shù)傳送到通用寄存器

MOVCL,5;ByteMOVAX,03FFH;Word②在寄存器之間傳送數(shù)據(jù)。

MOVAL,BL ;Byte MOVAX,DX ;WordMOVSI,BP ;Word格式:MOVREG,REG目的

源R------R型格式:MOVREG

,MEM目的

源R------M型③存貯器單元的數(shù)傳遞到寄存器(除了CS和IP以外)中。

MOVAL,NUMBER;BYTEMOVDX,[SI] ;WORD

格式:MOVMEM,REG目的

源M------R型④寄存器(除了IP以外)中數(shù)傳遞到存貯器單元中。

MOVBUFFER,AL;BYTEMOV[DI],CX ;WORD

格式:MOVMEM,im目的

源M------im型⑤立即數(shù)傳送到存儲單元

MOVBYTEPTR[BX],04H;ByteMOVWORDPTR[SI],03FFH;Word注意:立即數(shù)只能出現(xiàn)在源操作數(shù)位置使用中需要注意的是:①M(fèi)OV指令不能在兩個(gè)存貯器單元之間進(jìn)行數(shù)據(jù)直接傳送。②MOV指令不能在兩個(gè)段寄存器之間進(jìn)行數(shù)據(jù)直接傳送。③立即數(shù)不能直接傳送給段寄存器。④目的操作數(shù)不能為CS、IP。

其中,①~③的傳送可用通用寄存器作為中介,用兩條傳送指令完成。例如,為了將在同一個(gè)段內(nèi)的偏移地址為AREA1的數(shù)據(jù)傳送到偏移地址為AREA2單元中去,可執(zhí)行以下兩條傳送指令:MOVAL,AREA1MOVAREA2,AL例如,為了將立即數(shù)傳送給DS,可執(zhí)行以下兩條傳送指令:MOVAX,1000HMOVDS,AX

例如,將以AREA1為首地址的100個(gè)字節(jié)數(shù)據(jù)搬移到以AREA2為首地址的內(nèi)存中,若AREA1和AREA2都在當(dāng)前數(shù)據(jù)段中,可以用帶有循環(huán)控制的數(shù)據(jù)傳送程序來實(shí)現(xiàn)。程序如下:MOVSI,OFFSETAREA1MOVDI,OFFSETAREA2MOVCX,100AGAIN:MOVAL,[SI]MOV[D1],ALINCSIINCDIDECCXJNZAGAIN其它類型MOVAX,DSMOVBX,CSMOV[DI],SSMOV[BX],CSMOVDS,AXMOVES,BXMOVSS,[SI]

2、堆棧操作指令

堆棧是內(nèi)存中的一個(gè)特定區(qū)域,由SS的內(nèi)容和SP的內(nèi)容來決定。堆棧操作具有“后進(jìn)先出”的特點(diǎn)。

有兩種指令: PUSH OPRD(壓入) POP OPRD(彈出)格式:PUSHOPRD功能:將寄存器或內(nèi)存單元的內(nèi)容入棧。壓棧

PUSH AXPUSH SIPUSHDISP[BX]

PUSHAX的操作:①

SP(SP)-1②SP所指棧頂(AH)

③SP(SP)-1④SP所指棧頂(AL)格式:POPOPRD功能:將棧頂?shù)囊粋€(gè)字送到寄存器或內(nèi)存單元中。出棧

POP AXPOP SIPOPDISP[BX]

POPAX的操作:①

AL[SP]②SP(SP)+1③AH[SP]④SP(SP)+1堆棧指令中的操作數(shù)OPRD:①

SS、DS、ES②16位的通用寄存器③WORD型的MEM數(shù)MOV AX,8000HMOV SS,AXMOV SP,2000HMOV DX,3E4AHPUSH DXPUSH AX例如:

當(dāng)執(zhí)行完兩條壓入堆棧的指令時(shí),堆棧中的內(nèi)容如圖3.14所示。壓入堆棧指令PUSHDX的執(zhí)行過程為:①SP(SP)-1 ;②棧頂(DH)③SP(SP)-1 ;④棧頂(DL)壓入堆棧指令PUSHAX的執(zhí)行過程為:①SP(SP)-1 ;②棧頂(AH)③SP(SP)-1 ;④棧頂(AL)圖3.14堆棧操作示意圖A、XCHG

3、交換指令

格式:XCHGDEST,SOURCE功能:兩個(gè)寄存器,寄存器和內(nèi)存變量之間內(nèi)容的交換

XCHG AL,BLXCHG BX,CXXCHG BX,SIXCHG AX,BUFFERXCHG BX,DATA[SI] 例如:說明:(1)段寄存器不能作為操作數(shù)。(2)源和目的不能同時(shí)為存儲單元

(3)操作數(shù)不能為立即數(shù)。

B、交換指令BSWAP

BSWAP OPRD1 寄存器內(nèi)部字節(jié)交換指令,將指定的32寄存器中的4個(gè)字節(jié),通過兩兩交換實(shí)現(xiàn)反序排列。

比如: MOV EAX,01234567H BSWAP EAX;

使得[EAX]=67452301H本條指令完成一個(gè)字節(jié)的編碼轉(zhuǎn)換,轉(zhuǎn)換前要先在內(nèi)存中建立一個(gè)代碼轉(zhuǎn)換表。

4、查表指令(代碼轉(zhuǎn)換指令)XLAT

格式:XLAT功能:AL←(BX+AL)表格首地址:BX內(nèi)容(2)下標(biāo)變量:AL內(nèi)容常用于無法用公式實(shí)現(xiàn)的代碼轉(zhuǎn)換。本指令不影響狀態(tài)標(biāo)位,表格長度不超過256字節(jié)。

格雷碼數(shù)碼管顯示代碼例:查表求n的平方。n:[0-9]1、將0-9的平方表建立在偏移地址為2000H的內(nèi)存中,如圖。2、查表完成求5的平方指令序列為:MOVBX,2000H;指向平方表的首地址MOVAL,5;將5換碼成5的平方值XLAT ;查表,平方值在AL中

這類指令有:1)LEA有效地址傳送到寄存器2)LDS將雙字指針?biāo)偷郊拇嫫骱虳S3)LES將雙字指針?biāo)偷郊拇嫫骱虴SEg:LEA BX,[1000H]LDS SI,[1000H]LES DI,[1000H]二、地址傳送指令1、LEA指令格式:LEADST,SRC功能:把存儲單元的16位有效偏移地址EA送指定的寄存器。圖3-15LEA指令【例5-15】執(zhí)行前SI=2030H。執(zhí)行LEASI,[4A1BH]后,SI=4A1BH,為把某單元的偏移地址4A1BH送SI。執(zhí)行MOVSI,4A1BH后,SI=4A1BH,為把立即數(shù)4A1BH送SI。執(zhí)行LEASI,[SI+4A1BH]后,SI=6A4BH。

2、LDS指令(LDS是“LoadDataSegment”的簡寫)格式:LDS DST,SRC示意圖如圖3-16所示。功能:把內(nèi)存4個(gè)單元的32位數(shù)送到段寄存器DS和由DST指出的偏移量寄存器。低16位→BX/SI/DI,高16位→DS,且低字節(jié)→低位,高字節(jié)→高位。圖3-16LDS指令【例5-16】執(zhí)行LDSSI,[DI+100AH]指令的結(jié)果是SI←(DS×10H+DI+100AH,DS×10H+DI+100BH),DS←(DS×10H+DI+100CH,DS×10H+DI+100DH)。設(shè)執(zhí)行前DS=2000H,SI=A024H,DI=0006H,則指令指出的存儲單元地址為:20000H+0006H+100AH=21010H,21011H,21012H,21013H。設(shè)4個(gè)單元的內(nèi)容如下:則指令執(zhí)行后,DS=2230H,SI=0180H,DI=0005H。80H01H30H22H

21010H21011H21012H21013H

3、LES指令(LDS是“LoadExtraSegment”的簡寫)格式:LES DST,SRC示意圖如圖3-17所示。功能:把內(nèi)存4個(gè)單元的32位數(shù)送到段寄存器ES和由DST指出的偏移量寄存器。低16位→BX/SI/DI,高16位→ES,且低字節(jié)→低位,高字節(jié)→高位。圖3-17LES指令ES1)LAHFFR寄存器的低8位送AH2)SAHFAH送FR寄存器的低8位3)PUSHFFR寄存器推入堆棧4)POPF從棧頂中彈出存入FR寄存器三、標(biāo)志傳送指令1、讀標(biāo)志指令LAHF格式:LAHF功能:AH←FLAGSL(內(nèi)含5個(gè)標(biāo)志位CF、PF、AF、ZF、SF)。標(biāo)志位傳送指令用于了解或保存標(biāo)志寄存器的內(nèi)容,或設(shè)置某些標(biāo)志位。LOAD2、寫標(biāo)志指令SAHF格式:SAHF功能:FLAGL(內(nèi)含5個(gè)標(biāo)志位CF、PF、AF、ZF、SF)←AH。

LAHF和SAHF指令示意圖如圖3-17所示。STORE圖3-17LAHF和SAHF指令

3、FLAGS入棧指令PUSHF格式:PUSHF功能:FLAGS入棧。入棧操作步驟依次為:SP←SP-1,[SS×10H+SP]←FLAGSH,SP←SP-1,[SS×10H+SP]←FLAGSL。FLAGSH和FLAGSL是FLAGS的高、低8位。

4、FLAGS出棧指令POPF格式:POPF功能:FLAGS出棧。出棧操作步驟依次為:FLAGSL←[SS×10H+SP],SP←SP+1,F(xiàn)LAGSH←[SS×10H+SP],SP←SP+1。入、出棧指令常成對使用,分別用于子程序和中斷服務(wù)程序首尾,保護(hù)和恢復(fù)主程序的各個(gè)標(biāo)志位。1、

IN輸入指令 指令格式為: IN AL,n IN AX,n IN AL,DX IN AX,DX2、OUT輸出指令

指令格式為: OUT n,AL OUTn,AX OUTDX,AL OUT DX,AX四、輸入/輸出指令格式:IN ACC,PORT功能:從PORT將8位或16位數(shù)據(jù)送入ACC中。

IN AL,10HINAX,20HIN AL,DXIN

AX,DX

1、IN輸入指令

格式:OUT PORT,ACC功能:將累加器AL或AX的內(nèi)容輸出到指定的IO端口中。

OUT 40H,ALOUT20H,AXOUTDX,ALOUT

DX,AX,

2、OUT輸入指令

§

3.5算術(shù)運(yùn)算指令

3.5.1加法指令3.5.2減法指令3.5.3乘法指令3.5.4除法指令

1、這類指令實(shí)現(xiàn)加、減、乘、除運(yùn)算。 2、共有兩類數(shù)據(jù): 無符號數(shù) 帶符號數(shù) 3、這些指令可實(shí)現(xiàn)字節(jié)或字的運(yùn)算。 4、運(yùn)算結(jié)果都會影響六個(gè)狀態(tài)對標(biāo)志位。

§

3.5算術(shù)運(yùn)算指令

(續(xù))一、加法指令

1、ADD不帶進(jìn)位加法

2、ADC帶進(jìn)位加法

3、INC增量指令4、AAA未組合十進(jìn)制加法調(diào)整5、DAA組合十進(jìn)制加法調(diào)整OPRD1OPRD1+OPRD2格式:ADDOPRD1,OPRD2功能:實(shí)現(xiàn)OPRD1和OPRD2兩個(gè)操作數(shù)相加,結(jié)果放入OPRD1。一、加法指令

OPRD1:REG、MEMOPRD2:

REG、MEM、im源和目的操作數(shù)不能同時(shí)為存儲器并且源和目的操作數(shù)類型要一致。影響所有的標(biāo)志位

1、ADD不帶進(jìn)位加法操作數(shù):

ADDREG,imADDREG,REGADDREG,MEMADDMEM,REGADDMEM,imADD AL,30ADD AX,SI ADD AX,[3000H]ADD AL,DATA[BX]ACC----imACC----RACC----M該指令也可以實(shí)現(xiàn)任一通用寄存器與立即數(shù)、累加器或別的寄存器、存貯單元的內(nèi)容相加,其和放回寄存器中。例如:ADD BX,3FFHADD SI,AXADD DI,CXADD DX,DATA[BX+SI]R----imR----ACCR----RR----M

該指令還可以實(shí)現(xiàn)存貯器操作數(shù)與立即數(shù)、累加器或別的寄存器的內(nèi)容相加,其和放回存貯單元中。例如:ADD BETA[SI],100ADD BETA[SI],AXADD BETA[SI],DXM----imM----ACCM----R這些指令執(zhí)行時(shí),對標(biāo)志位CF、OF、PF、SF、ZF和AF都會產(chǎn)生影響。2、ADC

帶進(jìn)位加法OPRD1OPRD1+OPRD2+CF格式:ADCOPRD1,OPRD2功能:實(shí)現(xiàn)OPRD1和OPRD2兩個(gè)操作數(shù)以及CF相加,結(jié)果放入OPRD1。MOV AX,F(xiàn)IRSTADD AX,SECONDMOV THIRD,AXMOV AX,F(xiàn)IRST+2ADC AX,SECOND+2MOV THIRD+2,AX3、INC

增量指令OPRDOPRD+1格式:INCOPRD功能:將操作數(shù)的內(nèi)容加1后,再送回該操作數(shù)中。OPRD為REG或MEM。為無符號數(shù)

INC指令常用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù)等。例如:INC ALINC SIINC DIINC WORDPTR[BX]格式:DAA功能:對AL寄存器中的壓縮BCD數(shù)加法操作的結(jié)果進(jìn)行十進(jìn)制調(diào)整。4、DAA5、AAADAA功能:對AL寄存器中的未壓縮BCD數(shù)加法操作的結(jié)果進(jìn)行十進(jìn)制調(diào)整。格式:例1:設(shè)原AL=79H,BH=0B3H,求執(zhí)行指令A(yù)DDAL,BH后,AL=?BH=?各個(gè)標(biāo)志位的值?79H=01111001B+)B3H=10110011B00101100B1所以,AL=00101100B=2CH,BH=0B3HSF=0,ZF=0,AF=0,PF=0,CF=1,OF=0

例2:求兩個(gè)雙字?jǐn)?shù)據(jù)相加。假設(shè)數(shù)據(jù)1在DX(高字)和AX(低字)內(nèi),為12345678H,數(shù)據(jù)2在BX(高字)和CX(低字)內(nèi),為6789ABCDH。因?yàn)?086/8088的指令只能進(jìn)行字/字節(jié)運(yùn)算,所以對于雙字必須分兩步進(jìn)行。第一步,低字和低字相加:ADDAX,CXAX=5678H+)CX=ABCDHAX=0245HCF=1第二步,高字和高字相加,同時(shí)考慮低字之和向高字進(jìn)位:ADCDX,BXDX=1234HBX=6789H+)CF=1DX=79BEHCF=0二、減法指令

1、SUB不帶借位減法

2、ADC帶借位減法

3、DEC減量指令

4、NEG取補(bǔ)指令

5、CMP

比較指令6、DAS壓縮BCD數(shù)減法十進(jìn)制調(diào)整7、AAS非壓縮BCD數(shù)減法十進(jìn)制調(diào)整1、SUB

不帶借位減法OPRD1OPRD1-OPRD2格式:SUBOPRD1,OPRD2功能:實(shí)現(xiàn)OPRD1與OPRD2兩個(gè)操作數(shù)相減,結(jié)果放入OPRD1。 比如:SUB BX,CX2、SBB

帶借位減法OPRD1OPRD1-OPRD2-CF格式:SBBOPRD1,OPRD2功能:實(shí)現(xiàn)OPRD1和OPRD2兩個(gè)操作數(shù)相減,同時(shí)減去借位CF,結(jié)果放入OPRD1。borrow[美]'bɑ:ro?3、DEC

減量指令OPRDOPRD-1格式:DECOPRD功能:將操作數(shù)的內(nèi)容減1后,再送回該操作數(shù)中。OPRD為REG或MEM。為無符號數(shù)4、NEG

取補(bǔ)指令OPRD0-OPRD格式:NEGOPRD功能:對操作數(shù)取補(bǔ),結(jié)果再送回。OPRD為REG或MEM。按位變反加15、CMP

比較指令OPRD1-OPRD2格式:CMPOPRD1,OPRD2功能:實(shí)現(xiàn)OPRD1與OPRD2兩個(gè)操作數(shù)相減,結(jié)果不送回。但影響標(biāo)志位。 比如:CMP AX,BX 例子比較指令可以用于累加器與立即數(shù),累加器與任一通用寄存器或任一內(nèi)存操作數(shù)之間的比較。例如:CMP AX,2000HCMP AX,SICMP AX,DATA[BX]該指令也可以用于任一寄存器與立即數(shù)或別的寄存器及任一內(nèi)存操作數(shù)之間的比較,例如:CMP BX,04FEHCMP DX,DICMP CX,COUNT[BP]該指令還可以用于內(nèi)存操作數(shù)與立即數(shù)及任一寄存器中操作數(shù)之間的比較。例如:CMP DATA,100CMP COUNT[SI],AXCMP POINTER[DI],BXR----imR----MM----imM----R無符號數(shù)比大小的結(jié)論如果ZF=1

則A=B如果ZF=0

則A≠B若CF=0,則A>B若CF=1,則A<BCMPAX,BX帶符號數(shù)比大小的四種情況CMPAX,BXA>0,B>0不會溢出A>0,B<0可能溢出A<0,B>0可能溢出A<0,B<0不會溢出綜上所述,可以歸納出如下結(jié)論:當(dāng)沒有溢出時(shí)(OF=0),若SF=0,則AX>BX;若SF=1,則AX<BX。當(dāng)產(chǎn)生溢出時(shí)(OF=1),若SF=0,則AX<BX;若SF=1,則AX>BX。用邏輯表達(dá)式又可簡化為若OF⊕SF=0則AX≥BX若OF⊕SF=1則AX<BX帶符號數(shù)比大小的結(jié)論如果ZF=1

則A=B如果ZF=0

則A≠B若OF⊕SF=0,則A>B若OF⊕SF=1,則A<B

例如,若自BLOCK開始的內(nèi)存緩沖區(qū)中,有100個(gè)帶符號的數(shù),希望找到其中最大的一個(gè)值,并將它放到MAX單元中。MOV BX,OFFSETBLOCKMOV AX,[BX]INC BXINC BXMOV CX,99AGAIN:CMP AX,[BX]JG NEXTMOV AX,[BX]NEXT:INC BXINC BXDEC CXJNE AGAINMOV AX,AXHLT三、乘法指令

1、MUL無符號數(shù)乘法

2、IMUL帶符號數(shù)乘法

3、AAM對AX做十進(jìn)制調(diào)整

1、MUL無符號數(shù)乘法指令被乘數(shù)和乘積均為隱含尋址格式:MULSRC功能:完成兩個(gè)無符號數(shù)的相乘。源操作數(shù)可以是寄存器,也可以是存儲器源操作數(shù)不能是立即數(shù)是存儲器時(shí),需指明類型。

MUL BLMUL CXMUL BYTEPTR[SI]MUL WORDPTR[DI]字節(jié)乘以字節(jié):MOVAL,3CHMOVBL,59HMULBLAL操作數(shù)8位8位被乘數(shù)乘數(shù)

×AX16位乘積字乘以字:MOVAX,1234HMOVBX,3C09HMULBXAX操作數(shù)16位16位被乘數(shù)乘數(shù)

×AX32位乘積DX

2、IMUL帶符號數(shù)乘法指令 這是一條帶符號數(shù)的乘法指令,它和MUL一樣可以進(jìn)行字節(jié)和字節(jié)、字和字的乘法運(yùn)算。結(jié)果放在AX或DX、AX中。當(dāng)結(jié)果的高半部分不是結(jié)果的低半部分的符號擴(kuò)展時(shí),標(biāo)志位CF和OF將置位。格式:IMULSRC功能:完成兩個(gè)帶符號數(shù)的相乘。本指令影響標(biāo)志位CF和OF。IMULBXIMULBYTEPTR[SI+6]

完成兩個(gè)帶符號數(shù)的相乘。乘法指令例子IMUL指令例設(shè):AL=FEH,CL=11H,求AL與CL的乘積。若兩操作數(shù)為無符號數(shù),則MULCL結(jié)果:AX=10DEH若將兩操作數(shù)看作有符號數(shù),則:IMULCL結(jié)果:AX=FFDEH=-34。指令功能:完成對兩個(gè)非壓縮BCD數(shù)乘法結(jié)果的十進(jìn)制數(shù)調(diào)整。

3、AAM非壓縮BCD數(shù)乘法操作結(jié)果校正四、除法指令

1、DIV無符號數(shù)除法

2、IDIV帶符號數(shù)除法

3、AAD非壓縮BCD數(shù)除法校正

4、CBW帶符號數(shù)字節(jié)擴(kuò)展5、CWD帶符號數(shù)字?jǐn)U展1、DIV無符號數(shù)除法指令被除數(shù)、商和余數(shù)均為隱含尋址格式:DIVSRC功能:完成兩個(gè)無符號數(shù)的相除。1、DIV無符號數(shù)除法指令 如果SRC=0,產(chǎn)生類型0的除法錯(cuò)中斷。如果結(jié)果大于寄存器可以保存的值時(shí),也產(chǎn)生0型中斷。AXALAH操作數(shù)余數(shù)商16位8位除數(shù)被除數(shù)字除以字節(jié):MOVAX,1234HMOVBL,58HDIVBLAXDXAXDX操作數(shù)被除數(shù)余數(shù)商除數(shù)16位雙字除以字:MOVDX,1234HMOVCX,16A8HDIVCXMOVAX,5678H字節(jié)除以字節(jié) MOVAL,38H; 被除數(shù)送AL CBW;AL中的字節(jié)擴(kuò)展成AX中的字 DIVBL字除以字 MOVAX,5678H CWD;把字轉(zhuǎn)換成雙字DX、AXDIVBX; 商在AX中,余數(shù)在DX中2、IDIV帶符號數(shù)除法指令被除數(shù)、商和余數(shù)均為隱含尋址余數(shù)符號位與被除數(shù)相同格式:IDIVSRC功能:完成兩個(gè)帶符號數(shù)的相除。雙倍字長除以字MOV DX,NUM_HI_WORD; 被除數(shù)高位字送DXMOV AX,NUM_LO_WORD; 被除數(shù)低位字送AXIDIV DIVISOR_WORD[SI]3、CBW字節(jié)擴(kuò)展格式:CBW功能:將AL的符號位(bit7)擴(kuò)展到整個(gè)AH中若AL<80H,則AH00H若AL≥80H,則AHFFH。ConvertBytetoWord 例如:MOV AL,01011111BCBW執(zhí)行后,(AX)=005FH。3、CBW字節(jié)擴(kuò)展(續(xù)) 例如:MOV AL,10011111BCBW執(zhí)行后,(AX)=FF9FH。4、CWD字?jǐn)U展格式:CWD功能:將AX中的符號位(bit15)擴(kuò)展到DX中若AX<8000H,則DX0000H若AX≥8000H,則DXFFFFH。ConvertWordtoDoubleWord 例如:MOV AX,1234HCWD執(zhí)行后,(DX)(AX)=00001234H。4、CWD字?jǐn)U展(續(xù)) 例如:MOV AX,835EHCWD執(zhí)行后,(DX)(AX)=FFFF835EH。 8088的調(diào)整指令主要用于十進(jìn)制數(shù)的調(diào)整。AAA——對AL中ASCII未壓縮的十進(jìn)制和進(jìn)行調(diào)整;AAS——對AL中ASCII未壓縮的十進(jìn)制差進(jìn)行調(diào)整;AAD——在除法指令前對AX中ASCII未壓縮的十進(jìn)制數(shù)進(jìn)行調(diào)整。

5、調(diào)整指令A(yù)AM——對AX中兩個(gè)ASCII未壓縮十進(jìn)制相乘結(jié)果進(jìn)行調(diào)整;DAA——對AL中的兩個(gè)壓縮十進(jìn)制數(shù)相加之和進(jìn)行調(diào)整,得到壓縮十進(jìn)制和;DAS——對AL中的兩個(gè)壓縮十進(jìn)制數(shù)相減之差進(jìn)行調(diào)整,得到壓縮十進(jìn)制差。在算術(shù)運(yùn)算中操作數(shù)可以采用BCD碼,但是運(yùn)算后的結(jié)果必須經(jīng)過調(diào)整,否則結(jié)果是錯(cuò)誤的。如8+7=15,用非壓縮BCD碼表示,其運(yùn)算結(jié)果為00001000+0000011100001111(0F)而BCD碼中只允許出現(xiàn)0~9,因此要進(jìn)行調(diào)整。十進(jìn)制調(diào)整指令BCD碼是逢10進(jìn)1,而計(jì)算機(jī)是逢16進(jìn)1,因此要在各位上補(bǔ)一個(gè)6,讓其產(chǎn)生進(jìn)位,而此進(jìn)位作為十位數(shù)出現(xiàn),即00001111+0000011000010101(15)十進(jìn)制調(diào)整指令又如,9+9=18,用非壓縮BCD碼表示時(shí),運(yùn)算過程為:00001001+0000100100010010(12)結(jié)果丟失了6。在BCD碼運(yùn)算結(jié)果中,如果1位BCD碼所對應(yīng)的4位二進(jìn)制碼超過9,那就應(yīng)該補(bǔ)上一個(gè)6產(chǎn)生進(jìn)位來進(jìn)行調(diào)整凡遇到AF=1,則在低位加6進(jìn)行調(diào)整

§

3.6邏輯運(yùn)算和移位指令3.6.1邏輯運(yùn)算指令3.6.2移位指令3.6.3循環(huán)移位指令§3.6邏輯運(yùn)算和移位指令屬于位操作指令,其共同點(diǎn)是:可以按二進(jìn)制位進(jìn)行操作;邏輯運(yùn)算指令按邏輯門電路的運(yùn)算規(guī)則;邏輯移位指令有左移和右移,移出的位都進(jìn)入CF標(biāo)志;因移空位的補(bǔ)充方式不同有多種指令形式;邏輯移位指令中,移動超過1次則用CL寄存器做計(jì)數(shù)器;執(zhí)行邏輯操作指令,CF均被清0?!?.6 邏輯運(yùn)算和移位指令 邏輯運(yùn)算指令: AND、OR、NOT、XOR、TEST 移位指令: SAL、SAR、SHL、SHR 循環(huán)指令: ROL、ROR、RCL、RCR 還有:SHLD SHRD 表3-10邏輯運(yùn)算和移位循環(huán)指令一、邏輯運(yùn)算指令

1、AND邏輯與運(yùn)算

2、OR邏輯或運(yùn)算

3、NOT

邏輯非運(yùn)算

4、XOR

邏輯異或運(yùn)算

5、TEST測試指令一.邏輯運(yùn)算指令

邏輯運(yùn)算指令,即按位邏輯運(yùn)算。與算術(shù)運(yùn)算的最大區(qū)別就是,不進(jìn)位。 分為: AND、OR、XOR、NOT、TEST1、AND指令

AND指令可以進(jìn)行字節(jié)操作,也可以進(jìn)行字操作。

AND指令常用來屏蔽某些位。一、邏輯運(yùn)算指令格式:AND OPRD1,OPRD2功能:OPRD1和OPRD2按位邏輯與運(yùn)算。清零例如:AND AL,0FHAND AX,BXAND SI,BPAND AX,DATA#_WORDAND DX,BUFFER[SI+BX]AND DATA#_WORD,00FFHAND BLOCK[BP+DI],DX2、OR指令

OR指令可以進(jìn)行字節(jié)操作,也可以進(jìn)行字操作。

OR指令常用來組合某些位。置1格式:OR OPRD1,OPRD2功能:OPRD1和OPRD2按位邏輯或運(yùn)算。例如:OR AL,30HOR AX,00FFHOR BX,SIOR BX,DATAWORDOR BUFFER[BX],SIOR BUFFER[BX+SI],8000H3、XOR指令

XOR指令可以進(jìn)行字節(jié)操作,也可以進(jìn)行字操作。

XOR指令常用來取反某些位。取反格式:XOR OPRD1,OPRD2功能:OPRD1和OPRD2按位邏輯異或運(yùn)算。

該指令對兩個(gè)操作數(shù)進(jìn)行按位“異或”操作,即進(jìn)行“異或”操作的兩位值不同時(shí),其結(jié)果為“1”;否則就為0,操作結(jié)果送回。例如:XOR AL,0FHXOR AX,BXXOR DX,SIXOR CX,CONNTWORDXOR BUFFER[BX],DIXOR BUFFER[BX+SI],AX4、NOT指令

操作數(shù)可以是寄存器或存貯器的內(nèi)容。該指令對標(biāo)志位不產(chǎn)生影響。例如:NOTAL格式:NOT OPRD功能:對OPRD按位取反,結(jié)果送回原操作數(shù)。5、TEST指令

這條指令通常是在不希望改變操作數(shù)的前提下,用來檢測某一位或某幾位的狀態(tài)。格式:TESTOPRD,im功能:對OPRD和im按位取與,結(jié)果不送回原操作數(shù)。影響標(biāo)志位。

例如,若要檢測AL中的最低位是否為1,且若為1則轉(zhuǎn)移。在這種情況下可以用如下指令: TEST AL,01H JNZ THERE…THERE:MOV BL,05H…AND可以使指定位清0OR可以使指定位置1XOR可以使指定位取反

1、SAL算術(shù)左移

2、SAR

算術(shù)右移

3、SHL

邏輯左移

4、SHR

邏輯右移

二、移位指令

移位指令有4條,分別是:

算術(shù)左移SAL(ShiftArithmeticLeft)算術(shù)右移SAR(ShiftArithmeticRight) 邏輯左移SHL(ShiftLogicLeft) 邏輯右移SHR(ShiftLogicRight)二、移位指令(續(xù))格式:SALOPRD,COUNT

SAROPRD,COUNT功能:將OPRD中的數(shù)左移或者右移若干位。算術(shù)移位其中:OPRD為REG或MEMCOUNT為立即數(shù)或CL。在8086中,立即數(shù)只能為1。圖3.18移位指令的功能(a)SAL/SHL;(b)SAR;(c)SHR例子:SAL AL,1SAL BX,1SAR BL,CLSAR AX,CLSAL BYTEPTR[SI],1MOV CL,4MOV AX,5678HSAR AX,CL格式:SHLOPRD,COUNT

SHROPRD,COUNT功能:將OPRD中的數(shù)左移或者右移若干位。邏輯移位其中:OPRD為REG或MEMCOUNT為im或CL。在8086中,立即數(shù)只能為1。SHIFT開環(huán)移位,故此首字母用SHIFT算術(shù)左移和算術(shù)右移:帶符號數(shù)邏輯左移和邏輯右移:無符號數(shù)

1、ROL不帶CF循環(huán)左移

2、ROR不帶CF循環(huán)右移

3、RCL

帶CF循環(huán)左移

4、RCR

帶CF循環(huán)右移

三、循環(huán)移位指令

不含CF的循環(huán)左移指令ROL(RotateLeft);不含CF的循環(huán)右移指令ROR(RotateRight);帶CF的循環(huán)左移指令RCL(RotatethroughCFLeft);帶CF的循環(huán)右移指令RCR(RotatethroughCFRight)。三、循環(huán)移位指令(續(xù))循環(huán)指令有4條,分別是:格式:ROLOPRD,COUNT

ROROPRD,COUNT功能:將OPRD中的數(shù)循環(huán)左移或者右移若干位。小循環(huán)移位其中:OPRD為REG或MEMCOUNT為立即數(shù)或CL。在8086中,立即數(shù)只能為1。圖3.19循環(huán)移位指令示意圖(a)ROL;(b)ROR;(c)RCL;(d)RCR格式:RCLOPRD,COUNT

RCROPRD,COUNT功能:將OPRD中的數(shù)循環(huán)左移或者右移若干位。大循環(huán)移位其中:OPRD為REG或MEMCOUNT為立即數(shù)或CL。在8086中,立即數(shù)只能為1。Rotate閉環(huán)移位,故此首字母用RotateROL和ROR:稱小循環(huán)RCL和RCR:稱大循環(huán)§3.7字符串處理指令

1、MOVS字符串傳送

2、CMPS字符串比較

3、SCAS字符串掃描

4、LODS取字符串

5、STOS存字符串§3.7字符串處理指令

所謂“字符串”是指一個(gè)數(shù)據(jù)塊或多個(gè)字符的集合,簡稱“串”。(String)微機(jī)經(jīng)常要對字符串執(zhí)行一些諸如串傳送、判斷兩個(gè)串是否相同、查找關(guān)鍵字、計(jì)算串長度、修改字符參數(shù)等操作,這些操作統(tǒng)稱為“串操作”。串操作指令采用隱含尋址方式

DS:SI-----源操作數(shù)指針

ES:DI-----目的操作數(shù)指針

CX----------字符串長度。

每次串操作后,存放操作數(shù)偏移地址的SI和DI內(nèi)容將自動修改。DF標(biāo)志

如果DF=0,則SI和DI按增量修改。 如果DF=1,則SI和DI按減量修改。 字節(jié)操作加1,字操作加2。串操作指令流程取源串地址取目標(biāo)串地址設(shè)串長度傳送一個(gè)字節(jié)或字修改地址指針修改串長度值傳送完否?

1.MOVSB/MOVSW/MOVSD該類指令是串傳送指令,用于內(nèi)存區(qū)之間字節(jié)串、字串或者雙字串的傳送。格式:MOVSOPRD1,OPRD2; MOVSB/MOVSW/MOVSD

OPRD1是源串 OPRD2是目的串

MOVSB/MOVSW/MOVSDMOVSB;ByteMOVSW;WordMOVSD;DWord【例】將3000H:1000H地址開始的100個(gè)字節(jié)數(shù)傳送到3000H:2000H開始的

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論