微機(jī)原理與接口技術(shù)-第3章8086的尋址方式和指令系統(tǒng)_第1頁
微機(jī)原理與接口技術(shù)-第3章8086的尋址方式和指令系統(tǒng)_第2頁
微機(jī)原理與接口技術(shù)-第3章8086的尋址方式和指令系統(tǒng)_第3頁
微機(jī)原理與接口技術(shù)-第3章8086的尋址方式和指令系統(tǒng)_第4頁
微機(jī)原理與接口技術(shù)-第3章8086的尋址方式和指令系統(tǒng)_第5頁
已閱讀5頁,還剩226頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

微機(jī)原理與接口技術(shù)主講尹作友1第二章

內(nèi)容回顧2第二章重點(diǎn)之一

8086CPU內(nèi)部結(jié)構(gòu)3目的變址寄存器DestinationIndexSIDIBPSPAX

累加器AccumulatorBX基址寄存器BaseCX

計(jì)數(shù)寄存器CountDX

數(shù)據(jù)寄存器DataAHBHCHDHALBLCLDLIPPSWDSESSSCS數(shù)據(jù)段寄存器DataSegment附加段寄存器ExtraSegment堆棧段寄存器StackSegment代碼段寄存器CodeSegment狀態(tài)標(biāo)志寄存器ProcessorStatusWord指令指針寄存器InstructionPointer變址寄存器段寄存器控制寄存器通用寄存器源變址寄存器SourceIndex基址指針寄存器BasePoint堆棧指針寄存器StackPoint指針寄存器數(shù)據(jù)寄存器第二章重點(diǎn)之二4第二章重點(diǎn)之三邏輯地址的組成——段基址:偏移地址物理地址的形成——段基址×16+偏移地址段基址00001503210偏移地址150地址加法器物理地址190存儲(chǔ)器的分段管理5第二章重點(diǎn)之四堆棧的概念及工作過程6第三章8086的尋址方式和指令系統(tǒng)8086的尋址方式微機(jī)系統(tǒng)指令的機(jī)器碼表示方法8086的指令系統(tǒng)內(nèi)容提要7§3-18086的尋址方式概述

§3-18086的尋址方式——概述

計(jì)算機(jī)的指令包括:操作碼

操作數(shù)

↓操作的性質(zhì)操作的對(duì)象

↓存放在

寄存器、存儲(chǔ)器、I/O端口地址、立即數(shù)(由尋址方式?jīng)Q定)尋址方式:指令中說明操作數(shù)所在地址的方法。指令分類:?jiǎn)尾僮鲾?shù)、雙操作數(shù)、無操作數(shù)。(雙操作數(shù)指令形式:操作碼目的操作數(shù),源操作數(shù))8§3-18086的尋址方式——概述

各種尋址方式指令執(zhí)行速度不同:

操作數(shù)在寄存器中指令執(zhí)行速度快:在CPU內(nèi)部立即執(zhí)行;

立即數(shù)尋址指令執(zhí)行速度較快:直接從指令隊(duì)列中取數(shù);

操作數(shù)在存儲(chǔ)器中指令執(zhí)行速度較慢:通過總線與CPU交換數(shù)據(jù)。CPU進(jìn)行讀/寫存儲(chǔ)器的操作:①把一個(gè)偏移量送到BIU,計(jì)算出20位物理地址;②執(zhí)行總線周期存取操作數(shù)。9§3-18086的尋址方式——概述

尋址方式舉例:10§3-18086的尋址方式——概述

8086指令的尋址方式類型:一、立即尋址方式二、寄存器尋址方式三、直接尋址方式四、寄存器間接尋址方式五、寄存器相對(duì)尋址方式六、基址變址尋址方式七、相對(duì)基址變址尋址方式八、其它11§3-18086的尋址方式——立即尋址方式

一、立即尋址方式(ImmediateAddressing)

1.含義:操作數(shù)是立即數(shù)(即8位或16位的常數(shù)),直接包含在指令中。2.特點(diǎn):翻譯成機(jī)器碼時(shí),立即數(shù)是指令的一部分,緊跟在操作碼之后存放在代碼段內(nèi)。在取出指令的同時(shí)也就取出了操作數(shù),立即有操作數(shù)可用,所以稱之為立即尋址。

l6位數(shù):高字節(jié)→代碼段的高地址單元,低字節(jié)→低地址單元;3.作用:常用于給寄存器賦初值。12§3-18086的尋址方式——立即尋址方式

例MOVCX,2A50H解:將立即數(shù)2A50H送到CX寄存器中。(又例:MOVCL,20H)4.注意:①立即數(shù)可以送到寄存器、一個(gè)存儲(chǔ)單元(8位)、兩個(gè)連續(xù)的存儲(chǔ)單元(16位)中去;②立即數(shù)只能作源操作數(shù),不能作目的操作數(shù);③以A~F打頭的數(shù)字出現(xiàn)在指令中時(shí),前面必須加數(shù)字0。以免與其它符號(hào)相混淆(如:0AF22H)。MOVCX,2A50H13§3-18086的尋址方式——寄存器尋址方式

二、寄存器尋址方式(RegisterAddressing)

1.含義:操作數(shù)包含在寄存器中,寄存器的名稱由指令指定。2.特點(diǎn):16位操作數(shù):寄存器可以是AX、BX、CX、DX、SI、DI、SP和BP等。8位操作數(shù):寄存器AH、AL、BH、BL、CH、CL、DH和DL。3.作用:寄存器之間傳遞數(shù)據(jù)。例MOVDX,AX

解:(AX)送到CX寄存器中。(AX內(nèi)容不變)(又例:MOVBL,AL)4.注意:源操作數(shù)的長(zhǎng)度必須與目的操作數(shù)—致。(注:以下尋址方式下,指令的操作數(shù)在存儲(chǔ)器中,要先求物理地址才能獲得操作數(shù)。)

14§3-18086的尋址方式——直接尋址方式三、直接尋址方式(DirectAddressing)

1.含義:

存儲(chǔ)單元的有效地址EA(即:操作數(shù)的偏移地址)直接由指令給出。

2.特點(diǎn):機(jī)器碼中,有效地址存放在代碼段中指令的操作碼之后,而該地址單元中的數(shù)據(jù)總是存放在存儲(chǔ)器中。須先求出操作數(shù)的物理地址,再?gòu)拇鎯?chǔ)器中取得操作數(shù)。操作數(shù)的物理地址=16×DS+EA3.作用:實(shí)現(xiàn)對(duì)存儲(chǔ)單元的讀/寫操作。

15§3-18086的尋址方式——直接尋址方式

例MOVAX,[2000H]解:設(shè)DS=3000H;設(shè):(32000H)=1234H由指令得:EA=2000H(16位邏輯地址)物理地址=16×3000H+2000H=32000H(20位,20根地址線)則:AX=1234H指令執(zhí)行過程如圖所示。(注:如用AL替代AX,則AL=34H)16§3-18086的尋址方式——直接尋址方式

2.段超越前綴MOV AX, ES:[500H]3.符號(hào)地址AREA1 EQU 0867H……MOV AX, AREA1等價(jià)為MOV AX, [AREA1]17§3-18086的尋址方式——寄存器間接尋址方式四、寄存器間接尋址方式(RegisterIndirectAddressing)1.含義:操作數(shù)的有效地址放在寄存器中。2.特點(diǎn):使用寄存器:基址寄存器BX、BP,變址寄存器SI、DI。操作數(shù)的物理地址=16×DS+BX/SI/DI或=16×SS+BP3.作用:有效地址可以存放在寄存器中。

18§3-18086的尋址方式——寄存器間接尋址方式例MOVBX,[SI]解:設(shè):DS=1000H,SI=2000H,(12000H)=318BH則:物理地址=16×DS+SI=10000H+2000H=12000H指令執(zhí)行后,BX=318BH,指令執(zhí)行過程如圖所示。19

4.注意:▲寄存器名稱外必須加方括號(hào),以區(qū)別寄存器尋址方式;▲段超越前綴來從默認(rèn)段以外的段中取得數(shù)據(jù);例MOVBX,ES:[SI]▲關(guān)于默認(rèn)段:指定寄存器BX、SI或DI,默認(rèn)操作數(shù)存放在數(shù)據(jù)段DS中;(DS:BX,SI,DI)

指定寄存器BP,默認(rèn)操作數(shù)存放在數(shù)據(jù)段SS中;(SS:BP)

§3-18086的尋址方式——寄存器間接尋址方式20§3-18086的尋址方式——寄存器相對(duì)尋址方式五、寄存器相對(duì)尋址方式(RegisterRelativeAddressing)

1.含義:操作數(shù)的有效地址是基址或變址寄存器的內(nèi)容與8位或16位位移量(Displacement)之和。即[BX]/[BP]EA=+8位偏移量/16位偏移量[SI]/[DI]2.特點(diǎn):使用:BX、BP、SI、DI。操作數(shù)的物理地址=16×DS+BX/SI/DI+COUNT或=16×SS+BP+COUNT

21§3-18086的尋址方式——寄存器相對(duì)尋址方式例MOVBX,COUNT[SI];或:MOVBX,[COUNT+SI]解:設(shè):DS=3000H,SI=2000H,位移量COUNT=4000H,(36000H)=318BH則:物理地址=16×DS+SI+COUNT=30000H+2000H+4000H=36000H指令執(zhí)行后,BX=318BH40300022

3.注意:▲寄存器名稱外必須加方括號(hào),位移量可以在括號(hào)內(nèi),也可以在括號(hào)外;▲段超越前綴來從默認(rèn)段以外的段中取得數(shù)據(jù);例MOVDH,ES:ARRAY[SI]▲關(guān)于默認(rèn)段:指定寄存器BX、SI或DI,默認(rèn)操作數(shù)存放在數(shù)據(jù)段DS中;(DS:BX,SI,DI)

指定寄存器BP,默認(rèn)操作數(shù)存放在數(shù)據(jù)段SS中;

(SS:BP)

§3-18086的尋址方式——寄存器相對(duì)尋址方式23§3-18086的尋址方式——基址變址尋址方式六、基址變址尋址方式(RegisterRelativeAddressing)1.含義:操作數(shù)的有效地址是一個(gè)基址寄存器(BX、BP)的內(nèi)容與一個(gè)變址寄存器(SI、DI)的內(nèi)容之和。2.特點(diǎn):使用的寄存器:基址寄存器BX、BP,變址寄存器SI、DI操作數(shù)的物理地址=16×DS+BX+SI/DI或=16×SS+BP+SI/DI3.注意:▲寄存器SI和DI、BP和BX不能同時(shí)出現(xiàn)在[]中。24§3-18086的尋址方式——基址變址尋址方式例MOVAX,[BX]

[SI];或:MOVBX,[BX+SI]解:設(shè):DS=3000H,SI=0500H,BX=1200H,(31700H)=0ABCDH則:物理地址=16×DS+SI+BX=30000H+0500H+1200H=31700H指令執(zhí)行后,AX=0ABCDH25§3-18086的尋址方式——相對(duì)基址變址尋址方式七、相對(duì)基址變址尋址方式(RelativeBasedIndexedAddressing)

1.含義:操作數(shù)的有效地址是一個(gè)基址寄存器(BX、BP)和一個(gè)變址寄存器(SI、DI)的內(nèi)容,再加上8位或16位位移量之和。即EA=[BX]或[BP]+[SI]或[DI]+8或16位移量2.特點(diǎn):使用的寄存器:基址寄存器BX、BP,變址寄存器SI、DI操作數(shù)的物理地址=16×DS+BX+SI/DI+8/16位位移量或=16×SS+BP+SI/DI+8/16位位移量3.注意:存器SI和DI、BP和BX不能同時(shí)出現(xiàn)在[]中26§3-18086的尋址方式——相對(duì)基址變址尋址方式例MOVAX,MASK[BX]

[SI];或:MOVBX,[MASK+BX+SI]解:設(shè):DS=3000H,SI=0300H,BX=1500H,MASK=0200H,(21A00H)=26BFH則:物理地址=16×DS+SI+BX+MASK=20000H+0300H+1500H+0200H=21A00H指令執(zhí)行后,AX=26BFH27§3-18086的尋址方式——尋址方式總結(jié)

尋址方式總結(jié):▲帶方括號(hào)的地址表達(dá)式必須遵循下列規(guī)則:1.立即數(shù)可以出現(xiàn)在方括號(hào)內(nèi),表示直接地址,如[2000H]。2.只有BX、BP、SI、DI這四個(gè)寄存器可以出現(xiàn)在[]內(nèi),它們可以單獨(dú)出現(xiàn),也可以相加,或與常數(shù)相加,但:BX和BP寄存器、SI和DI寄存器不允許出現(xiàn)在同一個(gè)[]內(nèi)。

3.方括號(hào)表示相加,下面幾種寫法等價(jià):6[BX][SI];[BX+6][SI];[BX+SI+6]28§3-18086的尋址方式——尋址方式總結(jié)4.不同寄存器對(duì)應(yīng)不同的隱含段基址:SS:BP;DS:BX,SI,DI;物理地址=16×相應(yīng)段基址+EAEA=BX/BP+SI/DI+DISP(注:可以是單一寄存器、兩個(gè)寄存器組合、和DISP組合;DISP也可以為0)▲可用段超越前綴修改段基址。29§3-18086的尋址方式——其它八、其它1.隱含尋址:指令中不指明操作數(shù),但有隱含規(guī)定的尋址方式。如:指令DAA;對(duì)寄存器AL中的數(shù)據(jù)進(jìn)行十進(jìn)制數(shù)調(diào)整,結(jié)果仍保留在AL中。2.I/O端口尋址:8086有直接端口和間接端口兩種尋址方式。

▲直接端口尋址方式:指令直接提供端口地址——8位立即數(shù)??稍L問端口00~FFH,即256個(gè)端口。例如,INAL,63H;表示將瑞口63H中的內(nèi)容送進(jìn)AL寄存器

30§3-18086的尋址方式——其它

▲間接端口尋址方式:端口地址由寄存器DX提供,端口號(hào)為0000—FFFFH。例如,MOV DX,213H ;DX=口地址號(hào)213HINAL,DX;AL←端口213H中的內(nèi)容3.一條指令有多種尋址方式:源操作數(shù)和目的操作數(shù)同樣適用上述尋址方法。例MOV[BX],AL解:設(shè):BX=3600H,DS=1000H,AL=05H則:目的操作數(shù)的物理地址=16×DS+BX=10000H十3600H=13600H指令執(zhí)行結(jié)果為(13600H)=05H。313.DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,AL=0030H(1)MOVAX, [100H]直接尋址方式,10100H

物理地址=DS×10H+100H=10000H+0100H=10100H(2)MOVAX, VAL直接尋址方式,10030H

物理地址=DS×10H+VAL=10000H+0030H=10030H

(3)MOVAX, [BX]寄存器間接尋址,10100H

物理地址=DS×10H+BX=10000H+0100H=10100H(4)MOVAX, ES:[BX]寄存器間接尋址,20100H

物理地址=ES×10H+BX=20000H+0100H=20100H2/3/2023(5)MOVAX, [SI]寄存器間接尋址,100A0H物理地址=DS×10H+SI=10000H+00A0H=100A0H(6)MOVAX, [BX+10H]寄存器相對(duì)尋址,10110H物理地址=DS×10H+BX+10H=10000H+0100H+10H=10110H(7)MOVAX, [BP]寄存器間接尋址,35200H物理地址=SS×10H+BP=35000H+0200H=35200H33(8)MOVAX, VAL[BP][SI] 相對(duì)基址變址尋址,352D0H物理地址=SS×10H+BP+SI+VAL=35000H+0200H+00A0H+0030H=352D0H(9)MOVAX, VAL[BX][DI] 相對(duì)基址變址尋址,10154H物理地址=DS×10H+BX+DI+VAL=10000H+0100H+0024H+0030H=10154H(10)MOVAX, [BP][DI] 基址變址尋址,35224H物理地址=SS×10H+BP+DI=35000H+0200H+0024H=35224H2/3/2023§3-2指令的機(jī)器碼表示方法一、機(jī)器語言指令的編碼目的和特點(diǎn)§3-2指令的機(jī)器碼表示方法——目的和特點(diǎn)

匯編語言源程序:用匯編語言(即主要由指令系統(tǒng)組成的語言)編寫的程序。編譯程序執(zhí)行源程序機(jī)器碼運(yùn)算結(jié)果指令通常由操作碼和操作數(shù)兩部分組成?!?086指令系統(tǒng)采用變長(zhǎng)指令,指令的長(zhǎng)度可由1~6字節(jié)組成。35§3-2指令的機(jī)器碼表示方法——指令代碼的編制

二、機(jī)器語言指令代碼的編制(自學(xué))其中,第一個(gè)字節(jié):▲高6位是操作碼100010;▲W位說明傳遞數(shù)據(jù)的類型是字(W=l)還是字節(jié)(W=0);▲D位標(biāo)明數(shù)據(jù)傳送的方向:D=0,數(shù)據(jù)從寄存器傳出;D=1,數(shù)據(jù)傳至寄存器;1.編碼格式說明(MOV指令為例):

15876543210100010DWMODREGR/M 操作碼36§3-2指令的機(jī)器碼表示方法——指令代碼的編制

第二個(gè)字節(jié):▲REG字段:寄存器號(hào),用3位編碼尋址8種不同的寄存器,再根據(jù)第一字節(jié)中W位,選擇8位或16位寄存器。如表3-l所示。(對(duì)段寄存器,REG字段占2位)

例如:REG=010,W=1時(shí)表示尋址DX寄存器;REG=010,W=0時(shí)尋址DL寄存器。37§3-2指令的機(jī)器碼表示方法——指令代碼的編制

▲MOD字段和R/M字段:MOV指令的兩個(gè)操作數(shù)中有一個(gè)必為寄存器,另一個(gè)操作數(shù)可能是寄存器,也可能是存儲(chǔ)器單元,由指令代碼的第二個(gè)字節(jié)個(gè)的MOD和R/M字段指定。如表3-2所示。(24種不同的編碼格式,D8表示8位位移量,D16為16位位移量)對(duì)指令進(jìn)行編碼時(shí),若包含8位位移量,則在編碼后增加一個(gè)宇節(jié)存放位移量disp-L;若包含16位的位移量,則增加2個(gè)字節(jié)存放位移量:第3個(gè)字節(jié)存放位移量的低字節(jié)disp-L,第4個(gè)字節(jié)存放位移量高字節(jié)disp-H。38§3-2指令的機(jī)器碼表示方法——指令代碼的編制

對(duì)MOV指令進(jìn)行編碼的幾個(gè)示例:2.寄存器間傳送指令的編碼:

例求指令MOVSP,BX的機(jī)器碼

解:指令的功能是將BX寄存器的內(nèi)容送到SP寄存器中。從附錄B可知,該指令的操作碼為1000l0;傳送的是字?jǐn)?shù)據(jù),所以w=1;

REG字段:選擇將SP,則REG字段編碼=100;

D位=1,表示數(shù)據(jù)傳至所選的寄存器(SP);MOD=11,因另一個(gè)操作數(shù)BX也是寄存器。從表3-2查得R/M=011。根據(jù)W=l及寄存器名稱為BX,求得指令編碼。39§3-2指令的機(jī)器碼表示方法——指令代碼的編制

3.寄存器與存儲(chǔ)器間傳送指令的編碼

例:求指令MOVCL,[BX+l234H]的機(jī)器碼。解:功能:將有效地址為(BX+1234H)存儲(chǔ)單元中的數(shù)據(jù)字節(jié)傳送到CL寄存器中;指令的編碼如圖3-10中所示。第1、2字節(jié)可通過查表得到;第3字節(jié)存放l6位位移量的低字節(jié)34H;第4字節(jié)存放高字節(jié)12H。所以該指令的編碼為8A8F3412H。40§3-2指令的機(jī)器碼表示方法——指令代碼的編制

4.立即數(shù)尋址指令的編碼立即數(shù)尋址的指令:操作碼+1~2個(gè)字節(jié)用于存放立即數(shù)據(jù)。

例求指令MOV[BX十2100H],0FA50H的機(jī)器碼。解:指令的功能:將16位立即數(shù)FA50H送到有效地址為(BX+2100H)的字存儲(chǔ)單元中;指令編碼如圖3-11中所示;其中:低字節(jié)50H送列〔BX+2100H〕單元,高字節(jié)FAH送到(BX+2101H)單元;指令中不但有16位立即數(shù),還有16位位移量;該指令的6字節(jié)編碼為:C787002150FA。41§3-2指令的機(jī)器碼表示方法——指令代碼的編制

5.包含段寄存器的指令的編碼含有段寄存器的指令,寄存器字段REG占有2位,從表3-1可得,相應(yīng)的編碼為:CS=01,DS=11,ES=00,SS=l0。例求指今MOVDS,AX的機(jī)器碼。解:指令功能:將AX寄存器的內(nèi)容傳送到數(shù)據(jù)段寄存器DS;從附錄B中查到該指令的編碼格式為:10001110MOD0REGR/M;段寄存器DS的編碼為11,即REG字段為11;另一個(gè)操作數(shù)也是寄存器,所以MOD=11,而R/M字段應(yīng)填上AX的三位代碼000;得到該指令的編碼為:8ED8H。

42§3-2指令的機(jī)器碼表示方法——指令代碼的編制

6.段超越前綴指令的編碼該類指令進(jìn)行編碼時(shí),在指令代碼前加一個(gè)8位的段超越的綴代碼,代碼的格式為001××110,其中××位表明段超越寄存器,編碼與上面列出的相同。

例若指令MOV[BX],DL的編碼為8817H,試求指令MOVCS:[BX],DL的代碼。解:該指令的編碼是在不帶段超越前綴的指令代碼8817H前,加上一個(gè)字節(jié)001××110。由于段寄存器CS的代碼為01,所以指令的第1個(gè)字節(jié)的編碼為00101110,即2EH。

可得到該指令的機(jī)器碼為2E8817H43上次課內(nèi)容回顧及問題:1.指令系統(tǒng)的尋找方式有哪些?2.哪些尋址方式與存儲(chǔ)單元有關(guān)?3.這些尋址方式哪種較快?4.源操作數(shù)和目標(biāo)操作數(shù)數(shù)據(jù)類型有什么要求?指令編碼部分(自學(xué)),上機(jī)時(shí)總結(jié)。44§3-38086的指令系統(tǒng)§3-38086的指令系統(tǒng)

——

分類

分為以下六類:

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

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

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

字符串處理指令

控制轉(zhuǎn)移指令

處理器控制指令45一、數(shù)據(jù)傳送指令注:◎數(shù)據(jù)傳送指令共14條;◎除SAHF和POPF指令外,對(duì)標(biāo)志位均沒有影響?!?-38086的指令系統(tǒng)

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

通用數(shù)據(jù)傳送指令MOVPUSHPOPXCHGXLAT字節(jié)或字的傳送入棧指令出棧指令交換字或字節(jié)表轉(zhuǎn)換輸入輸出指令I(lǐng)NOUT輸入輸出地址目標(biāo)傳送指令LEALDSLES裝入有效地址裝入數(shù)據(jù)段寄存器裝入堆棧段寄存器標(biāo)志傳送指令LAHFSAHFPUSHFPOPF標(biāo)志寄存器低字節(jié)裝入AHAH內(nèi)容裝入標(biāo)志寄存器低字節(jié)標(biāo)志寄存器入棧指令出棧,并送入標(biāo)志寄存器重點(diǎn)掌握的指令:MOV、PUSH、POP、XCHG、XLAT、IN、OUT、LEA461.通用數(shù)據(jù)傳送指令(GeneralPurposeDataTranfer):§3-38086的指令系統(tǒng)

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

⑴MOV傳送指令(Move)

指令格式:MOV目的,源指令功能:實(shí)現(xiàn)CPU的內(nèi)部寄存器間或寄存器與存儲(chǔ)器間的數(shù)據(jù)傳送。例:MOVAX,0FF00H;MOV[DI],AX;MOVCX,[1000H];MOVBL,40MOVWORDPTR[SI],01H;MOVAL,BL;47§3-38086的指令系統(tǒng)

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

注意:▲指令中至少要有—項(xiàng)明確說明傳送的是字節(jié)還是字;▲IP寄存器不能用作源操作數(shù)或目的操作數(shù);▲立即數(shù)和CS寄存器不能用作目的操作數(shù);▲除了源操作數(shù)為立即數(shù)的情況外,兩個(gè)操作數(shù)中必有一個(gè)是寄存器,但不能都是段寄存器;這就是說,MOV指令不能在兩個(gè)存儲(chǔ)單元之間直接傳送數(shù)據(jù),也不能在兩個(gè)段寄存器之間直接傳送數(shù)據(jù)。48▲所謂“傳送”,實(shí)值是復(fù)制,把的內(nèi)容復(fù)制到目的操作數(shù),源操作數(shù)內(nèi)容不變。▲目的操作數(shù)和源操作數(shù)不能同時(shí)為內(nèi)存單元。▲目的操作數(shù)和源操作數(shù)不能同時(shí)為段寄存器。▲目的操作數(shù)為段寄存器時(shí),源操作數(shù)不能為立即數(shù)。對(duì)段寄存器賦值必須通過通用寄存器作中介?!?-38086的指令系統(tǒng)

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

這些注意事項(xiàng)基本適合所有指令49§3-38086的指令系統(tǒng)

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

CS一般不為目標(biāo)操作數(shù)50§3-38086的指令系統(tǒng)

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

通常,數(shù)據(jù)通常存放在數(shù)據(jù)段中。例如,某個(gè)程序的數(shù)據(jù)段:

DATA SEGMENT ;數(shù)據(jù)段開始AREA1 DB14H,3BH;定義字節(jié)變量AREA2 DB3DUP(0);復(fù)制操作ARRAY DW3l00H,01A6H;定義字變量STRING DB‘GOOD’

DATA ENDS;數(shù)據(jù)段結(jié)束

匯編后,DATA將被賦予一個(gè)具體的段地址。各變量將自偏移地址0000H開始依次存放,各符號(hào)地址等于它們?cè)跀?shù)據(jù)段中的偏移量。51AREA1的偏移地址為0000H,AREA2的偏移地址為0002H,ARRAY的偏移地址為0005H,STRING的偏移地址為0009H?!?-38086的指令系統(tǒng)

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

數(shù)據(jù)段開始52§3-38086的指令系統(tǒng)

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

例MOVDX,OFFSETARRAY解:ARRAY的偏移地址DX。(OFFSET:取后面的符號(hào)偏移地址的值)設(shè):ARRAY的定義如上圖所示則:DX=0005H例MOVAL,AREA1 ;ALAREA1中的內(nèi)容14H

MOVAREA2,AL ;0002H單元14H

例MOVAX,TABLE[BP][DI]解:將地址為l6×SS+BP+DI+TABLE的字存儲(chǔ)單元中的內(nèi)容送進(jìn)AX。53

§3-38086的指令系統(tǒng)

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

⑵PUSH進(jìn)棧指令

指令格式:PUSH源

指令功能:數(shù)據(jù)入堆棧

工作過程:SP←SP-2;(SP+1,SP)←源源操作數(shù)要求:可以是16位通用寄存器、段寄存器、存儲(chǔ)器中的數(shù)據(jù)字,但不能是立即數(shù)。

…最后一項(xiàng)高地址棧底(SP)壓入彈出棧頂(SS)最大容量64KSP總是指向偶地址單元段址54⑶POP出棧指令指令格式:POP目的指令功能:數(shù)據(jù)出堆棧

工作過程:目的←(SP+1,SP);SP←SP+2;目的操作數(shù)要求:可以是16位通用寄存器、段寄存器、存儲(chǔ)單元,但CS不能作目的操作數(shù)?!詈笠豁?xiàng)高地址棧底(SP)壓入彈出棧頂(SS)最大容量64KSP總是指向偶地址單元段址§3-38086的指令系統(tǒng)

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

5556

§3-38086的指令系統(tǒng)

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

⑷XCHG交換指令(Exchange)

指令格式:XCHG目的,源

指令功能:源操作數(shù)、目的操作數(shù)數(shù)據(jù)交換。操作數(shù)要求:交換可以在寄存器之間、寄存器與存儲(chǔ)器之間進(jìn)行;段寄存器不能作為操作數(shù);不能直接交換兩個(gè)存儲(chǔ)單元中的內(nèi)容。例

設(shè)AX=2000H,DS=3000H,BX=1800H,(3lA00H)=1995H。則執(zhí)行指令XCHGAX,[BX+200H]后,結(jié)果如何?解:把內(nèi)存中的一個(gè)字與AX中的內(nèi)容進(jìn)行交換。源操作數(shù)的物理地址=3000H×10H十1800H十200H=31A00H,指令執(zhí)行后:AX=1995H,(3lA00H)=2000H57

§3-38086的指令系統(tǒng)

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

指令格式:XLAT轉(zhuǎn)換表或:XLAT指令功能:

使累加器(AL)中的一個(gè)值變換為內(nèi)存表格中的某一個(gè)值,一般用來實(shí)現(xiàn)編碼制的轉(zhuǎn)換,即查表功能。XLAT指令使用步驟:使用之前必須先建立一個(gè)表格,表格中的內(nèi)容是所需要轉(zhuǎn)換的代碼;將轉(zhuǎn)換表的起始地址裝入BX寄存器;欲查的某項(xiàng)與表頭地址的位移量AL,即表格最多包含256個(gè)字節(jié);執(zhí)行XLAT指令后,根據(jù)位移量從表中查到轉(zhuǎn)換后的代碼值A(chǔ)L寄存器中。⑸XLAT表轉(zhuǎn)換指令(TableLookup—Translation)58

§3-38086的指令系統(tǒng)

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

例若十進(jìn)制數(shù)字0~9的LED七段碼對(duì)照表如下表所示,試用XLAT指令求數(shù)字5的七段碼值。解:程序如下:

TABELDB40H,79H,24H,30H,19H;建表,表格起始地址為TABLEDB12H,02H,78H,00H,18H ;七段碼存于對(duì)TABLE的;位移量為0~9的單元位移 ……………MOV AL,5 ;AL數(shù)字5的位移量MOV BX,OFFSETTABLE ;BX表格首地址XLATTABLE ;查表得:AL=12H十進(jìn)制數(shù)字七段顯示碼十進(jìn)制數(shù)字七段顯示碼040H512H179H602H224H778H330H800H419H918H59下列指令是否合法?XCHGBX,[BP+SI]XCHGAL,BHPOPCSPUSH1234HMOV[SI],[2000H]MOVCS,BXMOV2000H,AXMOVSI,

[SI+6]§3-38086的指令系統(tǒng)

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

60MOV[BX],20H在MASM5.0下編譯,報(bào)錯(cuò),必須指明數(shù)據(jù)大小,8位/16位。在MASM6.11下編譯,無錯(cuò),匯編程序編譯時(shí)自動(dòng)識(shí)別為MOVWORDPTR[BX],20HMOV[BX],200H在MASM5.0和MASM6.11下編譯,均無錯(cuò),匯編程序編譯時(shí)自動(dòng)識(shí)別為MOVWORDPTR[BX],200H§3-38086的指令系統(tǒng)

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

61

§3-38086的指令系統(tǒng)

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

2.輸入輸出指令(InputandOutput):IN指令:指定端口中的數(shù)據(jù)→累加器OUT指令:累加器中的數(shù)據(jù)→指定端口⑴IN輸入指令(Input)

指令格式:①INAL,端口地址;端口地址(00~FFH)直接包含在IN指令里,或INAX,端口地址;共允許尋址256個(gè)端口。

直接尋址②INAL,DX;端口地址>0FFH時(shí),先將端口號(hào)送DX寄存器,再執(zhí)行輸入操作?;騃NAX,DX;共允許尋址64K個(gè)端口。

間接尋址指令功能:從8位端口讀入一個(gè)字節(jié)到AL寄存器,或從16位端口讀一個(gè)字到AX寄存器。62§3-38086的指令系統(tǒng)

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

注意:

16位端口由兩個(gè)地址連續(xù)的8位端口組成。

16位端口輸入:先將給定端口中的字節(jié)送進(jìn)AL;再把端口地址加1,然后將該端口中的字節(jié)讀入AH。例INAL,0F1H;AL從F1H端口讀入一個(gè)字節(jié)INAX,80H ;AL80H口的內(nèi)容,AH81H口的內(nèi)容MOVDX,310H ;端口地址310H先送入DX中INAL,DX;AL310H端口的內(nèi)容

63§3-38086的指令系統(tǒng)

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

⑵OUT輸出指令(Output)指令格式:

①OUT端口地址,AL;端口地址(00~FFH)直接包含在IN指令里,

或OUT端口地址,AX;共允許尋址256個(gè)端口。

直接尋址

②OUTDX,AL;端口地址>0FFH時(shí),先將端口號(hào)送DX寄存器,再執(zhí)行輸出操作。

或OUTDX,AX;當(dāng)共允許尋址64K個(gè)端口。

間接尋址指令功能:

將AL中的一個(gè)字節(jié)寫到一個(gè)8位端口,或把AX中的一個(gè)字寫到一個(gè)16位端口。注意:對(duì)16位端口進(jìn)行輸出操作時(shí),是對(duì)兩個(gè)連續(xù)的8位端口進(jìn)行輸出操作。64§3-38086的指令系統(tǒng)

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

例OUT85H,AL ;85H端口AL內(nèi)容

MOVDX,0FF4H ;端口地址DX=0FF4H OUTDX,AL ;0FF4H端口AL內(nèi)容MOVDX,300H ;DX指向300HOUTDX,AX ;300H端口AL內(nèi)容,301H端口AH內(nèi)容653.地址目標(biāo)傳送指令(AddressObjectTransfers):§3-38086的指令系統(tǒng)

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

共三條指令:傳送地址碼。可傳送操作數(shù)的段地址和偏移地址。⑴LEA取有效地址指令(LoadEffectiveAddress)指令格式:LEA目的,源指令功能:源操作數(shù)地址的偏移量→目的操作數(shù)所在寄存器要求:

源操作數(shù):必須是存儲(chǔ)單元;

目的操作數(shù):必須是一個(gè)除段寄存器之外的16位寄存器。注意:與MOV指令的區(qū)別。66§3-38086的指令系統(tǒng)

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

例假設(shè)SI=1000H,DS=5000H,(51000H)=1234H

LEABX,[SI] ;執(zhí)行完該指令后,BX=l000H

MOVBX,[SI] ;執(zhí)行完該指令后,BX=1234H例LEABX,TABLE ;可用MOV指令代替LEA指令

MOVBX,OFFSETTABLE ;兩條指令等價(jià)。

例某數(shù)組含20個(gè)元素,每個(gè)元素占一個(gè)字節(jié),符號(hào)為:0~19。設(shè)DI指向數(shù)組開頭處,把序號(hào)為6的元素的偏移地址送到BX中,用什么指令來實(shí)現(xiàn)?解:LEABX,6[DI] ;只能用LEA實(shí)現(xiàn),不能用MOV67§3-38086的指令系統(tǒng)

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

⑵LDS將雙字指針?biāo)偷郊拇嫫骱虳S指令(LoadPointerusingDS)指令格式:LDS 目的,源指令功能:源操作數(shù)指定的存儲(chǔ)單元中的4字節(jié)地址指針→一對(duì)目的寄存器。其中:前兩個(gè)字節(jié)(偏移地址)→指定的目的寄存器;(常用SI寄存器)后兩個(gè)字節(jié)(段地址)→DS寄存器。操作數(shù)要求:源操作數(shù):必須是存儲(chǔ)單元(該單元開始的連續(xù)4個(gè)字節(jié)存放一個(gè)變量的地址指針);目的操作數(shù):必須是16位寄存器,常用SI寄存器,但不能用段寄存器。68例設(shè):DS=1200H,(12450H)=0F346H,(12452H)=0A90H。執(zhí)行指令LDSSI,[450H]后,結(jié)果如何?解:SI=0F346H,DS=0A90H§3-38086的指令系統(tǒng)

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

69§3-38086的指令系統(tǒng)

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

⑶LES將雙字指針?biāo)偷郊拇嫫骱虴S指令(LoadPointerusingES)指令格式:LES 目的,源指令功能:源操作數(shù)指定的存儲(chǔ)單元中的4字節(jié)地址指針→一對(duì)目的寄存器。其中:前兩個(gè)字節(jié)(偏移地址)→指定的目的寄存器;(常用DI寄存器)后兩個(gè)字節(jié)(段地址)→ES寄存器。例設(shè):DS=0100H,BX=0020H,(01020H)=0300H,(01022H)=0500H。執(zhí)行指令LESDI,[BX]后,結(jié)果如何?解:DI=0300H,ES=0500H704.標(biāo)志傳送指令(FlagTransfers):§3-38086的指令系統(tǒng)

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

讀取標(biāo)志指令:LAHF(5、3、0為任意值)--標(biāo)志寄存器低8位→AH設(shè)置標(biāo)志指令:SAHF--標(biāo)志寄存器低8位←AH把標(biāo)志寄存器的內(nèi)容壓入堆棧:PUSHF從堆棧彈出到標(biāo)志寄存器:POPF1511109876543210OFDFIFTFSFZFAFPFCFAHD7D6D4D2D0參見“處理器控制命令”71§3-38086的指令系統(tǒng)

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

⑴LAHF標(biāo)志送到AH指令(LoadAHfromFlag)指令格式:LAHF指令功能:標(biāo)志寄存器SF、ZF、AF、PF和CF

AH寄存器的位7、6、4、2和0。注意:◎位5、3、1的內(nèi)容未定義,是任意值?!驁?zhí)行這條指令后,標(biāo)志位本身并不受影響。1511109876543210OFDFIFTFSFZFAFPFCFAHD7D6D4D2D072§3-38086的指令系統(tǒng)

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

⑵SAHFAH送標(biāo)志寄存器(StoreAHintoFlags)

指令格式:SAHF指令功能:AH內(nèi)容

→標(biāo)志寄存器。注意:◎位5、3、1的內(nèi)容未定義,是任意值?!驁?zhí)行這條指令后,高位標(biāo)志并不受影響。

1511109876543210OFDFIFTFSFZFAFPFCFAHD7D6D4D2D073§3-38086的指令系統(tǒng)

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

⑶PUSHF標(biāo)志入棧指令(PushFlagontoStack)指令格式:PUSHF指令功能:整個(gè)標(biāo)志寄存器的內(nèi)容

堆棧;修改堆棧指針,使SPSP-2;指令執(zhí)行后對(duì)標(biāo)志位無影響。⑷POPF標(biāo)志出棧指令(PopFlagoffStack)指令格式:POPF指令功能:堆棧指針SP所指的一個(gè)字

標(biāo)志寄存器PSW;修改堆棧指針,使SPSP+2。注意:▲要成對(duì)使用PUSHF和POPF,可對(duì)標(biāo)志寄存器進(jìn)行保存和恢復(fù)?!S迷冢哼^程(子程序)調(diào)用,中斷服務(wù)程序,對(duì)主程序的狀態(tài)(即標(biāo)志位)進(jìn)行保護(hù)?!部捎脕砀淖冏粉櫂?biāo)志TF。在8086指令系統(tǒng)中沒有直接改變TF(D8位)的指令。74§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令二、算術(shù)運(yùn)算概述:算術(shù)運(yùn)算指令可處理4種類型的數(shù)無符號(hào)二進(jìn)制整數(shù)帶符號(hào)二進(jìn)制整數(shù)指令無符號(hào)壓縮十進(jìn)制整數(shù)(PackedDecimal)無符號(hào)非壓縮十進(jìn)制整數(shù)(UnpackedDecimal)

一個(gè)8位二進(jìn)制數(shù)可看成4種不同類型的數(shù),所表示的數(shù)值亦不同。75§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令數(shù)的表示:二進(jìn)制數(shù):可以是8位或16位,若是帶符號(hào)數(shù),則用補(bǔ)碼表示。壓縮十進(jìn)制數(shù):一個(gè)字節(jié)中存放兩個(gè)BCD碼十進(jìn)制數(shù)。非壓縮十進(jìn)制數(shù):—個(gè)字節(jié)的低半字節(jié)存放十進(jìn)制數(shù),高半字節(jié)為全零。例如,對(duì)十進(jìn)制數(shù)字58:壓縮十進(jìn)制數(shù)表示:只需一個(gè)字節(jié),即01011000B;非壓縮十進(jìn)制數(shù)表示:需兩個(gè)字節(jié),即00000101B

和00001000B。4種數(shù)的類型的表示方法如下:二進(jìn)制碼(B)十六進(jìn)制(H)無符號(hào)二進(jìn)制(D)帶符號(hào)二進(jìn)制(D)非壓縮十進(jìn)制壓縮十進(jìn)制00000111077+77071000100189137-119無效8911000101C5197-59無效無效76§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令注意:算術(shù)運(yùn)算指令處理的數(shù)都必須是有效的,否則會(huì)導(dǎo)致錯(cuò)誤的結(jié)果。8086/8088指令系統(tǒng)提供:加、減、乘、除四種基本運(yùn)算指令:處理無符號(hào)或帶符號(hào)的8位/16位二進(jìn)制數(shù)的算術(shù)運(yùn)算;調(diào)整操作指令:進(jìn)行壓縮的或非壓縮的十進(jìn)制數(shù)的算術(shù)運(yùn)算;絕大部分算術(shù)運(yùn)算指令都影響狀態(tài)標(biāo)志位。加法和減法運(yùn)算指令:帶符號(hào)數(shù)和無符號(hào)數(shù)的加法和減法的運(yùn)算可以用同一條加法或減法指令來完成。乘法和除法運(yùn)算:分別設(shè)置不同乘、除法指令。77§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令的種類:加法ADDADCINCAAADAA加法帶進(jìn)位的加法增量加法的ASCII調(diào)整加法的十進(jìn)制調(diào)整減法SUBSBBDECNEGCMPAASDAS減法帶借位的減法減量取補(bǔ)比較減法的ASCII調(diào)整減法的十進(jìn)制調(diào)整乘法MULIMULAAM無符號(hào)數(shù)乘法整數(shù)乘法乘法的ASCII調(diào)整除法DIVIDIVAADCBWCWD無符號(hào)數(shù)除法整數(shù)除法除法的ASCII調(diào)整把字節(jié)轉(zhuǎn)換成字把字轉(zhuǎn)換成雙字781.加法指令(Addition)⑴ADD加法指令(Addition)指令格式:ADD目的,源指令功能:目的源十目的⑵ADC帶進(jìn)位的加法指令(AdditionwithCarry)指令格式:ADC目的,源指令功能:目的源十目的十CF操作數(shù)的要求:(包括上兩條指令)源操作數(shù):可以是寄存器、存儲(chǔ)器、立即數(shù);目的操作數(shù):只能用寄存器、存儲(chǔ)單元。注意:★源、目的操作數(shù)不能同時(shí)為存儲(chǔ)器,且類型必須一致,即都是字節(jié)或字;★這兩條指令影響的標(biāo)志位為:CF、OF、PF、SF、ZF和AF?!?-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令79§3-38086的指令系統(tǒng)

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

例兩種加法指令的實(shí)例ADDAL,18H ;ALAL十18HADCBL,CL ;BLBL十CL十CFADCAX,DX ;AXAX十DX十CFADDAL,COST[BX];AL內(nèi)容和地址=DS:(COST+BX)的存儲(chǔ)字節(jié)相加,結(jié)果送AL.ADDCOST[BX],BL ;將BL與物理地址=DS:(COST十BX)的存儲(chǔ)字節(jié)相加,結(jié)果留在該存儲(chǔ)單元中.例用加法指令對(duì)兩個(gè)8位16進(jìn)制數(shù)5EH和3CH求和,并分析加法運(yùn)算指令執(zhí)行后對(duì)標(biāo)志位的影響。解:MOVAL,5EH ;AL=5EH(94)MOVBL,3CH ;BL=3CH(60)ADDAL,BL ;結(jié)果AL=9AH80§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令討論:

ADD對(duì)標(biāo)志位的影響▲兩個(gè)數(shù)的相加過程:010111105EH=94+00111100即:+3CH=60100110109AH=154運(yùn)算后標(biāo)志位:ZF=0,AF=1,CF=0,SF=l,PF=1,OF=1?!鴮?duì)標(biāo)志的解釋:人為決定(程序員)①兩個(gè)加數(shù)都看成無符號(hào)數(shù)時(shí),運(yùn)算結(jié)果為9AH,即十進(jìn)制數(shù)154。在這種情況下,SF和OF都沒有意義,我們只關(guān)心ZF和CF標(biāo)志,在BCD碼運(yùn)算或奇偶校驗(yàn)時(shí)才考慮AF或PF標(biāo)志。81②兩個(gè)加數(shù)都當(dāng)成帶符號(hào)數(shù)時(shí),符號(hào)標(biāo)志SF和溢出標(biāo)志OF很重要,而進(jìn)位標(biāo)志CF沒有意義。帶符號(hào)數(shù)能表示的范圍-128~+127,而本例中,兩個(gè)正數(shù)94和60相加,其和為154,由于154超過了范圍,即產(chǎn)生了溢出,OF=1§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令82進(jìn)位標(biāo)志CF(CarryFlag)當(dāng)加減運(yùn)算結(jié)果的最高有效位(D15或D7)有進(jìn)位(加法)或借位(減法)時(shí),進(jìn)位標(biāo)志置1,即CF=1;否則CF=0。無符號(hào)數(shù)?有符號(hào)數(shù)?

針對(duì)無符號(hào)整數(shù),判斷加減結(jié)果是否超出表達(dá)范圍。N個(gè)二進(jìn)制位表達(dá)無符號(hào)整數(shù)的范圍:0~2N-18位:0~+25516位:0~+6553532位:0~+232-1§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令83進(jìn)位標(biāo)志CF:舉例8位二進(jìn)制數(shù)相加: 00111010+01111100=10110110十六進(jìn)制表達(dá):3A+7C=B6轉(zhuǎn)換成十進(jìn)制數(shù):58+124=182沒有產(chǎn)生進(jìn)位:CF=08位二進(jìn)制數(shù)相加:

10101010+01111100=[1]00100110十六進(jìn)制表達(dá):AA+7C=[1]26轉(zhuǎn)換成十進(jìn)制數(shù):170+124=294=256+38產(chǎn)生進(jìn)位:CF=10<182<255進(jìn)位1表達(dá)256§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令84溢出標(biāo)志OF(OverflowFlag)有符號(hào)數(shù)加減結(jié)果有溢出,則OF=1;否則OF=0。針對(duì)有符號(hào)整數(shù),判斷加減結(jié)果是否超出表達(dá)范圍。N個(gè)二進(jìn)制位表達(dá)有符號(hào)整數(shù)的范圍:-2N-1~2N-1-18位:-128~+12716位:-32768~+3276732位:-231~+231-1§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令85§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令溢出標(biāo)志OF:舉例8位二進(jìn)制數(shù)相加: 00111010+01111100=10110110十六進(jìn)制表達(dá):3A+7C=B6轉(zhuǎn)換成十進(jìn)制數(shù):58+124=182超出范圍:OF=18位二進(jìn)制數(shù)相加:

10101010+01111100=[1]00100110十六進(jìn)制表達(dá):AA+7C=[1]26轉(zhuǎn)換成十進(jìn)制數(shù):-86+124=38沒有超出范圍:OF=0182>127補(bǔ)碼AAH表達(dá)-8686§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令進(jìn)位和溢出的區(qū)別進(jìn)位標(biāo)志反映無符號(hào)整數(shù)運(yùn)算結(jié)果是否超出范圍有進(jìn)位,加上進(jìn)位或借位后運(yùn)算結(jié)果仍然正確溢出標(biāo)志反映有符號(hào)整數(shù)運(yùn)算結(jié)果是否超出范圍有溢出,運(yùn)算結(jié)果已經(jīng)不正確處理器按照無符號(hào)整數(shù)求得結(jié)果在設(shè)置進(jìn)位標(biāo)志CF的同時(shí),根據(jù)是否超出有符號(hào)整數(shù)的范圍設(shè)置溢出標(biāo)志OF。應(yīng)該利用哪個(gè)標(biāo)志,由程序員決定!操作數(shù)是無符號(hào)數(shù),關(guān)心進(jìn)位操作數(shù)是有符號(hào)數(shù),注意溢出87§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令溢出標(biāo)志的判斷處理器硬件判斷規(guī)則最高位和次高位同時(shí)有進(jìn)位或同時(shí)無進(jìn)位,無溢出;最高位和次高位進(jìn)位狀態(tài)不同,有溢出人工判斷的簡(jiǎn)單規(guī)則只有當(dāng)兩個(gè)相同符號(hào)數(shù)相加(含兩個(gè)不同符號(hào)數(shù)相減),而運(yùn)算結(jié)果的符號(hào)與原數(shù)據(jù)符號(hào)相反時(shí),產(chǎn)生溢出;其他情況下,不會(huì)產(chǎn)生溢出

00111010+01111100

10110110正數(shù)正數(shù)負(fù)數(shù)最高位次高位88§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令奇偶標(biāo)志PF(ParityFlag)當(dāng)運(yùn)算結(jié)果最低8位中“1”的個(gè)數(shù)為零或偶數(shù)時(shí),PF=1;否則PF=0舉例8位二進(jìn)制數(shù)相加:

00111010+01111100=10110110

“1”的個(gè)數(shù)為5個(gè):PF=08位二進(jìn)制數(shù)相加:

10000100+01111100=[1]00000000

“1”的個(gè)數(shù)為0個(gè):PF=1結(jié)果進(jìn)位僅最低8位“1”的個(gè)數(shù)89§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令零標(biāo)志ZF(ZeroFlag)運(yùn)算結(jié)果為0,則ZF=1,否則ZF=0結(jié)果是0,ZF標(biāo)志不是0!舉例8位二進(jìn)制數(shù)相加:

00111010+01111100=10110110

結(jié)果不是0,ZF=08位二進(jìn)制數(shù)相加:

10000100+01111100=[1]00000000

結(jié)果是0,ZF=1結(jié)果進(jìn)位90⑶INC增量指令(Increment)指令格式:INC目的指令功能:目的目的十1操作數(shù)的要求:

通用寄存器、內(nèi)存。注意:▲這條指令主要用在循環(huán)程序中,對(duì)地址指針和循環(huán)計(jì)數(shù)器等進(jìn)行修改;§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令91§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令▲指令執(zhí)行后影響AF、OF、PF、SF和ZF,但不影響進(jìn)位標(biāo)志CF?!撝噶钪挥幸粋€(gè)操作數(shù)時(shí),如果要使內(nèi)存單元的內(nèi)容增1,程序中必須說明該存儲(chǔ)單元是字還是字節(jié)。INC指令的兩個(gè)應(yīng)用例子:例INCBL ;BL寄存器中內(nèi)容增1

INCCX ;CX寄存器中內(nèi)容增1例

INCBYTEPRR[BX];內(nèi)存字節(jié)單元內(nèi)容增1INCWORDPTR[BX];內(nèi)存字單元內(nèi)容增1其中:PTR為類型說明符,前面加BYTE說明操作數(shù)類型為字節(jié),加WORD則說明操作數(shù)類型為字。92§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令⑷AAA加法的ASCII調(diào)整指令(ASCIIAdjustforAddition)指令格式:AAA指令功能:將AL寄存器中的運(yùn)算結(jié)果調(diào)整為1位非壓縮十進(jìn)制數(shù),仍保留在AL。如果AF=1,表示向高位有進(jìn)位,則進(jìn)到AH寄存器中。使用前提:用ADD或ADC指令對(duì)兩個(gè)非壓縮十進(jìn)制數(shù)或ASCII碼表示的十進(jìn)制數(shù)作加法,運(yùn)算結(jié)果已存在AL。(注:非壓縮十進(jìn)制數(shù)的高4位為全0,低4位為十進(jìn)制數(shù)字0~9。例如,將9表示成00001001)

93調(diào)整過程:若AL低4位>9或AF=1

則:①ALAL十6②用與操作(∧)將AL高4位清0③AF置1,CF置1,AHAH十l

否則:將AL寄存器的高4位清0。例若AL=BCD9,BL=BCD5,求兩數(shù)之和。解:設(shè)AH=0,則運(yùn)算過程如下:§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令94§3-38086的指令系統(tǒng)

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

ADD AL,BL ; 00001001……09H ;+ 00000101……05H ;______________________________ AAA ; 00001110……低4位>9 ;+ 00000110……加6調(diào)整 ;______________________________ ; 00010100 ;∧ 00001111……清高4位 ;______________________________ ; 00000100……AL=04H ; CF=1,AF=1,AH=1 ;結(jié)果為AX=0104H,表示非壓縮十進(jìn)制數(shù)14ASCII碼表示的十進(jìn)制數(shù),高半字節(jié)均為3,運(yùn)算時(shí)需用AND指令將它屏蔽。只要使用AAA指令,可以不必屏蔽高半字節(jié),便能在AX中得到一個(gè)正確的非壓縮十進(jìn)制數(shù)。95§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令例求ASCII碼表示的數(shù)9(39H)與5(35H)之和。解:設(shè)AH=0,則運(yùn)算過程如下:

MOV AL,‘9’ ;AL=39H MOV BL,‘5’ ;BL=35H ADD AL,BL ; 00111001……‘9’ ;+ 00110101……‘5’ ;______________________________ AAA ; 01101110……低4位>9 ;+ 00000110……加6調(diào)整 ;______________________________ ; 01110100 ;∧ 00001111……清高4位 ;______________________________ ; 00000100……AL=4 ; CF=1,AF=1,AH=1 ;結(jié)果為AX=0104H,表示非壓縮十進(jìn)制數(shù)14在AAA指令后加上一條“或”指令ORAX,3030H,便使AX中的結(jié)果變成了ACSII碼3134H。96§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令⑸DAA加法的十進(jìn)制調(diào)整指令(DecimalAdjustforAddition)指令格式:DAA指令功能:將兩個(gè)壓縮BCD數(shù)相加后的結(jié)果調(diào)整為正確的壓縮BCD數(shù)。使用前提:相加后的結(jié)果必須在AL中,才能使用DAA指令。調(diào)整過程:①若AL的低4位>9或AF=1,則ALAL十6,對(duì)低4位進(jìn)行調(diào)整;②若AL的高4位>9或CF=1,則ALAL十60H,對(duì)高4位進(jìn)行調(diào)整,并使CF置1,否則CF置0。97§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令例若AL=BCD38,BL=BCDl5,求兩數(shù)之和。解:運(yùn)其過程如下: ADD AL,BL ; 00111000……38H ;+ 00010101……15H ;______________________________ DAA ; 01001101……低4位>9 ;+ 00000110……加6調(diào)整 ;______________________________ ; 01010011……AL=53H ;結(jié)果為:AL=BCD53,CF=0調(diào)整過程:①若AL的低4位>9或AF=1,則ALAL十6,對(duì)低4位進(jìn)行調(diào)整;②若AL的高4位>9或CF=1,則ALAL十60H,對(duì)高4位進(jìn)行調(diào)整,并使CF置1,否則CF置0。98§3-38086的指令系統(tǒng)

——算術(shù)運(yùn)算指令例若AL=BCD88,BL=BCD49,求兩數(shù)之和。解:運(yùn)算過程為: ADD AL,BL ; 10001000……88H ;+ 01001001……49H ;______________________________ DAA ; 11010001……AF=1,低4位<9 ;+ 00000110……加6調(diào)整 ;______________________________ ; 11010111……調(diào)整后,高4位>9 ;+ 01100000……加60H調(diào)整 ;______________________________ ; 00110111……AL=37H ;結(jié)果為:AL=BCD37,CF=1調(diào)整過程:①若AL的低4位>9或AF=1,則ALAL十6,對(duì)低4位進(jìn)行調(diào)整;②若AL的高4位>9或

溫馨提示

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