《計算機組成與結(jié)構(gòu)》教學課件教案第4章 指令系統(tǒng)_第1頁
《計算機組成與結(jié)構(gòu)》教學課件教案第4章 指令系統(tǒng)_第2頁
《計算機組成與結(jié)構(gòu)》教學課件教案第4章 指令系統(tǒng)_第3頁
《計算機組成與結(jié)構(gòu)》教學課件教案第4章 指令系統(tǒng)_第4頁
《計算機組成與結(jié)構(gòu)》教學課件教案第4章 指令系統(tǒng)_第5頁
已閱讀5頁,還剩144頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章

指令系統(tǒng)

指令格式和操作碼的擴展技術(shù)

4.14.3指令系統(tǒng)

4.1.1指令格式

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

操作碼的擴展技術(shù)

4124.3.2算術(shù)運算指令

4.3.3邏輯指令

4.2尋址方式4.3.4串處理指令

4.2.1與數(shù)據(jù)有關(guān)的尋址方式4.3.5控制轉(zhuǎn)移指令

4.2.2與轉(zhuǎn)移地址有關(guān)的尋址方式4.3.6處理器控制指令

學習指令的要點

?:?指令的功能一一該指令能夠?qū)崿F(xiàn)何種操作。通常指令助

記符就是指令功能的英文單詞或其縮寫形式。

?指令支持的尋址方式一一該指令中的操作數(shù)可以采用何

種尋址方式。

指令對標志的影響一一該指令執(zhí)行后是否對各個標志位

有影響,以及如何影響。

其他方面一一該指令其他需要特別注意的地方,如指令

執(zhí)行時的約定設置、必須預置的參數(shù)、隱含使用的寄存

器等。

預備知識

1、地址線與尋址能力的關(guān)系

2、數(shù)據(jù)線與機器字長的關(guān)系

>20根地址線:尋址能力1MB

地址范圍00000H?FFFFFH(1MB)

印器字長16位:僅能表示地址范0000H?FFFFH(64KB)

?地址的表示方法:邏輯地址和物理地址

》形式地址:表示在指令中的操作數(shù)地址

物理地址:用形式地址并結(jié)合某些規(guī)則,可以計算出操作

數(shù)在存儲器中的存儲單元地址.

,邏輯地址的表示段地址:偏移地址

偏移地址又稱有效地址(EA)

預備知識

?(存儲器的分段)

[16位的R中如何訪問20位地址的M空間小段?]

解決方法:小段的首地址

決F1MB的M分成很多邏輯段;00000H?0000FH

00010H?0001FH

海16個字節(jié)為一小段,共有64K個小段

00020H?0002FH

???

段起始地址:小段首地址

FFFFOH?FFFFFH

段的大?。?4K范內(nèi)的任意字節(jié)

制之間可以間隔;緊密相連;部分重疊;完全重疊

將邏輯地址一物理地址,即可訪問M

預備知識

存儲器的邏輯分段:

?8086對邏輯段要求:

-段地址低4位均為0

-每段最大不超過64KB

?8086對邏輯段并不要求:

-必須是64KB

-各段之間完全分開(即可以重疊)

[是否M中每個單元都可做段起點(段地址)?:

預備知識

物理地址的形成")

計算公式:物理地址=段地址X16D+偏移地址

物理地址=段地址x10H+偏移地址

16位段地址0000

+16位偏移地址

20位物理地址

例:(DS)=2100H,(BX)=0500H

(PA)=21000H+0500H=21500H

預備知識

(如何分配各個邏輯段)

濯序的指令序列必須安排在代碼段;

濯序使用的堆棧一定在堆棧段;

濯序中的數(shù)據(jù)默認是安排在數(shù)據(jù)段,

也經(jīng)常安排在附加段,尤其是串操作的

目的區(qū)必須是附加段。

》數(shù)據(jù)的存放比較靈活,實際上可以存放在

任何一種邏輯段中。

預備知識

段寄存器的使用規(guī)定

訪問存儲器的方式可超越偏移地址

取指令無IP

堆棧操作無SP

一般數(shù)據(jù)訪問CSESSS有效地址EA

有效地址EAI

BP基址的尋址方式CSESDS

串操作的源操作數(shù)CSESSS-

串操作的目的操作數(shù)無DI

預備知識

(存儲器—)存儲單元的內(nèi)容

小端方式:“低對低、高對高”的存儲形式

?一個字要占用相繼的兩個字節(jié)

?低位字節(jié)存入低地址,高位字節(jié)存入高地址

?字單元地址用它的低地址來表示

?機器以偶地址訪問(讀/寫)存儲器

?存儲單元的內(nèi)容:一個存儲單元中存放的信息。

?存儲單元的內(nèi)容可以重復取出,直到存入新的信息;

?同一地址既可看成字節(jié)單元的內(nèi)容,又可看成字(雙字)

單元的內(nèi)容。

預備知識

存儲器存儲單元的內(nèi)容的表示

地址

1001111110000H

0010011010001H

0100100010002H

1000001110003H

0101110010004H

1010001010005H浦訪問兩次內(nèi)存

字節(jié)內(nèi)容(10000H)=9FH;(10001H)=^6H

字內(nèi)容(10000H)=269FH;(10001H)=4826H

雙字內(nèi)容(10000H)=8348269FH

指令系統(tǒng)

?指令的一般格式

/

[標號:]操作碼[操作數(shù)][;注釋]

\________________________________________________________________________________________________________________

標號:給指令所在的地址取名字。

注釋:說明程序,匯編程序不對它作任何處理。

操作碼:指計算機所要執(zhí)行的操作,是一種助記符。

操作數(shù):指出在指令執(zhí)行過程中所需要的操作數(shù),即指出

操作數(shù)存放于何處一一CPU內(nèi)部的寄存器或內(nèi)存儲器。

?該字段可以是操作數(shù)本身外,也可以是操作數(shù)地址或

是地址的一部分,還可以是其它有關(guān)操作數(shù)的信息。

?操作數(shù)通常為是0個-一兩個。

?8086指令系統(tǒng)的指令大多數(shù)是雙操作數(shù)指令。

]教學進程

指令系統(tǒng)

?8086指令系統(tǒng)的指令大多數(shù)是雙操作數(shù)指令。

雙操作數(shù)指令格式:操作碼目的操作數(shù),源操作數(shù)

其中:①源操作數(shù):直接給出參加指令操作的操作數(shù)本

身,或指出操作數(shù)放在什么地方;

②目的操作數(shù):指出參加指令操作的操作數(shù)放在何

處,并指出操作結(jié)果送至何處。

③指令執(zhí)行前后,源操作數(shù)不變。

?操作數(shù)的形式(3種)

A立即數(shù):操作數(shù)以常量形式出現(xiàn)(指源操作數(shù))

淆存器操作數(shù):要操作的數(shù)據(jù)存在R中。

訥存操作數(shù):要操作的數(shù)據(jù)存在M中。

4.1尋址方式

(指令的尋址方式)就是尋找操作數(shù)所在地址的方法。

像作數(shù)可能在哪?)

》物理地址

濯輯地址:[段地址:段內(nèi)偏移量]

BVJ

1='址方式:或者是尋找操作數(shù)有效地址(EA)的方法。

(有效地址(EA)的構(gòu)成)

①位移量:disp8位或disp16位不同的組合方式

②基址寄存器:存放在BX或BP中的內(nèi)容

③變址寄存器:存放在SI或DI中的內(nèi)容不同的尋址方式

]教學進程

4.1.1與數(shù)據(jù)有關(guān)的尋址方式(7種)

?11.立即尋址一一指令中直接給出操作數(shù)

例如m(MOVAL,34H)

指令執(zhí)行后,(AL)二34H

例如:(MOVAX,1234H)

指令執(zhí)行后,(AX)=1234示意圖如下:

I?教學進程

4.1.1與數(shù)據(jù)有關(guān)的尋址方式(7種)

?:2.寄存器尋址一一指令中給出存儲操作數(shù)的寄存器號

即操作數(shù)放在CPU內(nèi)部寄存器AX、BX、CX、DX、

DI、SI、SP和BP中,不需要訪問存儲器。

例如:(MOVAX,BX)

若執(zhí)行前(AX)=1234H,(BX)=56EDH,

則執(zhí)行后(AX)=56EDH,BX內(nèi)容不變。示意圖如下:

AHAL]BHBL

演示1

AX56EDBX56ED

A

操作數(shù)送寄存器AX演示2

??一教學進程

4.1.1與數(shù)據(jù)有關(guān)的尋址方式(7種)

3.直接尋址一一有效地址EA由指令直接給出。

物理地址二(DS)X10H+EA

例如AX,[2000H]二)

默認的段寄存器是DS,如(DS)=3000H,

則物理地址PA=3000HX10H+2000H

例如:(MOVAX,ES:[2000H])

物理地址PA=(ES)X10H+2000H

4.L1與數(shù)據(jù)有關(guān)的尋址方式(7種)

3.直接尋址__

例如:(M°VAX,[2000H])如(DS)=3000H,

存儲器低地址

DSL3000xlOH

高地址

演示1演示2

]教學進程

4.1.1與數(shù)據(jù)有關(guān)的尋址方式(7種)

4.寄存器間接尋址

—指令中直接給出操作數(shù)EA;

EA在基址寄存器BP、BX或變址寄存器SI、DI中,

而操作數(shù)則在存儲器中。

7

BX、SI、DI作間址寄存器,指示數(shù)據(jù)段中的數(shù)據(jù);

BP作間址寄存器,則指示的是堆棧段中的數(shù)據(jù)。

例如:(MOVAX,[BX]篇(DS)=3000H,(BX)=2000H

貝UEA=(BX)=2000H

物理地址PA=30000H+2000H

執(zhí)行情況如圖

(AX)=(21000H)=50A0H

]教學進程

4.L1與數(shù)據(jù)有關(guān)的尋址方式(7種)

?|4.寄存器間接尋址

例如《MOVAX,[BX])

執(zhí)行情況如圖

DS|3000xlOH存儲器

低地址

+BXI2000I

32000?操作碼代

操作碼看

AHAL

IVIII

演示1AX123432000皿

]數(shù)

?--------/J34H據(jù)

操作數(shù)送寄存器AX12段

演示2

、高地址

]教學進程

4.1.1與數(shù)據(jù)有關(guān)的尋址方式(7種)

5.寄存器相對尋址

除有段跨越前綴者外

(BX)

*位位移量對于寄存器為BX、SI、

(BP)

有效地址4+DI的情況下,段寄存器

(SI)16位

用DS;

(DI)

寄存器用BP,則使用SS

例如:(MOVAX,COUNT[SI])

段寄存器的內(nèi)容作為段

或(MOVAX,[COUNT+SI])\地址。

若(DS)=3000H,(SI)=2000H,

C0UNT=3000H

則PA=35000H;

若(35000H)=1234H,則(AX)=1234H

]教學進程

4.1J與數(shù)據(jù)有關(guān)的尋址方式(7種)

■15.寄存器相對尋址

4.1.1與數(shù)據(jù)有關(guān)的尋址方式(7種)

6.基址變址尋址

|(BX)+(SI)

有效地址=

(BP)(DI)

》使用BX作為基址寄存器,

例如:@0VAX,[BX][SI])

則數(shù)據(jù)默認在數(shù)據(jù)段;

如(DS)=2100H

》若使用BP作為基址寄存器,

(BX)=0158H,

則默認在堆棧段;

(SI)=1200H,沈許使用段跨越前綴

則PA=22358H;

若(22358H)=1234H,

則(AX)=1234H

1教學進程

4.1.1與數(shù)據(jù)有關(guān)的尋址方式(7種)

6.基址變址尋址

操作數(shù)送寄存器AX

演示1演示2高地址

]教學進程

4?1.1與數(shù)據(jù)有關(guān)的尋址方式(7種)

?;7.相對基址變址尋址

I郵)+(SI)*位位移量

有效地址=\+<

(BP)l(DI)I16位

例如:(MOVAX,MASK[BX][SI])

如(DS)=2100H(BX)=0158H,

(SI)=10A5H,MASK=0134H

貝!)PA=2148CH;

若(2148CH)=5678H

則(AX)=5678H

4.1.1與數(shù)據(jù)有關(guān)的尋址方式(7種)

7.相對基址變址尋址

例如:OVAX,

MASK[BXHSH

演示1

演示2

】教學進程

復習提問

1.指出下列各尋址方式所使用的段寄存器

⑴[SI+34H]寄存器相對尋址

(2)[456H]直接尋址

⑶ESRBP+DI]基址變址尋址

(4)[BX+DI+200H]相對基址變址尋址

(5)[BP+1234H]寄存器相對尋址

(6)DS:[BP+345H]寄存器相對尋址

2.已知寄存器(DS)=1000H,(SS)=2000H,

(BX)=1234H,(DI)=OFFFOH,(BP)=42H,試

分別計算出下列各操作數(shù)的有效地址和物理地址。

(1)[BX]

(2)[DI+123H]

(3)[BP+DI]

(4)[BX+DI+200H]

(5)[1234H]

4.L2與轉(zhuǎn)移地址有關(guān)的尋址方式

本節(jié)討論的尋址方式是用來確定轉(zhuǎn)移及調(diào)用指令的轉(zhuǎn)向地址。

為了敘述方便,以8086/8088的無條件轉(zhuǎn)移指令為例來說明。

法條件轉(zhuǎn)移指令格式:JMP目—

功能:無條件轉(zhuǎn)移到目標處。

噗中的目標有各種尋址方式。這些尋址方式可以被分為段內(nèi)

轉(zhuǎn)移和段間轉(zhuǎn)移兩類。

猥內(nèi)轉(zhuǎn)移只影響指令指針I(yè)P值;

懣間轉(zhuǎn)移既要影響IP值,也要影響代碼段寄存器CS的值。

4.1.2與轉(zhuǎn)移地址有關(guān)的尋址方式.

1.段內(nèi)尋址|3

(段內(nèi)直接尋址)

轉(zhuǎn)移地址時,不改變CS值,在當前IP上加一個位移量,

即EA=(IP)+pdisp8

_displ6

該位移量是一個相對于指令指針的帶符號數(shù)。

指令

當前IP值一1_轉(zhuǎn)移的目

>標地址IP

111

|位移量_r------------

中?教學進程

4.1.2與轉(zhuǎn)移地址有關(guān)的尋址方式

?|1?段內(nèi)尋址

(段內(nèi)直接尋址]

懣內(nèi)近轉(zhuǎn)移:位移量為16位

例如:JMPNEARPTRADDR1

或JMPADDR1

》段內(nèi)短轉(zhuǎn)移:位移量為8位,

例如:JMPSHORTADDR2

在與當前16位的IP值相加時,系統(tǒng)自動把8位位移量擴展成

16位,擴展方法是高8位全部用位移量的符號位值填充。

4.L2與轉(zhuǎn)移地址有關(guān)的尋址方式

■|1.段內(nèi)尋址

(段內(nèi)間接尋址)

----轉(zhuǎn)向的有效地址EA是一個寄存器或存儲單元的內(nèi)容

有效地址用來取代IP,并CS值不變。

除立即數(shù)以外的任何一種

〔數(shù)據(jù)尋址—得到

指令I(lǐng)-------

根據(jù)尋址有效地址在/寄存器

方式確定\r-------1

,存儲器單元

4.1.2與轉(zhuǎn)移地址有關(guān)的尋址方式

1I.段內(nèi)尋址

(段內(nèi)間接尋址)

例如:若(BX)=1256H,(DS)=2000H,

TABLE=2012H,(23268H)=3476H,

則:QMPBX)段內(nèi)間接轉(zhuǎn)移,

執(zhí)行后(IP)=EA=(BX)=1256H

gWORDPTR[BX+TABLEF^)

執(zhí)行后,EA=(BX)+disp=3268H

4.L2與轉(zhuǎn)移地址有關(guān)的尋址方式

?2.段間尋址

(段間直接尋址)

——指令中提供了轉(zhuǎn)向的段地址和偏移地址,

故用段地址取代CS,用偏移地址取代IP

例如:JMP3500H:120BH;

則(CS)=3500H,(IP)=120BH

指令

段地址|偏移地址------;IP|

—4,

____________________;CS|

j教學進程

4.1.2與轉(zhuǎn)移地址有關(guān)的尋址方式

?2.段間尋址

(段間間接尋址)

-用存儲器中兩個相繼字的內(nèi)容取代IP和CS,

低地址中內(nèi)容送IP,高地址中內(nèi)容送CS。

存儲器連

續(xù)4個單元

】教學進程

4.2指令系統(tǒng)

?8086指令系統(tǒng)按功能可分為6大類:

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

算術(shù)運算指令

邏輯指令

串處理指令

控制轉(zhuǎn)移指令

處理機控制指令

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

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

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

?指令格式:MOVDST,SRC;

?指令功能:將數(shù)據(jù)從源地址傳送到目的地址,具有“復制”

性質(zhì);DST.SRC分別為目的操作數(shù)和源操作數(shù).

例如:MOVAX,1234H

MOVAL,CL

寸主意------------------------------------------

>?。?)MOV指令源、目標操作數(shù)長度必須一致,

2)目的操作數(shù)DST不能為立即數(shù);

3)DST、SRC不能同時為段R,也不能同時為M單元;

4)不能使用此指令為CS及IP賦值;

5)MOV指令不影響標志位寄存器PSW的值。

IJ

二]教學進程

MOV指令傳送功能

MOVDST,SRC

段寄存器

CSDSESSS

MOV也并非任意傳送

教學進程

具體實現(xiàn)

1)數(shù)據(jù)在CPU內(nèi)部寄存器之間傳送

MOVAL,BL;通用寄存器之間字節(jié)傳送

MOVDI,BX;通用寄存器之間字傳送

MOVDS,AX;通用寄存器傳送到段寄存器

、MOVAX,ES;段寄存器傳送到通用寄存器,

’2)立即數(shù)傳送至CPU內(nèi)部通用寄存器或存儲器中

MOVDL,58;8位立即數(shù)傳送到通用寄存器

MOVBP,016AH;16位立即數(shù)傳送到通用寄存器

MOVBYTEPTR[BX],7BH;8位立即數(shù)傳送到存儲器

MOVWORDPTR[BX],057BH;16位立即數(shù)傳送到存儲徵

一教學進程

具體實現(xiàn)

MOVCL,[BX+5];字節(jié)傳送

MOVAX,[SI];變址傳送

MOVDS,[BX+SI];基址變址傳送

MOVAX,DATA[BP][SI];相對基址變址傳送

MOV[DI],BX;將BX內(nèi)容傳送到DI所指位置

MOVBX,DATA1

;將符號地址DATA1的存儲器內(nèi)容傳送到BX中

——?教學進程

常見錯誤

①CS和IP不能作為目的操作數(shù)

MOVCS,AX(X)

MOVIP,AX(X)

②不允許數(shù)據(jù)直接從存儲器傳送到存儲器

如要把DS段內(nèi)偏移地址為ADDR1的存儲單元的內(nèi)

容,傳送至同一段內(nèi)地址為ADDR2的存儲單元中去,

MOVADDR2,ADDR1(X)

MOVAL,ADDR1

MOVADDR2,AL(V)

常見錯誤

③立即數(shù)不允許直接送段寄存器,

也不允許在兩個段寄存器之間直接傳送信息。

MOVDS,5000H(X)

MOVDS,ES(X)

可以用通用寄存器(如AX)為橋梁來實現(xiàn)傳送o

MOVAX,5000H

MOVDS,AX(V)

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

>堆棧:在內(nèi)存中開辟的一片數(shù)據(jù)存儲區(qū)

(設置在堆棧段內(nèi)),

>存儲方式:是一端固定,另一端活動,即只允許在一端

向該存儲區(qū)存入或取出數(shù)據(jù),數(shù)據(jù)的存取遵循“先進后

出”原則。

A從硬件來看,堆棧由一片存儲單元和一個指示器(即堆

棧指針SP)組成。堆棧的固定端稱棧底(BOTTOM)o

>堆棧指針SP用于指示數(shù)據(jù)進棧和出棧時偏移地址的變化,

SP所指示的最后進入數(shù)據(jù)的單元稱棧頂(TOP),堆棧中

所有數(shù)據(jù)的存取都在棧頂進行。

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

AX存儲器

64XX64

KBxxKB

堆棧底

7

SP=SP-2PUSHAX

教學進程

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

((2)堆棧操作指令)

?壓棧指令格式為:PUSHSRC;(先減后壓)

執(zhí)行的操作:(SP)—(SP)—2

((SP)+1,(SP))—(SRC)

SRC可以是內(nèi)部寄存器、段寄存器、存儲器

?出棧指令格式為:POPDST;(先彈后加)

執(zhí)行的操作:(DST)一((SP)+1,(SP))

(SP)―(SP)+2;

DST可以是內(nèi)部寄存器、段寄存器(CS除外)、存儲器。

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

((2)堆棧操作指令)

注意

人力堆棧指令必須是16位雙字節(jié)數(shù),

即每進行一次PUSH操作,SP減2;

每進行一次POP操作SP加2;

2)目的操作數(shù)DST,與原操作數(shù)SRC都不能為立即數(shù);

3)DST不能為代碼段寄存器CS;

堆棧指令不影響標志位寄存器FR的值。

例:PUSH1234Hx不能用立即尋址方式

POPCSxDST不能是CS

】教學進程

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

((3)交換指令XCHG)

?指令格式:XCHG0PR1,0PR2;

執(zhí)行操作:0PR1-0PR2;

?指令功能:將一個字節(jié)或一個字的源操作數(shù)和

目的操作數(shù)相交換;

...........-------------------

1)兩個操作數(shù)必須有一個在寄存器中;

2)兩個操作數(shù)不能同時為存儲器;

XCHG指令不影響FR的值。,

?交換可在reg之間、reg與mem之間進行。可以是字節(jié)交

換,也可以是字交換。段寄存器內(nèi)容不能交換。

]教學進程

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

例:實現(xiàn)兩個字型存儲器操作數(shù)BUF1及BUF2的交換

方法1:利用寄存器方法1:利用堆棧

MOVAX,BUF1PUSHBUF1

XCHGAX,BUF2PUSHBUF2

MOVBUF1,AXPOPBUF1

POPBUF2

例:寄存器間交換

MOVAX,1234H;AX=1234H

MOVBX,5678H;BX=5678H

XCHGAX,BX;AX=5678H,BX=1234H

XCHGAH,AL;AX=7856H

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

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

?指令格式:XLAT或XLATOPR

執(zhí)行操作:AL^[DSX16+BX+AL]

在數(shù)據(jù)段建立一個字節(jié)表格,把表格的首地址送BX,

A位移量送AL;

?把要翻譯的內(nèi)容送AL

?指令功能:完成字節(jié)翻譯功能(把存儲區(qū)域內(nèi)某個連續(xù)區(qū)域

指定的內(nèi)容送到寄存器AL),通常用于編寫查表程序。

注意

%XLAT指令不影響標志位寄存器FR的值;

2)表格長度不超過256個字節(jié)。

v______________________________________/

表格首地址

TABLE例:求某數(shù)的平方

查表步驟:

(DS)=1000①在內(nèi)存中建立數(shù)據(jù)表格;

10040H00②將表格的首地址送入BX中;

10041HoT

③假定要求“3”的平方,將3送入

10042H04

寄存器AL中;

10043H09

④執(zhí)行指令XLAT;

10044H16

10045H25⑤執(zhí)行:AL—[DSX16+BX+3]

執(zhí)行結(jié)束:AL=9o

MMOVBX,0040H

MMOVAL,3

XIXLAT

?2.標志傳送指令

:1)LAHF指令)

?指令格式:LAHF

執(zhí)行操作:(AH)一(FR低8位)

?指令功能:把標志寄存器的低8位送入寄存器AH:

(SF/ZF/AF/PF/CF狀態(tài))

不影響標志位寄存器FR的值

,2)SAHF指令)

?指令格式:SAHF

執(zhí)行操作:(FR低8位)一(AH)

?指令功能:(與LAHF指令執(zhí)行相反的操作)

AH的第0、2、4、6、7位分別傳送至FR的相應位中。

影響標志位寄存器FR的值

?2.標志傳送指令

((3)PUSHF指令

?指令格式:PUSHF

?指令功能:把標志寄存器FR的內(nèi)容壓棧;

執(zhí)行操作:(SP)―(SP-2);

(SP)一(FR低8位);

(SP+1)-(FR高8位);

((4)POPF指令)

?指令功能:與PUSHF指令執(zhí)行相反的操作,將堆棧棧頂

兩個單元的內(nèi)容彈出至FR。

?指令格式:POPF

執(zhí)行操作:(FR低8位)-(SP);

(FR高8位)—(SP+1);

(SP)―(SP+2);

PUSHF和POPF是成對出現(xiàn),用于保護和修改FR

】教學進程

例:子程序應用

進入子程序

pushax、

pushbx

進入子程序首先保護現(xiàn)場

pushex

pushfJ

子程序內(nèi)容

popf

popex

從子程序返回前恢復現(xiàn)場

popbx

popax

返回

?3.地址傳送指令

((1)LEA有效地址送寄存器)

?指令功能:將源操作數(shù)的偏移地址傳送給16位寄存器;

?指令格式:LEAREG,SRC;

執(zhí)行操作:(REG)—SRC的EA

((2)LDS指針送寄存器和DS)

?指令功能:將源操作數(shù)傳送至一對目標寄存器;

?指令格式:LDSREG,SRC;

執(zhí)行操作:(REG)—(SRC)

(DS)-(SRC+2);

j教學進程

?3.地址傳送指令

((3)LES指針送寄存器和ES「

?指令功能:除地址指針的段地址送ES外,其他與LDS類似;

?指令格式:LESREG,SRC;

執(zhí)行操作:(REG)—SRC;

,(ES)-(SRC+2);

注意工

1)目的操作數(shù)16位通用寄存器(REG)不能使用段寄存器;

2)源操作數(shù)SRC只能使用存儲器尋址方式來確定地址;

3)地址傳送指令不影響標志位寄存器FR的值

】教學進程

例:LEABX,[BX+SI+0F62H]

LDSSI,[10H]

LESDI,[BX]

MOVBX,TABLE;(BX)=0040H

TABLE

(DS):1000H40HMOVBX,OFFSETTABLE;(BX)=1000H

OOH

LEABX,TABLE;(BX)=1000H

OOH

30HLDSBX,TABLE;(BX)=0040H

;(DS)=3000H

LESBX,TABLE;(BX)=0040H

注意:*不影響標志位;(ES)=3000H

*REG不能是段寄存器

*SRC必須為存儲器尋址方式

?——」=教學進程

4.2.2算術(shù)運算指令

?運算的操作數(shù)允許是字節(jié)或字;

?可以是有符號數(shù),也可以是無符號數(shù)。

?指令中有單操作數(shù)指令,也有雙操作數(shù)指令。

■指令格式:.、

(1)雙操作數(shù)指令:(指令助記符DST,SRC)

DST可以是reg、mem,

SRC可以是data、reg、mem。

(2)單操作數(shù)指令:(指令助記符DST)

DST可以是reg、mem。

422算術(shù)運算指令

?1.加法指令

((D加法指令ADD)

?指令格式:ADDDST,SRC;

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

((2)帶進位加法指令ADC)

?指令格式:ADCDST,SRC;

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

運算結(jié)果影響的:CF、DF、PF、SF、ZF和AF

ADC指令主要與ADD配合,實現(xiàn)多精度加法運算

422算術(shù)運算指令

?1.加法指令

A

注意:ADD和ADC影響標志位:

1結(jié)果為負1和的最高有效位有向高位的進位

CF=

,0否則0否則

1結(jié)果為01同號相同,結(jié)果相異

ZF=0F=

0否則.0否則

CF位表示無符號數(shù)相加的溢出。

OF位表示帶符號數(shù)相加的溢出。

例:n=8bit帶符號數(shù)(?128?127),無符號數(shù)(0-255)

0000010010000111

+00001011+11<1―10101

00001111101111100

I帶:(+4)+(+11)=+15OF=0帶:(-121)+(-11)=+124OF=1

1無:4+11=15CF=0無:135+245=124CF=1

帶符號數(shù)和無符號數(shù)都不溢出帶符號數(shù)和無符號數(shù)都溢出

0000011100001001

+11111011+01111100

10000001010000101

I帶:(+7)+(-5)=+2OF=0帶:(+9)+(+124)=-123OF=1

|無:7+251=2CF=1無:9+124=133CF=0

無符號數(shù)溢出帶符號數(shù)溢出

[例]雙精度數(shù)加法計算

已知:⑴OF365H

(DX)=0002H(AX)=0F365H+8100H

(BX)=0005H(CX)=8100H

指令序列ADDAX,CX;(1)(AX)7465(CF=1)

ADCDX,BX;(2)

(1)執(zhí)行后(2)0002H

(AX)=7465H0005H

+1

CF=10F=1SF=OZF=O

(DX)0008H

(2)執(zhí)行后

(DX)=0008H

CF=OOF=0SF=OZF=O

((3)加1指令I(lǐng)NC)

?指令格式:INCOPR

亍操作:(OPR)—(OPR)+1

注意

影響的標志位:AF、OF、PF、SF和ZF,

/對CF沒有影響。

主要用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù)等。

【例】

INCAL

INCBYTEPTR[BX]

INCWORDPTR[BX]

?2.減法指令

(fl)減法SUB指令)

?指令格式:SUBDST,SRC

執(zhí)行操作:(DST)—(DST)一(SRC)

說明:對標志位AF、CF、OF、PF、SF和ZF有影響。

《2)帶借位減法指令SBB)

?指令格式:SBBDST,SRC

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

說明:對標志位的影響與SUB相同。

?3)次指令DEC)

?指令格式:DECOPR

執(zhí)行操作:(OPR)—(OPR)-1

說明:影響AF、OF、PF、SF和ZF,對CF沒有影響。

?2.減法指令

((4)求補指令NEG)

?指令格式:NEGOPR

/執(zhí)行操作:(OPR)-—(OPR)

淫意

NEG指令對標志位的有影響,尤注意CF以及OF位;

[0操作數(shù)為0[1操作數(shù)為?128(字節(jié)運算)或

CF=OF=操作數(shù)為?32768(字運算)

1否則I。否則

說明:

①若操作數(shù)為80H(—128)或為8000H(—32768),

則求補后操作數(shù)沒變化,但標志OF置1。

②此指令雖然不影響CF標志位,但一般總是使標志CF=1。

除非在操作數(shù)為零時,才使CF=0。

?2.減法指令

((5)比較指令CMP)

?指令格式:CMPOPRI,0PR2

執(zhí)行操作:(0PR1)一(0PR2)

L-------------------------------------

注意目的操作數(shù)減源操作數(shù),結(jié)果只影響標志位,

不送入目的地址。

對于無符號數(shù),若CF=O,貝!)0PR1>0PR2;

若為有符號數(shù),貝!JOF十SF=O時0PR1>0PR2。

k__________________________________________

[例]X、V、Z均為雙精度數(shù),分別存放在地址為X,X+2;

Y,Y+2;Z,Z+2的存儲單元中,用指令序列實現(xiàn):

w―x+y+24-z,并用W,W+2單元存放w

MOVAX,X

MOVDX,X+2

ADDAX,Y

ADCDX,Y+2;x+y

ADDAX,24

ADCDX,0;x+y+24

SUBAX,Z

SBBDX,Z+2;x+y+24-z

MOVW,AX

MOVW+2,DX;結(jié)果存入W,W+2單元

?3.乘法指令

01)無符號數(shù)乘法指令MUL)

?指令格式:MULSRC

指令操作:(AX)一(AL)*(SRC);字節(jié)操作數(shù)

(DX,AX)—(AX)*(SRC);字操作數(shù)

((2)帶符號數(shù)乘法指令I(lǐng)MUL)

?指令格式與操作同MUL指令。

注意了1)乘法指令中源操作數(shù)不能為立即數(shù);

一、*2)AL(AX)為隱含的乘數(shù)寄存器;

3)AX(DX,AX)為隱含的乘積寄存器。

4)乘法指令,影響CF和OF標志位;

?3.乘法指令

乘法指令對CF/OF的影響:

>MUL指令

f00乘積的高一半為零

CFQF=

I11否則

>IMUL指令

00乘積的高一半是低一半的符號擴展

CF,OF=

11否則

?4.除法指令

《1)無符號數(shù)除法指令DIV)

?指令格式:DIVSRC

?指令操作:

字節(jié)除法:(AX)/(SRC)—>AL(商)、AH(余數(shù))

字除法:(DX,AX)/(SRC)—>AX(商)、DX(余數(shù))

《2)帶符號數(shù)除法指令I(lǐng)DIV)

?指令I(lǐng)DIV格式與操作同DIV指令。

詐意0除法指令中源操作數(shù)不能為立即數(shù);1

2)AX(DX,AX)為隱含的被除數(shù)寄存器;

3)AL(AX)為隱含的商寄存器;

4)AH(DX)為隱含的余數(shù)寄存器;°

5)除法指令對所有標志位無定義。J1,

?4.除法指令

除法錯中斷:

?當被除數(shù)遠大于除數(shù)時,所得的商有可能超出它所能表

達的范圍。如果存放商的寄存器AL/AX不能表達,便產(chǎn)

生溢出;

?8086CPU中就產(chǎn)生編號為0的內(nèi)部中斷——除法錯中斷。

?發(fā)生除法溢出的情況:

A對DIV指令,除數(shù)為0,或在字節(jié)除時商超過8位,或

者在字除時商超過16位。

>對IDIV指令,除數(shù)為0,或在字節(jié)除時商不在-128?

127范圍內(nèi),或者在字除時商不在-32768?32767范圍

內(nèi)。

?5.符號擴展指令

((1)字節(jié)轉(zhuǎn)換為字指令CBW)

?指令功能:ALfAX

?指令格式:CBW

若(AL)的最高有效位為0,貝(!(AH)=00H

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

((2)字轉(zhuǎn)換為雙字指令CWD)

?指令功能:AXf(DX,AX)

?指令格式:CWD

若(AX)的最高有效位為0,則(DX)=0000H

若(AX)的最高有效位為1,則(DX尸F(xiàn)FFFH

注1)無操作數(shù)指令,隱含對AL或AX進行符號擴展

2)不影響條件標志位

?5.符號擴展指令

?符號擴展;指用一個操作數(shù)的符號位(即最高位)形成另一

個操作數(shù)。后一個操作數(shù)的各位是全0(正數(shù))或全1(負

數(shù))。

?符號擴展不改變數(shù)據(jù)大小,即將原操作數(shù)的符號位復制到擴

展后高半部分的各個位。

映據(jù)64H(表示+100),其最高位D7為0,

符號擴展后:0064H(仍表示數(shù)據(jù)100)

唾據(jù)ffOOH(表示一256),其最高位D15為1,

符號擴展后:ffffffOOH(仍表示有符號數(shù)一256)

(AX)=0BA45H

CBW;(AX)=0045H

CWD;(DX)=0FFFFH;AX)=0BA45H

[例]xyzv均為16位帶符號數(shù),計算(v-(x*y+z-540))lx

MOVAX,X

IMULY;X*Y一(DX,AX)

MOVCX,AX

MOVBX,DX

MOVAX,Z

CWD;Z—(DX,AX)___________

ADDCX,AX

ADCBX,DX;X*Y+Z一(BX,CX)_______

SUBCX,540

SBBBX,0;X*Y+Z-540

MOVAX,V

CWD;V—(DX,AX)

SUBAX,CX

SBBDX,BX;V-(X*Y+Z-540)_____________

IDIVX;(V-(X*Y+Z-540))/X一(AX)

余數(shù)一(DX)

?6.十進制調(diào)整指令

(8086提供了6種調(diào)整指令

壓縮BCD碼調(diào)整指令

加法十進制調(diào)整指令DAA

減法十進制調(diào)整指令DAS

非壓縮BCD碼調(diào)整指令

加法的ASCH調(diào)整指令AAA

減法ASCH調(diào)整指令AAS

乘法的ASCH碼調(diào)整指令AAM

除法的ASCH碼調(diào)整指令AAD

?6.十進制調(diào)整指令

>十進制數(shù)調(diào)整指令對二進制運算的結(jié)果進行十進制調(diào)整,

以得到十進制的運算結(jié)果;

>分成壓縮BCD碼和非壓縮BCD碼調(diào)整;

>8086支持壓縮BCD碼和非壓縮BCD碼的調(diào)整運算

□壓縮BCD碼就是通常□非壓縮BCD碼用8個二

的8421碼;它用4個進制位表示一個十進

二進制位表示一個十制位,只用低4個二進

進制位,一個字節(jié)可制位表示一個十進制

以表示兩個十進制位,位。?9,高4位任意,

即00?99通常默認為0

?6?十進制調(diào)整指令

壓縮BCD碼加減調(diào)整指令

(ADDAL,i8/r8/m8)(SUBAL,i8/r8/m8)

(ADCAL,i8/r8/m8)(SBBAL,i8/r8/m8)

DAA說明DAS說明

;AL一將AL的加和調(diào)整為;AL一將AL的減差調(diào)整為

壓縮BCD碼壓縮BCD碼

例題1例題2

?使用DAA或DAS指令前,應先執(zhí)行以AL為目的操作數(shù)的加

法或減法指令;

?DAA和DAS指令對OF標志無定義,按結(jié)果影響其他標志,

例如CF反映壓縮BCD碼相加或減的進位或借位狀態(tài)。

?6?十進制調(diào)整指令壓縮BCD碼加減調(diào)整指令

(加法十進制調(diào)整指令DAA)

?調(diào)整操作(系統(tǒng)自動執(zhí)行):

月I口果AL中低4位大于9或輔助進位(AF)=1,

則(AL)=(AL)+6且(AF)=1;

成I果AL高4位大于9或(CF)=1,

貝(I(AL)=(AL)+60H

且(CF)=1O同時,SF、ZF、PF均有影響。

?標志:AF、CF按以上情況設置;

SF、ZF、PF按結(jié)果設置;

OF位不確定。

例1:壓縮BCD碼加

MOVAL,68H;(AL)=68H,表示壓縮BCD碼68

MOVBL,48H;(BL)=48H,表示壓縮BCD碼48

ADDAL,BL;二進制加法:(AL)=68H+48H=B0H

DAA;十進制調(diào)整:(AL)=16H

68H

+48H

BOH(AF=1)

+06H

B6H

+60H

AL=16H(CF=1)

實現(xiàn)壓縮BCD碼力口法:68+48=16H

?6.十進制調(diào)整指令壓縮BCD碼加減調(diào)整指令

減法十進制調(diào)整指令DAS

?調(diào)整操作(系統(tǒng)自動執(zhí)行):

械口果AL中低4位大于9或(AF)=1,

則(AL)=(AL)一6且(AF)=1;

械口果AL中高4位大于9或(CF)=1,

貝(I(AL)=(AL)-60H

且(CF)=1o同時SF、ZF、PF均受影響。

?標志:AF、CF按以上情況設置;

SF、ZF、PF按結(jié)果設置;

OF位不確定。

?1.邏輯運算指令

((1)邏輯非指令NOT)

?指令功能:將OPR內(nèi)容按位取反并送回

?指令格式:NOTOPR

?指令操作:(OPR)--I(OPR)

12)邏輯與指令AND)

?指令功能:兩個操作數(shù)按位邏輯與運算,結(jié)果送目的操作數(shù)

?指令格式:ANDDST,SRC

?指令操作:(DST)—(DST)A(SRC)

?運算法則:(全1為1,有0出0)

1A1=1,1A0=0,0A1=0,0A0=0o

■該指令可以清除目的操作數(shù)中與源操作數(shù)置0的對應位

?1.邏輯運算指令

Q3)邏輯或指令OR)

?指令功能:兩個操作數(shù)按位邏輯或運算,結(jié)果送目的操作數(shù)

?指令格式:ORDST,SRC

?指令操作:(DST)—(DST)V(SRC)

■運算法則:(全0為0,有1出1)

1V1=1,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論