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

下載本文檔

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

文檔簡(jiǎn)介

第4章

指令系統(tǒng)

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

4.14.3指令系統(tǒng)

4.1.1指令格式

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

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

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

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處理器控制指令

學(xué)習(xí)指令的要點(diǎn)

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

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

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

種尋址方式。

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

有影響,以及如何影響。

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

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

器等。

預(yù)備知識(shí)

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

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

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

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

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

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

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

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

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

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

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

預(yù)備知識(shí)

?(存儲(chǔ)器的分段)

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

解決方法:小段的首地址

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

00010H?0001FH

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

00020H?0002FH

???

段起始地址:小段首地址

FFFFOH?FFFFFH

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

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

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

預(yù)備知識(shí)

存儲(chǔ)器的邏輯分段:

?8086對(duì)邏輯段要求:

-段地址低4位均為0

-每段最大不超過64KB

?8086對(duì)邏輯段并不要求:

-必須是64KB

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

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

預(yù)備知識(shí)

物理地址的形成")

計(jì)算公式:物理地址=段地址X16D+偏移地址

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

16位段地址0000

+16位偏移地址

20位物理地址

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

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

預(yù)備知識(shí)

(如何分配各個(gè)邏輯段)

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

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

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

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

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

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

任何一種邏輯段中。

預(yù)備知識(shí)

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

訪問存儲(chǔ)器的方式可超越偏移地址

取指令無IP

堆棧操作無SP

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

有效地址EAI

BP基址的尋址方式CSESDS

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

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

預(yù)備知識(shí)

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

小端方式:“低對(duì)低、高對(duì)高”的存儲(chǔ)形式

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

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

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

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

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

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

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

單元的內(nèi)容。

預(yù)備知識(shí)

存儲(chǔ)器存儲(chǔ)單元的內(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)

?指令的一般格式

/

[標(biāo)號(hào):]操作碼[操作數(shù)][;注釋]

\________________________________________________________________________________________________________________

標(biāo)號(hào):給指令所在的地址取名字。

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

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

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

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

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

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

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

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

]教學(xué)進(jìn)程

指令系統(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)容不同的尋址方式

]教學(xué)進(jìn)程

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

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

例如m(MOVAL,34H)

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

例如:(MOVAX,1234H)

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

I?教學(xué)進(jìn)程

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

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

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

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

例如:(MOVAX,BX)

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

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

AHAL]BHBL

演示1

AX56EDBX56ED

A

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

??一教學(xué)進(jìn)程

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

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

物理地址二(DS)X10H+EA

例如AX,[2000H]二)

默認(rèn)的段寄存器是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,

存儲(chǔ)器低地址

DSL3000xlOH

高地址

演示1演示2

]教學(xué)進(jìn)程

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

4.寄存器間接尋址

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

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

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

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

]教學(xué)進(jìn)程

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

?|4.寄存器間接尋址

例如《MOVAX,[BX])

執(zhí)行情況如圖

DS|3000xlOH存儲(chǔ)器

低地址

+BXI2000I

32000?操作碼代

操作碼看

AHAL

IVIII

演示1AX123432000皿

]數(shù)

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

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

演示2

、高地址

]教學(xué)進(jìn)程

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

5.寄存器相對(duì)尋址

除有段跨越前綴者外

(BX)

*位位移量對(duì)于寄存器為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

]教學(xué)進(jìn)程

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

■15.寄存器相對(duì)尋址

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

6.基址變址尋址

|(BX)+(SI)

有效地址=

(BP)(DI)

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

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

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

如(DS)=2100H

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

(BX)=0158H,

則默認(rèn)在堆棧段;

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

則PA=22358H;

若(22358H)=1234H,

則(AX)=1234H

1教學(xué)進(jìn)程

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

6.基址變址尋址

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

演示1演示2高地址

]教學(xué)進(jìn)程

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

?;7.相對(duì)基址變址尋址

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.相對(duì)基址變址尋址

例如:OVAX,

MASK[BXHSH

演示1

演示2

】教學(xué)進(jìn)程

復(fù)習(xí)提問

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

⑴[SI+34H]寄存器相對(duì)尋址

(2)[456H]直接尋址

⑶ESRBP+DI]基址變址尋址

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

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

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

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

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

分別計(jì)算出下列各操作數(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)移到目標(biāo)處。

噗中的目標(biāo)有各種尋址方式。這些尋址方式可以被分為段內(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)移地址時(shí),不改變CS值,在當(dāng)前IP上加一個(gè)位移量,

即EA=(IP)+pdisp8

_displ6

該位移量是一個(gè)相對(duì)于指令指針的帶符號(hào)數(shù)。

指令

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

>標(biāo)地址IP

111

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

中?教學(xué)進(jìn)程

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

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

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

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

例如:JMPNEARPTRADDR1

或JMPADDR1

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

例如:JMPSHORTADDR2

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

16位,擴(kuò)展方法是高8位全部用位移量的符號(hào)位值填充。

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

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

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

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

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

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

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

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

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

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

,存儲(chǔ)器單元

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教學(xué)進(jìn)程

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

?2.段間尋址

(段間間接尋址)

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

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

存儲(chǔ)器連

續(xù)4個(gè)單元

】教學(xué)進(jìn)程

4.2指令系統(tǒng)

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

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

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

邏輯指令

串處理指令

控制轉(zhuǎn)移指令

處理機(jī)控制指令

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

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

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

?指令格式:MOVDST,SRC;

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

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

例如:MOVAX,1234H

MOVAL,CL

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

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

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

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

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

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

IJ

二]教學(xué)進(jìn)程

MOV指令傳送功能

MOVDST,SRC

儲(chǔ)

段寄存器

CSDSESSS

MOV也并非任意傳送

教學(xué)進(jìn)程

具體實(shí)現(xiàn)

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

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

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

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

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

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

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

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

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

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

一教學(xué)進(jìn)程

具體實(shí)現(xiàn)

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

MOVAX,[SI];變址傳送

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

MOVAX,DATA[BP][SI];相對(duì)基址變址傳送

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

MOVBX,DATA1

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

——?教學(xué)進(jìn)程

常見錯(cuò)誤

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

MOVCS,AX(X)

MOVIP,AX(X)

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

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

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

MOVADDR2,ADDR1(X)

MOVAL,ADDR1

MOVADDR2,AL(V)

常見錯(cuò)誤

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

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

MOVDS,5000H(X)

MOVDS,ES(X)

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

MOVAX,5000H

MOVDS,AX(V)

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

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

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

>存儲(chǔ)方式:是一端固定,另一端活動(dòng),即只允許在一端

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

出”原則。

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

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

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

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

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

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

AX存儲(chǔ)器

64XX64

KBxxKB

堆棧底

7

SP=SP-2PUSHAX

教學(xué)進(jìn)程

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

((2)堆棧操作指令)

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

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

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

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

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

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

(SP)―(SP)+2;

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

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

((2)堆棧操作指令)

注意

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

即每進(jìn)行一次PUSH操作,SP減2;

每進(jìn)行一次POP操作SP加2;

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

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

堆棧指令不影響標(biāo)志位寄存器FR的值。

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

POPCSxDST不能是CS

】教學(xué)進(jìn)程

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

((3)交換指令XCHG)

?指令格式:XCHG0PR1,0PR2;

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

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

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

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

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

2)兩個(gè)操作數(shù)不能同時(shí)為存儲(chǔ)器;

XCHG指令不影響FR的值。,

?交換可在reg之間、reg與mem之間進(jìn)行??梢允亲止?jié)交

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

]教學(xué)進(jìn)程

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

例:實(shí)現(xiàn)兩個(gè)字型存儲(chǔ)器操作數(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ù)段建立一個(gè)字節(jié)表格,把表格的首地址送BX,

A位移量送AL;

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

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

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

注意

%XLAT指令不影響標(biāo)志位寄存器FR的值;

2)表格長(zhǎng)度不超過256個(gè)字節(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.標(biāo)志傳送指令

:1)LAHF指令)

?指令格式:LAHF

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

?指令功能:把標(biāo)志寄存器的低8位送入寄存器AH:

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

不影響標(biāo)志位寄存器FR的值

,2)SAHF指令)

?指令格式:SAHF

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

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

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

影響標(biāo)志位寄存器FR的值

?2.標(biāo)志傳送指令

((3)PUSHF指令

?指令格式:PUSHF

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

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

(SP)一(FR低8位);

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

((4)POPF指令)

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

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

?指令格式:POPF

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

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

(SP)―(SP+2);

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

】教學(xué)進(jìn)程

例:子程序應(yīng)用

進(jìn)入子程序

pushax、

pushbx

進(jìn)入子程序首先保護(hù)現(xiàn)場(chǎng)

pushex

pushfJ

子程序內(nèi)容

popf

popex

從子程序返回前恢復(fù)現(xiàn)場(chǎng)

popbx

popax

返回

?3.地址傳送指令

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

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

?指令格式:LEAREG,SRC;

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

((2)LDS指針?biāo)图拇嫫骱虳S)

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

?指令格式:LDSREG,SRC;

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

(DS)-(SRC+2);

j教學(xué)進(jìn)程

?3.地址傳送指令

((3)LES指針?biāo)图拇嫫骱虴S「

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

?指令格式:LESREG,SRC;

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

,(ES)-(SRC+2);

注意工

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

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

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

】教學(xué)進(jìn)程

例: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

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

*REG不能是段寄存器

*SRC必須為存儲(chǔ)器尋址方式

?——」=教學(xué)進(jìn)程

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

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

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

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

■指令格式:.、

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

DST可以是reg、mem,

SRC可以是data、reg、mem。

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

DST可以是reg、mem。

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

?1.加法指令

((D加法指令A(yù)DD)

?指令格式:ADDDST,SRC;

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

((2)帶進(jìn)位加法指令A(yù)DC)

?指令格式:ADCDST,SRC;

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

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

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

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

?1.加法指令

A

注意:ADD和ADC影響標(biāo)志位:

1結(jié)果為負(fù)1和的最高有效位有向高位的進(jìn)位

CF=

,0否則0否則

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

ZF=0F=

0否則.0否則

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

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

例:n=8bit帶符號(hào)數(shù)(?128?127),無符號(hào)數(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

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

0000011100001001

+11111011+01111100

10000001010000101

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

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

無符號(hào)數(shù)溢出帶符號(hào)數(shù)溢出

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

已知:⑴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

注意

影響的標(biāo)志位:AF、OF、PF、SF和ZF,

/對(duì)CF沒有影響。

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

【例】

INCAL

INCBYTEPTR[BX]

INCWORDPTR[BX]

?2.減法指令

(fl)減法SUB指令)

?指令格式:SUBDST,SRC

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

說明:對(duì)標(biāo)志位AF、CF、OF、PF、SF和ZF有影響。

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

?指令格式:SBBDST,SRC

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

說明:對(duì)標(biāo)志位的影響與SUB相同。

?3)次指令DEC)

?指令格式:DECOPR

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

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

?2.減法指令

((4)求補(bǔ)指令NEG)

?指令格式:NEGOPR

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

淫意

NEG指令對(duì)標(biāo)志位的有影響,尤注意CF以及OF位;

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

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

1否則I。否則

說明:

①若操作數(shù)為80H(—128)或?yàn)?000H(—32768),

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

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

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

?2.減法指令

((5)比較指令CMP)

?指令格式:CMPOPRI,0PR2

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

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

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

不送入目的地址。

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

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

k__________________________________________

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

Y,Y+2;Z,Z+2的存儲(chǔ)單元中,用指令序列實(shí)現(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)無符號(hào)數(shù)乘法指令MUL)

?指令格式:MULSRC

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

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

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

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

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

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

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

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

?3.乘法指令

乘法指令對(duì)CF/OF的影響:

>MUL指令

f00乘積的高一半為零

CFQF=

I11否則

>IMUL指令

00乘積的高一半是低一半的符號(hào)擴(kuò)展

CF,OF=

11否則

?4.除法指令

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

?指令格式:DIVSRC

?指令操作:

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

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

《2)帶符號(hào)數(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)除法指令對(duì)所有標(biāo)志位無定義。J1,

?4.除法指令

除法錯(cuò)中斷:

?當(dāng)被除數(shù)遠(yuǎn)大于除數(shù)時(shí),所得的商有可能超出它所能表

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

生溢出;

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

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

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

者在字除時(shí)商超過16位。

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

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

內(nèi)。

?5.符號(hào)擴(kuò)展指令

((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ù)指令,隱含對(duì)AL或AX進(jìn)行符號(hào)擴(kuò)展

2)不影響條件標(biāo)志位

?5.符號(hào)擴(kuò)展指令

?符號(hào)擴(kuò)展;指用一個(gè)操作數(shù)的符號(hào)位(即最高位)形成另一

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

數(shù))。

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

展后高半部分的各個(gè)位。

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

符號(hào)擴(kuò)展后:0064H(仍表示數(shù)據(jù)100)

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

符號(hào)擴(kuò)展后:ffffffOOH(仍表示有符號(hào)數(shù)一256)

(AX)=0BA45H

CBW;(AX)=0045H

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

[例]xyzv均為16位帶符號(hào)數(shù),計(jì)算(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.十進(jìn)制調(diào)整指令

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

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

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

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

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

加法的ASCH調(diào)整指令A(yù)AA

減法ASCH調(diào)整指令A(yù)AS

乘法的ASCH碼調(diào)整指令A(yù)AM

除法的ASCH碼調(diào)整指令A(yù)AD

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

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

以得到十進(jìn)制的運(yùn)算結(jié)果;

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

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

□壓縮BCD碼就是通?!醴菈嚎sBCD碼用8個(gè)二

的8421碼;它用4個(gè)進(jìn)制位表示一個(gè)十進(jìn)

二進(jìn)制位表示一個(gè)十制位,只用低4個(gè)二進(jìn)

進(jìn)制位,一個(gè)字節(jié)可制位表示一個(gè)十進(jìn)制

以表示兩個(gè)十進(jìn)制位,位。?9,高4位任意,

即00?99通常默認(rèn)為0

?6?十進(jìn)制調(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指令前,應(yīng)先執(zhí)行以AL為目的操作數(shù)的加

法或減法指令;

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

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

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

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

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

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

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

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

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

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

?標(biāo)志:AF、CF按以上情況設(shè)置;

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

OF位不確定。

例1:壓縮BCD碼加

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

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

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

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

68H

+48H

BOH(AF=1)

+06H

B6H

+60H

AL=16H(CF=1)

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

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

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

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

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

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

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

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

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

?標(biāo)志:AF、CF按以上情況設(shè)置;

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

OF位不確定。

?1.邏輯運(yùn)算指令

((1)邏輯非指令NOT)

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

?指令格式:NOTOPR

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

12)邏輯與指令A(yù)ND)

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

?指令格式:ANDDST,SRC

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

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

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

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

?1.邏輯運(yùn)算指令

Q3)邏輯或指令OR)

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

?指令格式:ORDST,SRC

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

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

1V1=1,

溫馨提示

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