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

下載本文檔

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

文檔簡(jiǎn)介

第3章指令系統(tǒng)本章主要內(nèi)容8086尋址方式8086指令系統(tǒng)什么是指令系統(tǒng)指令是指揮計(jì)算機(jī)進(jìn)行操作的命令計(jì)算機(jī)的指令系統(tǒng)就是指該計(jì)算機(jī)能夠執(zhí)行的全部指令的集合不同的微處理器有不同的指令系統(tǒng),其中每一條指令對(duì)應(yīng)著微處理器的一種基本操作,這在設(shè)計(jì)微處理器時(shí)確定。微處理器的主要功能由它的指令系統(tǒng)來(lái)體現(xiàn)程序是一系列按一定順序排列的指令,執(zhí)行程序的過(guò)程就是計(jì)算機(jī)的工作過(guò)程。16位8086指令系統(tǒng)是Intel80x86系列微處理器指令系統(tǒng)的基礎(chǔ)指令的組成指令由操作碼和操作數(shù)兩部分組成操作碼說(shuō)明計(jì)算機(jī)要執(zhí)行哪種操作,如傳送、運(yùn)算、移位、跳轉(zhuǎn)等操作,它是指令中不可缺少的組成部分操作數(shù)是指令執(zhí)行的參與者,即各種操作的對(duì)象有些指令不需要操作數(shù),通常的指令都有一個(gè)或兩個(gè)操作數(shù),也有個(gè)別指令有3個(gè)甚至4個(gè)操作數(shù)操作碼操作數(shù)指令的操作碼和操作數(shù)每種指令的操作碼:用一個(gè)唯一的助記符表示(指令功能的英文縮寫)對(duì)應(yīng)著機(jī)器指令的一個(gè)二進(jìn)制編碼指令中的操作數(shù):可以是一個(gè)具體的數(shù)值可以是存放數(shù)據(jù)的寄存器或指明數(shù)據(jù)在主存位置的存儲(chǔ)器地址尋址方式尋址方式:指令中用于說(shuō)明操作數(shù)所在地址的方法指令系統(tǒng)設(shè)計(jì)了多種操作數(shù)的來(lái)源。操作數(shù)采取哪一種尋址方式,會(huì)影響機(jī)器運(yùn)行的速度和效率如何尋址一個(gè)操作數(shù)對(duì)程序設(shè)計(jì)很重要指令的助記符格式

操作碼操作數(shù)1,操作數(shù)2

;注釋操作數(shù)2,稱為源操作數(shù)src,它表示參與指令操作的一個(gè)對(duì)象操作數(shù)1,稱為目的操作數(shù)dest,它不僅可以作為指令操作的一個(gè)對(duì)象,還可以用來(lái)存放指令操作的結(jié)果分號(hào)后的內(nèi)容是對(duì)指令的解釋例:傳送指令MOV的格式MOV

dest,src

;dest←src

MOV指令的功能是將源操作數(shù)src傳送至目的操作數(shù)dest,例如:MOVAL,05H ;AL←05HMOVBX,AX ;BX←AXMOVAX,[SI] ;AX←DS:[SI]MOVAX,[BP+06H] ;AX←SS:[BP+06H]MOVAX,[BX+SI] ;AX←DS:[BX+SI]3.1.1與數(shù)據(jù)有關(guān)的尋址方式立即尋址MOVAX,3069H寄存器尋址MOVAL,BH直接尋址MOVAX,[2000H]寄存器間接尋址MOVAX,[BX]

寄存器相對(duì)尋址MOVAX,COUNT[SI]

基址變址尋址MOVAX,[BP][DI]相對(duì)基址變址尋址MOVAX,MASK[BX][SI]3.1.8086的尋址方式存儲(chǔ)器尋址操作數(shù)在指令中直接給出。立即數(shù)緊跟在操作碼后面,一起存放在代碼段中

指令格式舉例:MOVAL,5MOVAX,3064HMOVAL,‘A’*

只能用于

SRC字段

MOV40H,AL

*SRC和DST的長(zhǎng)度(數(shù)據(jù)類型)要一致:

MOVAH,3064H

(1)立即尋址方式MOVAX,3064H的執(zhí)行情況如圖:執(zhí)行結(jié)果:(AX)=3064H(1)立即尋址方式(1)立即尋址方式操作數(shù)在指定的寄存器中

MOVAX,BXMOVAL,BHMOVAX,3064H(2)寄存器尋址方式(2)寄存器尋址方式例:假設(shè)MOVAX,BX指令執(zhí)行前(AX)=3064H,(BX)=1234H,則指令執(zhí)行后:(AX)=1234H,(BX)保持不變。注:*可用通用寄存器(16位或8位)*SRC和DST的長(zhǎng)度(數(shù)據(jù)類型)要一致:

MOVAH,BXMOVBX,AH*CS不能用

MOV指令改變

MOVCS,AX(2)寄存器尋址方式存儲(chǔ)器尋址方式除上述兩種尋址方式外,下面五種尋址方式的操作數(shù)都在除代碼段以外的存儲(chǔ)區(qū)中,因此可以統(tǒng)稱為存儲(chǔ)器尋址方式。雙操作數(shù)指令的兩個(gè)操作數(shù)中,只能有一個(gè)使用存儲(chǔ)器尋址方式(即兩個(gè)操作數(shù)不能同時(shí)用存儲(chǔ)器尋址方式)

這里先引入有效地址EA(EffectiveAddress)的概念:在8086里,把操作數(shù)的偏移地址稱為有效地址,下面五種計(jì)算EA的方法體現(xiàn)了五種尋址方式。有效地址EA由指令直接給出

例:MOVAX,[2000H]

在這種尋址方式中,操作數(shù)存放在存儲(chǔ)單元中,而這個(gè)存儲(chǔ)單元的有效地址就在指令的操作碼之后,如操作數(shù)在數(shù)據(jù)段中,則:物理地址=(DS)×10H+EA。如操作數(shù)存放在數(shù)據(jù)段以外的其他段中,則:物理地址=(指定的段寄存器)×10H+EA

。

例:MOVAX,ES:[2000H]

(3)直接尋址方式MOVAX,[2000H]EA=2000H,假設(shè)(DS)=3000H,那么PA=32000H直接尋址方式舉例:結(jié)果:(AX)=3050H直接尋址方式直接尋址方式總結(jié):*

隱含的段為數(shù)據(jù)段DS*可使用段跨越前綴

MOVAX,ES:[2000H]*SRC和DST的長(zhǎng)度(數(shù)據(jù)類型)要一致:例:MOVAL,[3000H];[3000H]指示一個(gè)字節(jié)單元

MOVAX,[3000H];[3000H]指示一個(gè)字單元*s,d不能同時(shí)用存儲(chǔ)器尋址方式例:MOV[3000H],[2000H]*操作數(shù)地址可由變量(符號(hào)地址)表示,例如:MOVAX,[VALUE]

通常寫成如下形式:

MOVAX,VALUE比較:MOVAX,2000H

MOVAX,[2000H](4)寄存器間接尋址EA在基址寄存器(BX/BP)或變址寄存器(SI/DI)中如果指令中使用的寄存器是SI、DI和BX,則操作數(shù)在數(shù)據(jù)段中,則:物理地址=(DS)×10H+(BX)或物理地址=(DS)×10H+(SI)或物理地址=(DS)×10H+(DI);如指令中指定BP寄存器,則操作數(shù)在堆棧段中,段地址在SS中,所以操作數(shù)的物理地址為:物理地址=(SS)×10H+(BP)寄存器間接尋址舉例:例3.5:MOVAX,[BX]

如果(DS)=2000H,(BX)=1000H,則物理地址=20000H+1000H=21000H

執(zhí)行情況如圖所示,最后的執(zhí)行結(jié)果為(AX)=50A0H。指令中也可以指定段跨越前綴來(lái)取得其他段中的數(shù)據(jù)。如:

MOVAX,ES:[BX]寄存器間接尋址寄存器間接尋址總結(jié):*存放EA的寄存器只能是BX,SI,DI,BP(指16位尋址的情況)例:MOVAX,[CX]

*SRC和DST的長(zhǎng)度(數(shù)據(jù)類型)一致

例:MOVDL,[BX];[BX]指示一個(gè)字節(jié)單元

MOVDX,[BX];[BX]指示一個(gè)字單元*s,d不能同時(shí)用存儲(chǔ)器尋址方式例:MOV[SI],[BX]

MOV[2000H],[BX]

比較:MOVAX,

BX

MOVAX,

[BX]

有效地址=(BX)(BP)8位(SI)16位(DI)+位移量 物理地理=段地址×10H+有效地址 如果指令中使用的寄存器是SI、DI和BX,則操作數(shù)在數(shù)據(jù)段中,段地址在DS寄存器中: 物理地理=(DS)×10H+有效地址 如指令中指定BP寄存器,則操作數(shù)在堆棧段中,段地址在SS中: 物理地理=(SS)×10H+有效地址(5)寄存器相對(duì)尋址方式操作數(shù)的有效地址是一個(gè)基址或變址寄存器的內(nèi)容和指令中指定的8位或16位位移量(displacement)之和。即指令格式:MOVAX,COUNT[SI]

MOVAX,[COUNT+SI]

假設(shè)(DS)=3000H,(SI)=2000H,COUNT=3000H,

則:PA=35000H

指令的執(zhí)行情況如圖,執(zhí)行結(jié)果是:

(AX)=1234H(5)寄存器相對(duì)尋址方式(5)寄存器相對(duì)尋址方式*存放EA的寄存器只能是BX,SI,DI,BP(指16位尋址的情況)

MOVAX,COUNT[CX]

*

SRC和DST的長(zhǎng)度(數(shù)據(jù)類型)要一致

例:MOVDL,AADR[BX];ADDR[BX]指示一個(gè)字節(jié)單元

MOVDX,AADR[BX];ADDR[BX]指示一個(gè)字單元*

s,d不能同時(shí)用存儲(chǔ)器尋址方式例:MOV[SI],COUNT[BX]

MOV[2000H],COUNT[BX]

MOV[2000H+SI],COUNT[BX]

(5)寄存器相對(duì)尋址方式總結(jié)(6)基址變址尋址方式操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容之和。兩個(gè)寄存器均由指令指定。如基址寄存器為BX時(shí),段寄存器使用DS;

物理地址=(DS)×10H+(BX)+(SI)

或物理地址=(DS)×10H+(BX)+(DI)如基址寄存器為BP時(shí),段寄存器則用SS。

物理地址=(SS)×10H+(BP)+(SI)

或物理地址=(SS)×10H+(BP)+(DI)例:MOVAX,[BX][DI]

(或?qū)憺镸OVAX,[BX+DI])

如(DS)=2100H,(BX)=0158H,(DI)=10A5H

則EA=0158H+10A5H=11FDH

物理地址=21000H+11FDH=221FDH

指令執(zhí)行情況如圖所示,最后的執(zhí)行結(jié)果是(AX)=1234H。

(6)基址變址尋址方式(6)基址變址尋址方式*可以指定段跨越前綴,例:

MOVAX,ES:[BX][SI]*存放EA的寄存器只能是BX,SI,DI,BP(指16位尋址的情況),并且必須是一個(gè)基址寄存器和一個(gè)變址寄存器的組合。即:

(BX)+(SI) (BX)+(DI) (BP)+(SI) (BP)+(DI)以下是錯(cuò)誤的:MOVAX,[BX][BP]

MOVAX,[SI][DI]

MOVAX,[BX][CX]

(6)基址變址尋址方式總結(jié)*SRC和DST的字長(zhǎng)應(yīng)該一致

MOVDL,[BX][SI];[BX][SI]指示一個(gè)字節(jié)單元

MOVDX,[BX][SI];ADDR[BX]指示一個(gè)字單元*s,d不能同時(shí)用存儲(chǔ)器尋址方式例: MOV[SI],COUNT[BX]

MOV[2000H],COUNT[BX]

MOV[2000H+SI],COUNT[BX]

MOV[2000H],[BX][SI]

(6)基址變址尋址方式總結(jié)(7)相對(duì)基址變址尋址方式操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容和8位或16位位移量之和。同樣,當(dāng)基址寄存器為BX時(shí),使用DS為段寄存器

物理地址=(DS)×10H+(BX)+(SI)+8位位移量

16位位移量物理地址=(DS)×10H+(BX)+(DI)+8位位移量

16位位移量

而當(dāng)基址寄存器為BP時(shí),則使用SS為段寄存器。

物理地址=(SS)×10H+(BP)+(SI)+8位位移量

16位位移量物理地址=(SS)×10H+(BP)+(DI)+8位位移量

16位位移量

MOVAX,MASK[BX][SI]

MOVAX,MASK[BX+SI]

或MOVAX,[MASK+BX+SI](7)相對(duì)基址變址尋址方式例:

MOVAX,MASK[BX][SI]

(或MOVAX,MASK[BX+SI], 或MOVAX,[MASK+BX+SI])

假設(shè)(DS)=3000H,(BX)=2000H,(SI)=1000H,MASK=0250H,

則物理地址=30000H+2000H+1000H+0250H=33250H

相對(duì)基址變址尋址方式舉例指令執(zhí)行情況如圖所示,最后的執(zhí)行結(jié)果是:(AX)=1234H。

(7)相對(duì)基址變址尋址方式(7)相對(duì)基址變址尋址方式(7)相對(duì)基址變址尋址方式總結(jié)可以指定段跨越前綴存放EA的寄存器只能是BX,SI,DI,BP(指16位尋址的情況),并且必須是一個(gè)基址寄存器和一個(gè)變址寄存器的組合。SRC和DST的長(zhǎng)度應(yīng)該一致

s,d不能同時(shí)用存儲(chǔ)器尋址方式通常用于二維數(shù)組的尋址訪問(wèn)存儲(chǔ)器的方式默認(rèn)的段寄存器可跨越的段寄存器偏移地址取指令CS無(wú)IP堆棧操作SS無(wú)SP一般數(shù)據(jù)訪問(wèn)DSCSESSS有效地址EABP作為基址的尋址SSCSDSESBP串操作的源操作數(shù)DSCSESSSSI串操作的目的操作數(shù)ES無(wú)DI段寄存器的使用規(guī)定3.28086的指令系統(tǒng)數(shù)據(jù)傳送指令

算術(shù)指令

邏輯指令

串處理指令

控制轉(zhuǎn)移指令

處理機(jī)控制與雜項(xiàng)操作指令

(1)指令功能--該指令能實(shí)現(xiàn)何種操作,通常指令助記符就是指令功能的英文縮寫詞。

(2)指令支持的尋址方式--指令中的源操作數(shù)和目的操作數(shù)字段允許采用的尋址方式。

(3)指令對(duì)標(biāo)志位的影響--該指令執(zhí)行后對(duì)各個(gè)標(biāo)志位的影響。

(4)指令的特殊要求--該指令隱含使用或限定使用的寄存器以及需要預(yù)置的參數(shù)。學(xué)習(xí)一條指令時(shí),要注意以下幾個(gè)方面:數(shù)據(jù)傳送指令:數(shù)據(jù)傳送指令的功能是把數(shù)據(jù)、地址傳送到寄存器或存儲(chǔ)器單元中

通用數(shù)據(jù)傳送指令

MOV、PUSH、POP、XCHG累加器專用傳送指令

IN、OUT、XLAT地址傳送指令

LEA、LDS、LES標(biāo)志寄存器傳送指令

LAHF、SAHF、PUSHF、POPF類型轉(zhuǎn)換指令

CBW、CWD通用數(shù)據(jù)傳送指令MOV傳送指令:MOVDST,SRC執(zhí)行操作:(DST)(SRC)功能:將源操作數(shù)(字節(jié)或字)傳送到目的地址支持的尋址方式:src可用data,mem,reg

Dst可用mem,reg例:MOVAX,DATA_SEG MOVDS,AX例:

MOVAL,’E’例:

MOVBX,OFFSETTABLE

MOV指令總結(jié)注意:*DST不能是立即數(shù)和CS*DST、SRC不能同時(shí)為存儲(chǔ)器尋址*DST、SRC不能同時(shí)為段寄存器

MOVDS,ES*立即數(shù)不能直接送段寄存器

MOVDS,2000H*不影響標(biāo)志位

通用寄存器AX、BX、CX、DXBP、SP、SI、DIDSESSS

存儲(chǔ)器

CS

立即數(shù)MOV指令數(shù)據(jù)傳送方向示意圖:堆棧操作指令堆棧是一個(gè)“后進(jìn)先出FILO”(或說(shuō)“先進(jìn)后出FILO”)的主存區(qū)域,位于堆棧段中;SS段寄存器記錄其段地址堆棧只有一個(gè)出口,即當(dāng)前棧頂;用堆棧指針寄存器SP指定堆棧只有兩種基本操作:進(jìn)棧和出棧,對(duì)應(yīng)兩條指令PUSH和POP圖示例:假設(shè)(AX)=2107H,執(zhí)行

PUSHAX********(SP)PUSHAX執(zhí)行前(SP)********07H21H低地址

高地址PUSHAX執(zhí)行后進(jìn)棧方向執(zhí)行操作:(SP)(SP)–2((SP)+1,(SP))(SRC)

進(jìn)棧指令:PUSHSRC進(jìn)棧指令:PUSHSRC(SP)********07H21HPOPAX執(zhí)行前(SP)********07H21H低地址

高地址

POPAX執(zhí)行后

(AX)=2107H例:POPAX出棧方向執(zhí)行操作: (DST)((SP)+1,(SP)) (SP)(SP)+2出棧指令:POPDST出棧指令:POPDST堆棧:‘先進(jìn)后出’的存儲(chǔ)區(qū),段地址存放在SS中,

SP在任何時(shí)候都指向棧頂,進(jìn)出棧后自動(dòng)修改SP。注意:

●PUSH和POP指令只能是字操作,因此存取字?jǐn)?shù)據(jù)后,SP的修改必須是+2或-2;

●PUSH和POP指令不能使用立即數(shù)方式(單操作數(shù)指令一般不能使用立即數(shù)方式);

PUSH1234H

●POP指令的dst不允許是CS寄存器;POPCS

●PUSH和POP指令都不影響標(biāo)志位。堆棧操作指令總結(jié)例:PUSHAXPUSHBXPUSHCX……;其間用到AX、BX、CXPOPCX;后進(jìn)先出

POPBXPOPAXPUSH指令在程序中常用來(lái)暫存某些數(shù)據(jù),而POP指令又可將這些數(shù)據(jù)恢復(fù)。注意恢復(fù)數(shù)據(jù)時(shí)寄存器的操作順序(出棧和進(jìn)棧的順序相反)。堆棧操作指令常見(jiàn)用途(4)換碼指令XLAT(translate)將BX指定的緩沖區(qū)中、AL指定的位移處的一個(gè)字節(jié)數(shù)據(jù)取出賦給AL格式:XLAT

;al←ds:[bx+al]換碼指令執(zhí)行前:在主存建立一個(gè)字節(jié)量表格,內(nèi)含要轉(zhuǎn)換成的目的代碼表格首地址存放于BX,AL存放相對(duì)表格首地址的位移量換碼指令執(zhí)行后:將AL寄存器的內(nèi)容轉(zhuǎn)換為目標(biāo)代碼演示IN/OUT累加器專用傳送指令(只限使用AX或AL)輸入指令I(lǐng)N(I/OCPU)

長(zhǎng)格式:INAL,PORT(字節(jié))

INAX,PORT(字)執(zhí)行操作:(AL)(PORT)(字節(jié))

(AX)(PORT+1,PORT)(字)短格式:INAL,DX(字節(jié))

INAX,DX(字)執(zhí)行操作:(AL)((DX))(字節(jié))

(AX)((DX)+1,(DX))(字)例:INAX,28H MOVDATA_WORD,AX例:MOVDX,3FCHINAX,DXINAL,DX累加器專用傳送指令(只限使用AX或AL)累加器專用傳送指令(只限使用AX或AL)輸出指令OUT(CPUI/O)長(zhǎng)格式:OUTPORT,AL(字節(jié))

OUTPORT,AX(字)執(zhí)行操作:(PORT)(AL)(字節(jié))

(PORT+1,PORT)(AX)(字)短格式:OUTDX,AL(字節(jié))

OUTDX,AX(字)執(zhí)行操作:((DX))(AL)(字節(jié))

((DX)+1,(DX))(AX)(字)例:OUT5,ALOUT5,AX例:MOVDX,3FCHMOVAL,80HOUTDX,ALOUTDX,AX累加器專用傳送指令(只限使用AX或AL)IN/OUT注意:*不影響標(biāo)志位*前256個(gè)端口號(hào)00H~FFH可直接在指令中指定(長(zhǎng)格式)*如果端口號(hào)256,端口號(hào)

DX(短格式)

有效地址送寄存器指令:LEAREG,SRC

指針?biāo)图拇嫫骱虳S指令:LDSREG,SRC

指針?biāo)图拇嫫骱虴S指令:LESREG,SRC

注意:

*不影響標(biāo)志位*REG必須是通用寄存器*SRC必須為存儲(chǔ)器尋址方式地址傳送指令有效地址送寄存器指令LEA格式為:LEAREG,SRC執(zhí)行的操作:(REG)←SRC指令把源操作數(shù)的有效地址送到指定的寄存中。

例:LEABX,[BX+SI+0F62H]如指令執(zhí)行前(BX)=0400H,(SI)=003CH則指令執(zhí)行后(BX)=0400+003C+0F62=139EH必須注意,在這里BX寄存器得到的是偏移地址而不是該存儲(chǔ)單元的內(nèi)容。LEA40H00H00H30HTABLE(DS):1000HMOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE;(BX)=1000HLEABX,TABLE;(BX)=1000HLEA舉例

CBWALAX

執(zhí)行操作:若(AL)的最高有效位為0,則(AH)=00H

若(AL)的最高有效位為1,則(AH)=FFH

CWDAX(DX,AX)

執(zhí)行操作:若(AX)的最高有效位為0,則(DX)=0000H

若(AX)的最高有效位為1,則(DX)=FFFFH

例:(AX)=0BA45HCBW;(AX)=0045HCWD;(DX)=0FFFFH(AX)=0BA45H注意:*無(wú)操作數(shù)指令*隱含對(duì)AL或AX進(jìn)行符號(hào)擴(kuò)展*不影響條件標(biāo)志位類型轉(zhuǎn)換指令

加法指令

ADD、ADC、INC

減法指令

SUB、SBB、DEC、NEG、CMP

乘法指令

MUL、IMUL

除法指令

DIV、IDIV算術(shù)指令:算術(shù)運(yùn)算指令包括二進(jìn)制運(yùn)算及十進(jìn)制運(yùn)算指令。算術(shù)指令用來(lái)執(zhí)行算術(shù)運(yùn)算,它們中有雙操作數(shù)指令,也有單操作數(shù)指令。如前所述,雙操作數(shù)指令的兩個(gè)操作數(shù)不允許同時(shí)使用存儲(chǔ)器尋址方式。單操作數(shù)指令不允許使用立即數(shù)方式。算術(shù)指令的尋址方式,均遵循這一規(guī)則。加法指令:ADDDST,SRC

執(zhí)行操作:(DST)(SRC)+(DST)

帶進(jìn)位加法指令:ADCDST,SRC

執(zhí)行操作:(DST)(SRC)+(DST)+CF

加1指令:INCOPR

執(zhí)行操作:(OPR)(OPR)+1注意:*除INC指令不影響CF標(biāo)志外,均對(duì)條件標(biāo)志位有影響。

*ADD和ADC指令是雙操作數(shù)指令,它們的兩個(gè)操作數(shù)不能同時(shí)為存儲(chǔ)器尋址方式,并且兩個(gè)操作數(shù)的類型要一致,目的操作數(shù)不能為立即數(shù)。*INC指令是單操作數(shù)指令,它的操作數(shù)不能使用立即數(shù)方式。ADD加法指令加法指令正確格式舉例ADDAX,BXADDAX,12ADDAL,BHADDAX,[BX]ADD[SI],BXADD[BX],ALADDBYTEPTR[BX],34H1運(yùn)算結(jié)果為負(fù)0運(yùn)算結(jié)果非負(fù)SF=1運(yùn)算結(jié)果為00運(yùn)算結(jié)果非0ZF=加法指令對(duì)條件標(biāo)志位的影響1結(jié)果操作數(shù)中有偶數(shù)個(gè)10結(jié)果操作數(shù)中有奇數(shù)個(gè)1PF=1運(yùn)算時(shí)有第三位向第四位的進(jìn)位時(shí)0運(yùn)算時(shí)無(wú)第三位向第四位的進(jìn)位時(shí)AF=加法指令錯(cuò)誤格式舉例ADD5,AL ×ADDAL,1234H ×ADD[BX],[2000H] ×ADD[BX],5 ×INC3 ×INC[SI] ×減法指令減法指令:SUBDST,SRC執(zhí)行操作:(DST)(DST)-(SRC)帶借位減法指令:SBBDST,SRC執(zhí)行操作:(DST)(DST)-(SRC)-CF減1指令:DECOPR執(zhí)行操作:(OPR)(OPR)-1求補(bǔ)指令:NEGOPR執(zhí)行操作:(OPR)-(OPR)或者表示為:(OPR)←0FFFFH-(OPR)+1

或者表示為:(OPR)←0-(OPR)比較指令:CMPOPR1,OPR2執(zhí)行操作:(OPR1)-(OPR2)SUB減法指令正確格式舉例SUBAX,BXSUBAX,12SUBAL,BHSUBAX,[BX]SUB[SI],BXSUB[BX],ALSUBBYTEPTR[BX],34H減法指令注意:*除DEC指令不影響CF標(biāo)志外,均對(duì)條件標(biāo)志位有影響。*SUB、SBB和CMP指令是雙操作數(shù)指令,它們的兩個(gè)操作數(shù)不能同時(shí)為存儲(chǔ)器尋址方式,并且兩個(gè)操作數(shù)的類型要一致。*DEC和NEG指令是單操作數(shù)指令,它們的操作數(shù)不能使用立即數(shù)方式。減法指令錯(cuò)誤格式舉例SUB5,AL ×SUBAL,1234H ×SUB[BX],[2000H] ×SUB[BX],5 ×DEC3 ×NEG4 ×DEC[SI] ×NEG[DI] ×乘法指令

無(wú)符號(hào)數(shù)乘法指令:MULSRC

帶符號(hào)數(shù)乘法指令:IMULSRC執(zhí)行操作:字節(jié)操作數(shù)(AX)(AL)*(SRC)

字操作數(shù)(DX,AX)(AX)*(SRC)注意:

*AL(AX)為隱含的乘數(shù)寄存器。*AX(DX,AX)為隱含的乘積寄存器。*SRC不能為立即數(shù)。*除CF和OF外,對(duì)條件標(biāo)志位無(wú)定義。乘法指令正確格式舉例:MULBL MULBXIMULCLIMULBX乘法指令錯(cuò)誤格式舉例:MULAL,BL ×MUL3 ×IMULBX,CX ×IMUL6 ×無(wú)符號(hào)數(shù)除法指令:DIVSRC帶符號(hào)數(shù)除法指令:IDIVSRC

執(zhí)行操作:字節(jié)操作(AL)(AX)/(SRC)的商

(AH)(AX)/(SRC)的余數(shù)字操作

(AX)(DX,AX)/(SRC)的商

(DX)(DX,AX)/(SRC)的余數(shù)注意:

*AX(DX,AX)為隱含的被除數(shù)寄存器。*AL(AX)為隱含的商寄存器。*AH(DX)為隱含的余數(shù)寄存器。*SRC不能為立即數(shù)。*對(duì)所有條件標(biāo)志位均無(wú)定義。除法指令DIVBL DIVBXIDIVCLIDIVBX除法指令正確格式舉例:DIVAX,BL ×DIV3 ×IDIVBX,CL ×IDIV6 ×DIV[BX] ×IDIV[SI] ×除法指令錯(cuò)誤格式舉例:邏輯運(yùn)算指令

AND、OR、NOT、XOR、TEST移位指令

SHL、SHR、SAL、SAR、

ROL、ROR、RCL、RCR3.2.3邏輯運(yùn)算和移位指令:邏輯非指令:NOTOPR*OPR不能為立即數(shù)執(zhí)行操作:(OPR)

*不影響標(biāo)志位

邏輯與指令:ANDDST,SRC執(zhí)行操作:(DST)(DST)(SRC)邏輯或指令:ORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)異或指令:XORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)測(cè)試指令:TESTOPR1,OPR2

執(zhí)行操作:(OPR1)(OPR2)CFOFSFZFPFAF00***無(wú)定義

根據(jù)運(yùn)算結(jié)果設(shè)置邏輯運(yùn)算指令演示例:屏蔽AL的第0、1兩位

ANDAL,0FCH例:置AL的第5位為1

ORAL,20H

例:使AL的第0、1位變反

XORAL,3例:測(cè)試某些位是0是1

TESTAL,1JZEVEN

********

OR00100000**1*****

******01XOR00000011

******10

********

AND11111100******00********

AND000000010000000*邏輯運(yùn)算指令的應(yīng)用邏輯運(yùn)算指令的錯(cuò)誤格式舉例:NOT[BX] ×NOT3 ×AND[SI],[2000H+BX] ×OR1234H,AX ×XORAX,BL ×

1.邏輯左移SHL(ShiftLogicalLeft)2.算術(shù)左移SAL(ShiftArithmeticLeft)3.邏輯右移SHR(ShiftlogicalRight)4.算術(shù)右移SAR(ShiftArithmeticRight)5.循環(huán)左移ROL(RotateLeft)6.循環(huán)右移ROR(RotateRight)7.帶進(jìn)位循環(huán)左移RCL(RotateLeftthroughCarry)

8.帶進(jìn)位循環(huán)右移RCR(RotateRightthroughCarry)2移位指令移位指令的格式及操作數(shù)移位指令的第一個(gè)操作數(shù)是指定的被移位的操作數(shù),可以是寄存器或存儲(chǔ)單元(字節(jié)或者字)。后一個(gè)操作數(shù)表示移位位數(shù),該操作數(shù)為1,表示移動(dòng)一位;當(dāng)移位位數(shù)大于1時(shí),則用CL寄存器值表示,該操作數(shù)表達(dá)為CL。允許OPR和CL的長(zhǎng)度不一致。格式:移位指令操作碼OPR,1或者:移位指令操作碼OPR,CL

;移位次數(shù)大于1時(shí)1.邏輯左移指令SHL2.算術(shù)左移指令SAL語(yǔ)句格式: SALOPR,1 或:SALOPR,CL

SHLOPR,1 或:SHLOPR,CL功能:將(OPR)向左移動(dòng)CL指定的次數(shù),最低位補(bǔ)入相應(yīng)的0,CF的內(nèi)容為最后移入位的值。演示

CF0語(yǔ)句格式:SHROPR,1或SHROPR,CL功能:將(OPR)向右移動(dòng)CL規(guī)定的次數(shù),最高位補(bǔ)入相應(yīng)個(gè)數(shù)的0,CF的內(nèi)容為最后移入位的值。演示

0CF3.邏輯右移指令SHR語(yǔ)句格式:SAROPR,1 或:SAROPR,CL功能:將(OPR)向右移動(dòng)CL指定的次數(shù)且最高位保持不變;CF的內(nèi)容為最后移入位的值。演示CF4.算術(shù)右移指令SAR移位指令的用途算術(shù)移位適于帶符號(hào)數(shù)的移位處理。一個(gè)數(shù)左移n位相當(dāng)于乘以2n,右移n位相當(dāng)于除以2n,所以,當(dāng)一個(gè)帶符號(hào)數(shù)需要乘(或除)2n時(shí),可使用算術(shù)移位指令SAL(或SAR)。當(dāng)一個(gè)無(wú)符號(hào)數(shù)需要乘(或除)2n時(shí),可使用邏輯移位指令SHL(或SHR)。使用移位指令將一個(gè)數(shù)擴(kuò)大或縮小2n倍,比使用乘法或除法指令的速度快。

循環(huán)移位: 將操作數(shù)從一端移出的位返回到另一端形成循環(huán),分成不帶進(jìn)位和帶進(jìn)位,分別具有左移或右移操作語(yǔ)句格式:ROLOPR,1

或:ROLOPR,CL功能:將目的操作數(shù)的最高位與最低位連成一個(gè)環(huán),將環(huán)中的所有位一起向左移動(dòng)CL規(guī)定的次數(shù)。CF的內(nèi)容為最后移入位的值。演示CF

5.循環(huán)左移指令ROL語(yǔ)句格式:ROROPR,1

或:ROROPR,CL功能:將目的操作數(shù)的最高位與最低位連成一個(gè)環(huán),將環(huán)中的所有位一起向右移動(dòng)CL規(guī)定的次數(shù),CF的內(nèi)容為最后移入位的值。演示CF6.循環(huán)右移指令ROR語(yǔ)句格式:RCLOPR,1或RCLOPR,CL功能:將目的操作數(shù)連同CF標(biāo)志一起向左循環(huán)移動(dòng)CL規(guī)定的次數(shù)。演示

CF7.帶進(jìn)位的循環(huán)左移指令RCL語(yǔ)句格式:RCROPR,1或RCROPR,CL功能:將目的操作數(shù)連同CF標(biāo)志一起向右循環(huán)移動(dòng)所規(guī)定的次數(shù)。演示CF8.帶進(jìn)位的循環(huán)右移指令RCR*

OPR可用除立即數(shù)以外的任何尋址方式*CNT=1,SHLOPR,1CNT>1,MOVCL,CNTSHLOPR,CL;以SHL為例*條件標(biāo)志位:

CF=移入的數(shù)值

1CNT=1時(shí),最高有效位的值發(fā)生變化0CNT=1時(shí),最高有效位的值不變移位指令:

SF、ZF、PF根據(jù)移位結(jié)果設(shè)置,AF無(wú)定義循環(huán)移位指令:

不影響SF、ZF、PF、AFOF=注意:(移位和循環(huán)移位指令)例: (AX)=0012H,(BX)=0034H要求把它們裝配在一起形成(AX)=1234H,可編制程序如下:

MOVCL,8

ROLAX.CL

ADDAX,BX

移位指令允許源操作數(shù)和目的操作數(shù)的長(zhǎng)度不一致:SHLAL,1SHRAX,1RORAL,CLRCLAX,CLROLWORDPTR[BX],CLSARBYTEPTR[BX],CL移位指令的正確格式舉例SHLAL,3 ×SHRAX,4 ×RORAL,BL ×RCLAX,BX ×RCR[BX],CL ×RCL12H,CL ×移位指令的錯(cuò)誤格式舉例:3.2.5控制轉(zhuǎn)移指令8086程序的執(zhí)行順序由代碼段寄存器CS和指令指針寄存器IP的值決定。程序可以按順序執(zhí)行,也可以根據(jù)情況改變程序的執(zhí)行順序??刂妻D(zhuǎn)移指令就是通過(guò)改變CS和IP的值來(lái)實(shí)現(xiàn)程序的轉(zhuǎn)移??刂妻D(zhuǎn)移指令根據(jù)程序轉(zhuǎn)移地址的不同,分為段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移。段內(nèi)轉(zhuǎn)移是指程序在同一代碼段內(nèi)轉(zhuǎn)移,這時(shí)只要改變IP的值。段間轉(zhuǎn)移指程序?qū)⑥D(zhuǎn)移到其他段,此時(shí)CS和IP的值同時(shí)改變。1.無(wú)條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令執(zhí)行后,程序無(wú)條件轉(zhuǎn)移到由指令中給出的目標(biāo)地址處。(1)段內(nèi)直接轉(zhuǎn)移指令格式一:JMP標(biāo)號(hào)指令完成的操作:IP←(IP)+以標(biāo)號(hào)給出的偏移量,(CS)不變。例:JMP SHORTLABEL1 ;(IP)←(IP)+8位偏移量,轉(zhuǎn)向符號(hào)地址LABEL1處2.JMP NEARPTRLABEL2 ;(IP)←(IP)+16位偏移量,轉(zhuǎn)向符號(hào)地址LABEL2處2.過(guò)程調(diào)用與返回指令需要反復(fù)被調(diào)用的具有一定功能的程序段可以被設(shè)計(jì)成過(guò)程(也稱為子程序),以供需要時(shí)調(diào)用。在過(guò)程中需要安排返回指令,使得過(guò)程結(jié)束時(shí),返回到調(diào)用處。過(guò)程與調(diào)用程序在同一段內(nèi),稱“段內(nèi)調(diào)用”;過(guò)程與調(diào)用程序不在同一段內(nèi),稱“段間調(diào)用”。過(guò)程調(diào)用指令CALL和返回指令RET均不影響標(biāo)志位,但影響堆棧內(nèi)容。(1)過(guò)程調(diào)用指令段內(nèi)直接調(diào)用指令格式:CALL過(guò)程名指令完成的操作:①(SP)←(SP)-2;②(SS:SP)←(IP);③(IP)←(IP)+16位偏移量。(2)過(guò)程返回指令無(wú)參數(shù)段內(nèi)返回格式:RET指令完成的操作:①(IP)←(SS:SP);

②(SP)←(SP)+2。有參數(shù)段內(nèi)返回格式:RETn指令完成的操作:①(IP)←(SS:SP);

②(SP)←(SP)+2+n。3.條件轉(zhuǎn)移指令格式:Jcc

標(biāo)號(hào)功能:以標(biāo)志位的狀態(tài)作為轉(zhuǎn)移依據(jù)。如果滿足轉(zhuǎn)移條件,則轉(zhuǎn)移到標(biāo)號(hào)指示的指令處;否則,順序執(zhí)行下一條指令。說(shuō)明:cc代表跳轉(zhuǎn)條件,short-label表明該指令只能實(shí)現(xiàn)段內(nèi)短轉(zhuǎn)移,參數(shù)形式通常為符號(hào)地址。(1)根據(jù)單個(gè)標(biāo)志位的狀態(tài)判斷的轉(zhuǎn)移指令指

令轉(zhuǎn)移條件說(shuō)

明JCdestCF=1有進(jìn)位/借位時(shí),轉(zhuǎn)移JNCdestCF=0無(wú)進(jìn)位/借位時(shí),轉(zhuǎn)移JZ/JEdestZF=1相等或等于0時(shí),轉(zhuǎn)移JNZ/JNEdestZF=0不相等或不等于0時(shí),轉(zhuǎn)移JSdestSF=1為負(fù)數(shù)時(shí),轉(zhuǎn)移JNSdestSF=0為正數(shù)時(shí),轉(zhuǎn)移JOdestOF=1有溢出時(shí),轉(zhuǎn)移JNOdestOF=0無(wú)溢出時(shí),轉(zhuǎn)移JPdestPF=11的個(gè)數(shù)為偶數(shù)時(shí),轉(zhuǎn)移JNPdestPF=01的個(gè)數(shù)為奇數(shù)時(shí),轉(zhuǎn)移JZ指令用法舉例例如:OR AX,AXJZ LY ;若AX的內(nèi)容為0,則轉(zhuǎn)到LY或:TESTAX,0FFFFHJZ LY(2)根據(jù)兩個(gè)無(wú)符號(hào)數(shù)的比較結(jié)果判斷的轉(zhuǎn)移指令指

令轉(zhuǎn)移條件說(shuō)

明JA/JNBEdestCF=0且ZF=0X>Y時(shí),轉(zhuǎn)移J

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論