微型計(jì)算機(jī)原理與應(yīng)用 教學(xué) 作者 陳建鐸 宋彩利 程俊波 第四章 匯編語(yǔ)言_第1頁(yè)
微型計(jì)算機(jī)原理與應(yīng)用 教學(xué) 作者 陳建鐸 宋彩利 程俊波 第四章 匯編語(yǔ)言_第2頁(yè)
微型計(jì)算機(jī)原理與應(yīng)用 教學(xué) 作者 陳建鐸 宋彩利 程俊波 第四章 匯編語(yǔ)言_第3頁(yè)
微型計(jì)算機(jī)原理與應(yīng)用 教學(xué) 作者 陳建鐸 宋彩利 程俊波 第四章 匯編語(yǔ)言_第4頁(yè)
微型計(jì)算機(jī)原理與應(yīng)用 教學(xué) 作者 陳建鐸 宋彩利 程俊波 第四章 匯編語(yǔ)言_第5頁(yè)
已閱讀5頁(yè),還剩154頁(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)介

第4章指令系統(tǒng)與匯編語(yǔ)言

程序設(shè)計(jì)

【內(nèi)容簡(jiǎn)介】

首先講述8086的尋址方式、指令系統(tǒng)、匯編語(yǔ)言語(yǔ)句格式、保護(hù)方式編程指

令,然后講述匯編語(yǔ)言程序設(shè)計(jì)、宏以及DOS功能調(diào)用,最后簡(jiǎn)要說(shuō)明32位

微處理器指令系統(tǒng)的功能與使用。

【重點(diǎn)難點(diǎn)】

重點(diǎn)是8086尋址方式、指令系統(tǒng)與匯編程序設(shè)計(jì)。難點(diǎn)是匯編語(yǔ)言程序設(shè)計(jì)。

第4章指令系統(tǒng)與匯編語(yǔ)言程序設(shè)計(jì)

4.1概述

4.28086尋址方式

4.38086指令系統(tǒng)

4.4匯編語(yǔ)言程序格式與常用偽指令

4.5匯編語(yǔ)言程序設(shè)計(jì)

4.6匯編語(yǔ)言程序上機(jī)過(guò)程

1概述

4.1.1指令與程序

4.1.2匯編語(yǔ)言基本概念

4.L1指令與程序

所謂指令,就是指示計(jì)算機(jī)進(jìn)行某一工作的命令,而程序是為求

解某一問(wèn)題或進(jìn)行某項(xiàng)工作的若干條指令的有序集合。指令如所

示。一臺(tái)計(jì)算機(jī)全部指令的集合稱為指令系統(tǒng)。操作碼域說(shuō)明指令的

類型與功能,操作數(shù)域也稱為地址域,說(shuō)明數(shù)據(jù)在存儲(chǔ)器中的地址及

操作結(jié)果存放的地址。

表示一條指令的二進(jìn)制數(shù)稱操作碼操作數(shù)

為指令字,按長(zhǎng)度可分為單字節(jié)、

圖4」指令的基本格式

雙字節(jié)、三字節(jié)甚至四字節(jié)等。

按操作數(shù)的個(gè)數(shù)又可分為無(wú)操作數(shù)、單操作數(shù)、雙操作數(shù)以至三

操作數(shù)指令,也稱為無(wú)地址、一地址、二地址以至三地址指令。

其中存放結(jié)果的稱為目的操作數(shù)或目的地址,其它則稱為源操作

數(shù)或源地址。

4

用二進(jìn)制代碼表示指令系統(tǒng)的語(yǔ)言稱為機(jī)器語(yǔ)言,用以設(shè)計(jì)

的程序稱為機(jī)器語(yǔ)言程序。例如以下兩條指令可構(gòu)成一段程序,

是把數(shù)據(jù)20H經(jīng)寄存器CL,與累加器AL中的數(shù)相加,結(jié)果在AL

中。

1011000100100000

0000001011000001

5

4.L2匯編語(yǔ)言基本概念

用英文助記符表示指令系統(tǒng)的語(yǔ)言稱為匯編語(yǔ)言,比如用

ADD、SUB、JMP表示加、減、轉(zhuǎn)移等操作。用匯編語(yǔ)言指令編寫

的程序稱為匯編語(yǔ)言程序。

在計(jì)算機(jī)中,一條匯編語(yǔ)言指令對(duì)應(yīng)于一條機(jī)器語(yǔ)言指令。因

此,匯編語(yǔ)言指令實(shí)際上是機(jī)器指令的符號(hào)化表示。例如上一節(jié)的

機(jī)器語(yǔ)言程序可由如下匯編語(yǔ)言指令來(lái)表示。

MOVCL,20H

ADDAL,CL

6

匯編語(yǔ)言程序,人們易于編寫、識(shí)別和理解。但是必須轉(zhuǎn)換

成機(jī)器語(yǔ)言,計(jì)算機(jī)才能被識(shí)別和執(zhí)行。這一轉(zhuǎn)換過(guò)程稱為匯編,

由專門的匯編程序進(jìn)行。通常,人們把用匯編語(yǔ)言編寫的程序稱為

源程序,經(jīng)匯編而生成的機(jī)器語(yǔ)言程序稱為目標(biāo)程序或目標(biāo)代碼。

另外,還有一些用來(lái)說(shuō)明匯編過(guò)程,或?qū)R編過(guò)程進(jìn)行輔助說(shuō)

明的指令,稱為偽指令。

7

4.28086尋址方式

在指令中,操作數(shù)或操作數(shù)的地址可用多種方式來(lái)表示,統(tǒng)稱

為尋址方式。同一條指令可有不同的尋址方式,以說(shuō)明不同的操

作對(duì)象。

4.2.1數(shù)據(jù)類型

4.2.2尋址方式

4.2.1數(shù)據(jù)類型

在計(jì)算機(jī)中,二進(jìn)制數(shù)據(jù)有多種類型或用途。一種是指令處理的

對(duì)象,即操作數(shù);另一種是指令字;第三種是操作數(shù)的地址。在指令

中,操作數(shù)又分為兩種,一種是參加運(yùn)算或由計(jì)算機(jī)處理的對(duì)象,即

數(shù)據(jù)操作數(shù),簡(jiǎn)稱為數(shù)據(jù);另一種表示轉(zhuǎn)移指令的目標(biāo)地址,即轉(zhuǎn)移

地址。

1.數(shù)據(jù)操作數(shù)

按照存儲(chǔ)的位置,可分為三種:立即數(shù)、寄存器數(shù)據(jù)和存儲(chǔ)器數(shù)

據(jù)。

2.轉(zhuǎn)移地址操作數(shù)

表示轉(zhuǎn)移目標(biāo)地址,可在轉(zhuǎn)移指令中直接給出,也可根據(jù)某一尋址

方式求得。

9

4.2.2尋址方式

根據(jù)操作數(shù)的兩大類型,尋址方式也分為兩類,即數(shù)據(jù)尋址方式

和轉(zhuǎn)移地址尋址方式。

1.數(shù)據(jù)尋址方式

在數(shù)據(jù)尋址方式中,有以下7種。

(1)立即數(shù)

立即數(shù)是指指令操作數(shù)域直接給出的就是參加運(yùn)算或進(jìn)行某種操作的

數(shù)據(jù),又稱即時(shí)數(shù),有8位、16位等形式。對(duì)于16位數(shù)據(jù),低字節(jié)在

先,高字節(jié)在后。例如指令:

MOVAL,5

執(zhí)行后(AL)=05H,操作示意圖如圖4.2(a)所示。

1()

又如指令:

MOVAX,2790H;操作示意圖如所示。

(a)8位立即數(shù)(b)16位立即數(shù)

圖4.2立即尋址示意圖

立即數(shù)只能是源操作數(shù),不能是目的操作數(shù)。

(2)寄存器尋址

是指指令操作數(shù)域給出的是存放操作數(shù)的寄存器。對(duì)于8位操作數(shù),寄

存器有AL、AH、BL、BH、CL、CH、DL、DH;對(duì)于16位操作

數(shù),寄存器有AX、BX、CX、DX、SI、DI、SP、BPo

11

例如指令:MOVBX,AX

操作示意圖如所示。

AXBX

1234H->15678H

圖4.3寄存器尋址示例

(3)直接尋址

是指令操作數(shù)域給出的是存放操作數(shù)地址的偏移量,也稱為有效

地址,常用EA表示,尋址方式如圖4.4所示。例如指令:

MOVBX,[2000H]

執(zhí)行前(DS)=4000H,EA=2000H,(42000H)=1FH,(42001H)

=75Ho

執(zhí)行后(BX)=751FH,操作示意圖如所示。

12

如果操作數(shù)存放在其它段中,應(yīng)指定段寄存器,又如指令:

MOVAX,ES:[2100H]

執(zhí)行前(ES)=1000H,EA=2100H,

(12100H)=2AH,(12101H)=17H

執(zhí)行后(AX)=172AH

13

在匯編語(yǔ)言中,可以使用符號(hào)地址代替數(shù)值地址。例如:

MOVAX,[VALUE]

VALUE是符號(hào)地址。符號(hào)地址出現(xiàn)在指令中,可省略方括號(hào),

例如MOVAX,DATAo

(4)寄存器間接尋址

是指令操作數(shù)域給出的是存放操作數(shù)地址偏移量的寄存器。寄存

器主要有BX、BP、SI和DI。若沒(méi)有特別說(shuō)明,BX、SI>DI默認(rèn)操

作數(shù)在數(shù)據(jù)段(DS)中。BP默認(rèn)操作數(shù)在堆棧段(SS)中。段寄存

器中的的基地址左移4位與16位偏移量相加,生成20位的物理地址,

如圖4.6所示。

例如指令:MOVAX,[BX]

設(shè)(DS)=3000H,(BX)=3000H,執(zhí)行后(AX)=2C7DH,操作示

意圖如圖4.7所示。

又如指令:MOVAX,ES:[SI];段寄存器為ES,數(shù)據(jù)在附加段中。

數(shù)

據(jù)

圖4.7寄存器間接尋址示例

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

指令操作數(shù)域給出的是一個(gè)基址寄存器和一個(gè)偏移量,基地址與

偏移量相加,作為操作數(shù)地址的偏移地址EA,如圖4.8所示。

15

段寄存器

圖4.8寄存器相對(duì)尋址示意圖

例如指令:

DS30000操作碼

MOVAX,DATA[DI]DI200000H

+0300v

03H

執(zhí)行前(DS)=3000H,32300

(DI)=2000H,AX32300H

1AH

AHAL

DATA=300H,20H

執(zhí)行后(AX)=201AH,

操作示意圖如圖4.9所示。

圖4.9寄存器相對(duì)尋址示例

16

(6)基址加變址尋址

指令操作數(shù)域給出的是一個(gè)基址寄存器和一個(gè)變址寄存器,兩寄

存器中的數(shù)據(jù)相加,作為操作數(shù)的偏移地址EA?;芳拇嫫髦饕?/p>

BX、BP,變址寄存器主要有SI和DI。其中BX默認(rèn)DS,BP默認(rèn)SS,

允許使用段跨越,如圖4.10所示。

段寄存器

圖4.10基址加變址尋址示意圖

例如指令:MOVAX,[BX][DI]或MOVAX,[BX+DI]

執(zhí)行前(DS)=2100H,(BX)=0158H,(DI)=10A5H,

執(zhí)行后(AX)=1234H,操作示意圖如圖4.1所示。

17

DS21000

BX0158

+DI10A5

221FD

AX221FDH

AHAL

/

圖4.11基址加變址5

(7)相對(duì)基址加變址尋址

指令操作數(shù)域給出一個(gè)基址寄存器、變址寄存器和一個(gè)偏移量,兩

寄存器中的數(shù)據(jù)及偏移量相加,作為操作數(shù)的偏移地址EA?;芳拇嫫?/p>

主要有BX、BP,變址寄存器主要有SI和DI。BX默認(rèn)DS,BP默認(rèn)SS。

MOVAX,MASK[BX][DI]

MOVAX,MASK[BX+DI]

MOVAX,[MASK+BX+DI]

執(zhí)行前(DS)=3000H,(BX)=2000H,(DI)=1000H,

MASK=0250H

執(zhí)行后(AX)=4675H,操作示意如圖4.12所示。

圖4.12相對(duì)基址加變址尋址示例

19

2.轉(zhuǎn)移地址尋址方式

主要用來(lái)確定轉(zhuǎn)移指令和CALL指令的目標(biāo)地址,其目標(biāo)地址可

能在當(dāng)前代碼段內(nèi),也可能在當(dāng)前代碼段外,故有4中方式。

(1)段內(nèi)相對(duì)尋址

轉(zhuǎn)移地址由IP的當(dāng)前值與指令中給出的8位或16位偏移量相加而

生成。偏移量是一個(gè)帶符號(hào)的數(shù),用補(bǔ)碼表示。其中8位偏移量稱為

段內(nèi)短轉(zhuǎn)移SHORT,轉(zhuǎn)移范圍為-128~+127;16位偏移量稱為段內(nèi)

近轉(zhuǎn)移NEAR,轉(zhuǎn)移范圍-32768+32767。其示意如所示。

指令I(lǐng)P

偏移量一>(+)<—偏移地址

I_.

EA

圖4.13段內(nèi)相對(duì)尋址示意圖

20

段內(nèi)相對(duì)尋址的特點(diǎn)是代碼段寄存器CS的值保持不變。指令格式

如下:

JMPSHORTOPR;IP=(IP)+8位偏移量

JMPNEARPTROPR;IP-(IP)+16位偏移量

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

轉(zhuǎn)移指令的偏移地址存放在一個(gè)16位的寄存器或存儲(chǔ)器單元中,

用來(lái)取代IP中的當(dāng)前值。該寄存器或存儲(chǔ)器單元可由數(shù)據(jù)尋址方式中

除立即數(shù)之外的任何一種方式得到。其示意如84.所示。

寄存器

指令

數(shù)據(jù)尋址方式

存儲(chǔ)器

圖4.14段內(nèi)間接尋址示意圖

21

段內(nèi)間接尋址的特點(diǎn)是CS的值不變,IP的值由16位寄存器或存儲(chǔ)

器單元中的數(shù)據(jù)所取代。

例如指令:

JMPBX;BX中的數(shù)送入指令指針I(yè)P中

又如指令:

JMPWORDPTR[BX][SI]

;按照基址加變址的方式獲取操作數(shù),送入IP中

(3)段間直接尋址

在指令中直接給出16位段地址和16位偏移地址,分別送入CS和IP中。

例如指令:JMPFARPTRNEXTSUB

段間尋址由FAR來(lái)說(shuō)明,其中NEXTSUB是符號(hào)地址,指令直接給

出,包括轉(zhuǎn)移目標(biāo)的偏移地址和段地址。

22

(4)段間間接尋址

轉(zhuǎn)移地址存放在存儲(chǔ)器中的兩個(gè)連續(xù)字單元中,第一個(gè)字是偏移

地址,第二個(gè)字是段地址。存儲(chǔ)器單元地址可用數(shù)據(jù)尋址方式中除立

即數(shù)和寄存器直接尋址以外的任何一種尋址方式來(lái)確定,如所

O

JMPDWORDPTR[BX]

由BX確定兩個(gè)連續(xù)存儲(chǔ)器單元,取出其中的數(shù)分別送入IP和CS中.

23

4.38086指令系統(tǒng)

8086指令系統(tǒng)按功能可分為6種類型,即數(shù)據(jù)傳送指令、算術(shù)運(yùn)算

指令、邏輯運(yùn)算指令、串操作指令、程序控制指令和處理器控制指令。

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

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

4.3.3邏輯運(yùn)算與移位類指令

4.3.4串操作類指令

4.3.5控制轉(zhuǎn)移類指令

4.3.6處理器控制類指令

4

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

數(shù)據(jù)傳送類指令共有14條,可分為4種類型:通用數(shù)據(jù)傳送指令、

地址傳送指令、標(biāo)志寄存器傳送指令和輸入輸出指令。

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

(1)傳送指令MOV

格式:MOVDST,SRC

功能:DST-(SRC)

說(shuō)明:DST表示目的操作數(shù)地址,SRC表示源操作數(shù)地址,其中

目的操作數(shù)不能是立即數(shù)、CS和IP寄存器;兩存儲(chǔ)器單元之間和兩段

寄存器之間不能直接傳送;立即數(shù)不能直接傳送到段寄存器;允許段

跨越,不影響標(biāo)志位。源/目操作數(shù)傳送關(guān)系如圖4.16所示。

25

段寄存器

<———>

DSSSES通用寄存器[各寄存器

立即數(shù)AXBXCXDX之間互傳

BPSPSIDI

r

存儲(chǔ)器<———>

圖4.16源操作數(shù)與目的操作數(shù)規(guī)定

例如指令:

MOVAX,DX;源與目操作數(shù)均為16位

MOVAL,ES:[BX];目的操作數(shù)8位,即說(shuō)明源操作數(shù)也為8位

【例4」】將地址為ADD1存儲(chǔ)器單元中的數(shù)據(jù)傳送到同段內(nèi)地址為

ADD2的存儲(chǔ)器單元中。

解:使用傳送指令,程序如下:

MOVAL,ADD1

MOVADD2,AL

26

【例4.2】將立即數(shù)DAT1傳送到段寄存器ES中。

解:由于ES不能直接傳送立即數(shù),因此需要借用其它寄存器來(lái)實(shí)現(xiàn),程序

如下:

MOVAX,DAT1

MOVES,AX

(2)堆棧操作指令

壓棧指令PUSH

格式:PUSHSRC

功能:SP-(SP)-2

(SP)+1,(SP)=(SRC)

彈棧指令POP

格式:POPDST

功能:DST-((SP)+1,(SP))

SP-(SP)+2

27

說(shuō)明:堆棧操作指令以字為單位,可以使用除立即數(shù)以外的其它

尋址方式,允許段跨越;PUSHCS合法,但POPCS非法;不影響狀

態(tài)志位。

(3)交換指令XCHG

格式:XCHGOPRI,OPR2

功能:(OPR1)-(OPR2)

說(shuō)明:XCHG指令不適用段寄存器和立即數(shù),不允許兩存儲(chǔ)器單

元直接交換,兩操作數(shù)可以是8位或16位。允許段跨越,不影響狀態(tài)

標(biāo)志位。例如指令:

XCHGAL,BL;兩操作數(shù)均為8位

XCHGAX,SS:[SI];AX寄存器指明操作數(shù)為16位

(4)換碼指令XLAT

格式:XLATOPR或XLAT

功能:AL-((BX)+(AL))

28

說(shuō)明:OPR表示表格中的地址,BX存放表格首地址,AL存放待

查值(偏移量),查得結(jié)果送AL中,不影響狀態(tài)標(biāo)志位。

【例4.5]在以DATA為首地址的主存區(qū)域中連續(xù)存放著0~9的平方

表,試編寫查表程序。

解:首地址存入寄存器BX中,待查數(shù)據(jù)X送入AL中。

MOVBX,OFFSETDATA

MOVAL,X

XLATDATA或XLAT

2.地址傳送指令

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

格式:LEAREG,SRC

功能:REG-SRC

說(shuō)明:將源操作數(shù)的有效地址傳送到指定的寄存器REG中,源操

作數(shù)可以是除立即數(shù)和寄存器尋址以外的其它尋址方式;允許段跨

越;不影響狀態(tài)標(biāo)志位。

29

【例4.6】將例4.5中DATA首地址存入寄存器BX中。

解:使用LEA指令,程序如下:

LEABX,DATA

(2)指定寄存器與段寄存器DS置數(shù)指令LDS

格式:LDSREG,SRC

功能:REG-(SRC)

DS-(SRC+2)

說(shuō)明:把存儲(chǔ)器中兩個(gè)連續(xù)字單元中的數(shù)據(jù)傳送到指定寄存器和

DS中,不影響狀態(tài)標(biāo)志。

例如指令:LDSSL[1508H]

;把DS和[1508H]所指定單元的字操作數(shù)送入寄存器SL下一單元的字

操作數(shù)送入段寄存器DS中。

3()

(3)指定寄存器與段寄存器ES置數(shù)指令LES

格式:LESREG,SRC

功能:REG-(SRC)

ES-(SRC+2)

說(shuō)明:與指令LDS功能相同,段寄存器選擇ES。

例如指令:LESDL[DI]

3.狀態(tài)標(biāo)志寄存器傳送指令

(1)狀態(tài)標(biāo)志寄存器低8位送AH指令LAHF

格式:LAHF

功能:AH-(PSW的低字節(jié))

說(shuō)明:不影響狀態(tài)標(biāo)志位。

(2)寄存器AH送狀態(tài)標(biāo)志寄存器低8位指令SAHF

格式:SAHF

功能:PSW的低字節(jié)一(AH)

說(shuō)明:狀態(tài)標(biāo)志寄存器的低8位由裝入的數(shù)值來(lái)確定。

31

(3)狀態(tài)標(biāo)志寄存器壓棧指令PUSHF

格式:PUSHF

功能:SP-(SP)-2

(SP)+1,(SP)—(PSW)

說(shuō)明:不影響狀態(tài)標(biāo)志位。

(4)狀態(tài)標(biāo)志寄存器彈棧指令POPF

格式:POPF

功能:PSW-((SP)+1,(SP))

SP-(SP)+2

說(shuō)明:影響狀態(tài)標(biāo)志寄存器,由裝入的數(shù)值來(lái)確定。

4.輸入輸出指令

有兩條,即IN和OUT,實(shí)現(xiàn)AL或AX與外設(shè)端口之間的數(shù)據(jù)傳送。

32

(1)輸入指令I(lǐng)N

格式:INAL,PORT

INAX,PORT

INAL,DX

INAX,DX

功能:AL-(PORT)

AX-(PORT+1,PORT)

AL-((DX))

AX*((DX)+1,(DX))

其中PORT是I/O端口地址,且在00H~0FFH之間。

(2)輸出指令OUT

格式:OUTPORT,AL

33

(2)輸出指令OUT

格式:OUTPORT,AL

OUTPORT,AX

OUTDX,AL

OUTDX,AX

功能:PORT-(AL)

PORT+1,PORT-(AX)

(DX)一(AL)

(DX)+1,(DX)—(AX)

說(shuō)明:當(dāng)端口地址為00H~0FFH時(shí),可直接尋址;當(dāng)端口地

址為0100H~0FFFFH時(shí),必須使用寄存器DX間接尋址;不影響狀

態(tài)志位。

34

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

算術(shù)運(yùn)算指令有20條,分5種類型,可對(duì)4種類型的數(shù)據(jù)進(jìn)行運(yùn)

算,即無(wú)符號(hào)二進(jìn)制數(shù)、帶符號(hào)二進(jìn)制數(shù)、無(wú)符號(hào)壓縮型BCD碼和無(wú)

符號(hào)非壓縮型BCD碼。運(yùn)算結(jié)果影響狀態(tài)標(biāo)志位。

1.加法指令

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

格式:ADDDST,SRC

功能:DST+(DST)+(SRC)圖4.17加法運(yùn)算源/目操作數(shù)地址

說(shuō)明:①源/目操作數(shù)地址如圖4.17所示,其中目的操作數(shù)不能使用

立即數(shù),兩存儲(chǔ)器單元之間不允許直接加法運(yùn)算;允許段跨越;

②ADD指令不區(qū)分兩個(gè)加數(shù)是無(wú)符號(hào)數(shù)還是帶符號(hào)數(shù),運(yùn)算

結(jié)果的二進(jìn)制形式相同,影響狀態(tài)標(biāo)志位。

35

例如指令:

ADDAL,[BX];AL寄存器指明操作是字節(jié)操作

ADDWORDPTR[BX],12H

;WORDPTR指明內(nèi)存操作數(shù)為字操作數(shù)

又如指令:ADDAX,BX

設(shè)(AX)=1234H,(BX)=0F7C9H

指令執(zhí)行后(AX)=09FDH,OF=0,SF=O,ZF=0,AF=0,

PF=0,CF=1

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

格式:ADCDST,SRC

功能:DST-(DST)+(SRC)+CF

說(shuō)明:進(jìn)位位CF的值加到兩數(shù)和的最低位,其它與ADD指令相同。

36

【例4.7】試編寫程序,計(jì)算雙字4A750000H+78912365H之和。

解:按照雙字操作,由寄存器DX和AX組成32位累加器,先用ADD

指令進(jìn)行低字運(yùn)算,再用ADC指令進(jìn)行高字運(yùn)算,程序如下:

MOVAX,0000H

MOVDX,4A75H

ADDAX,2365H

ADCDX,7891H

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

格式:INCDST

功能:DST-(DST)+1

說(shuō)明:操作數(shù)可以是除立即數(shù)之外的其它尋址方式,可以字節(jié)運(yùn)

算,也可以字運(yùn)算,且不區(qū)分無(wú)符號(hào)數(shù)還是帶符號(hào)數(shù);允許段跨越;

影響除CF之外的其它狀態(tài)標(biāo)志位。

37

2.減法指令

(1)減法指令SUB

格式:SUBDST,SRC

功能:DST+(DST)-(SRC)

說(shuō)明:①源/目操作數(shù)地址如圖4.16所示,目的操作數(shù)不能使用立即

數(shù),兩存儲(chǔ)器單元不能直接進(jìn)行減法運(yùn)算;允許段跨越。

②不區(qū)分操作數(shù)是無(wú)符號(hào)還是符號(hào)數(shù),運(yùn)算結(jié)果的二進(jìn)制形式

相同,影響狀態(tài)標(biāo)志位。

例如指令:SUBAX,[BX]

設(shè)(AX)=578FH,(DS)=1000H,(BX)=2000H,(12000H)

=7890H

指令執(zhí)行后(AX)=ODEFFH,OF=0,SF=1,ZF=O,AF=O,PF=1,

CF=1

38

(2)帶借位減法指令SBB

格式:SBBDST,SRC

功能:DST-(DST)-(SRC)-CF

說(shuō)明:被減數(shù)減去減數(shù),同時(shí)再減進(jìn)位位CF的值,其它與減法指令

SUB相同。

(3)減1指令DEC

格式:DECDST

功能:DST-(DST)-1

說(shuō)明:同INC指令。

例如指令:DECCX

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

格式:NEGDST

功能:DST*-O-(DST)

說(shuō)明:操作數(shù)同INC指令,影響所有狀態(tài)標(biāo)志位,操作數(shù)為零時(shí)

CF=1,其它情況下CF=O。

39

例如指令:NEGAX

設(shè)(AX)=OFFFFH

指令執(zhí)行后(AX))=0001H,OF=0,SF=O,ZF=O,AF=1,

PF=O,CF=1

(5)比較指令CMP

格式:CMPDST,SRC

功能:(DST)-(SRC)置狀態(tài)標(biāo)志位

說(shuō)明:進(jìn)行減法運(yùn)算,不送結(jié)果,置狀態(tài)標(biāo)志位。

3.乘法指令

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

格式:MULSRC

功能:AX*(AL)X(SRC)字節(jié)操作

DX,AX-(AX)X(SRC)字操作

40

說(shuō)明:①源/目操作數(shù)均為無(wú)符號(hào)數(shù);

②目的操作數(shù)必須是累加器AX或AL,源操作數(shù)可以是除立即數(shù)之

外的其它尋址方式;源操作數(shù)允許段跨越;

③除OF和CF之外的狀態(tài)標(biāo)志無(wú)定義;執(zhí)行MUL指令后,若乘積

的高字/高字節(jié)為0,貝!IOF=CF=0;否則,OF=CF=lo

【例4.9】將DAT1和DAT2兩個(gè)字節(jié)單元的無(wú)符號(hào)數(shù)相乘,乘積存放

在DAT3字單元中。

解:使用無(wú)符號(hào)指令,程序如下:

MOVAL,DAT1

MULDAT2

MOVDAT3,AX

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

格式:IMULSRC

功能:操作數(shù)為帶符號(hào)數(shù),其它與MUL相同。

41

說(shuō)明:①源/目操作數(shù)均為帶符號(hào)數(shù);

②同MUL指令;

③除OF和CF之外的標(biāo)志無(wú)定義;執(zhí)行IMUL指令后,若乘積的高

字/高字節(jié)是符號(hào)擴(kuò)展位時(shí),貝!IOF=CF=0;否則,OF=CF=1。

4.除法指令

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

格式:DIVSRC

功能:AL-(AX)/(SRC)的商AH-余數(shù)

AX-(DX,AX)/(SRC)的商DX-余數(shù)

說(shuō)明:①字節(jié)運(yùn)算時(shí)16位的被除數(shù)存放在AX中,字運(yùn)算時(shí)32位的

被除數(shù)存放在DX,AX中;除數(shù)可以是除立即數(shù)之外的其它尋址方

式,允許段跨越;

②所有狀態(tài)標(biāo)志位無(wú)定義。

42

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

格式:IDIVSRC

功能:操作數(shù)是帶符號(hào)數(shù),其它與DIV相同。

說(shuō)明:被除數(shù)的長(zhǎng)度不是除數(shù)的2倍時(shí),被除數(shù)高位符號(hào)擴(kuò)展,其它

與DIV指令相同。

【例4.10]設(shè)(AX)=0400H,(BL)=0B4H,執(zhí)行指令DIVBL和IDIV

BLo

解:①執(zhí)行指令DIVBL

由于(AX)和(BL)為無(wú)符號(hào)數(shù),因此指令DIVBL執(zhí)行后:

(AL)=05HAL一商

(AH)=7CHAH-余數(shù)

43

②執(zhí)行指令I(lǐng)DIVBL

由于(AX)和(BL)為帶符號(hào)的補(bǔ)碼數(shù),因此指令I(lǐng)DIVBL執(zhí)行后:

(AL)=0F3H=-13DAL一商

(AH)=24H=36DAH-余數(shù)

在除法運(yùn)算時(shí)若商溢出,直接轉(zhuǎn)入0型中斷處理。

(3)CBW符號(hào)位擴(kuò)展指令

格式:CBW字節(jié)轉(zhuǎn)換為字

CWD字轉(zhuǎn)換為雙字

功能:字節(jié)擴(kuò)展AH-(AL)的符號(hào)位

字?jǐn)U展DX-(AX)的符號(hào)位

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

在BCD碼數(shù)據(jù)運(yùn)算后必須修正,該類指令共有6條。

44

(1)非壓縮BCD碼加法調(diào)整指令A(yù)AA

格式:AAA

功能:AL一把AL中的和調(diào)整成非壓縮BCD碼格式

AH-(AH)+調(diào)整產(chǎn)生的進(jìn)位值

說(shuō)明:影響狀態(tài)標(biāo)志CF和AF,其余標(biāo)志位無(wú)定義。

例如指令:ADDAL,BL

AAA

(2)壓縮BCD碼加法調(diào)整指令DAA

格式:DAA

功能:AL一把AL中的和調(diào)整成壓縮BCD碼格式

說(shuō)明:兩加數(shù)為壓縮BCD碼,狀態(tài)標(biāo)志OF無(wú)定義,影響其余狀態(tài)

志位。

例如指令:ADDAL,BL

DAA

45

(3)非壓縮BCD碼減法調(diào)整指令A(yù)AS

格式:AAS

功能:AL一把AL中的差調(diào)整成非壓縮BCD碼格式

AH-(AH).調(diào)整產(chǎn)生的借位

說(shuō)明:兩操作數(shù)為非壓縮BCD碼,影響狀態(tài)標(biāo)志CF和AF,其余標(biāo)

志位無(wú)定義。

(4)壓縮BCD碼減法調(diào)整指令DAS

格式:DAS

功能:(AL)一把AL中的差調(diào)整成壓縮BCD碼格式

說(shuō)明:兩操作數(shù)為壓縮BCD碼,狀態(tài)標(biāo)志OF無(wú)定義,影響其余標(biāo)志

(5)非壓縮BCD碼乘法調(diào)整指令A(yù)AM

格式:AAM

功能:AX+把AL中的乘積調(diào)整成非壓縮的BCD碼格式

說(shuō)明:兩乘數(shù)為非壓縮BCD碼,影響狀態(tài)標(biāo)志SF、ZF和PF,其余

標(biāo)志位無(wú)定義。

46

例如指令:MULAL,BL

AAM

(6)非壓縮BCD碼除法調(diào)整指令A(yù)AD

格式:AAD

功能:AL-10X(AH)+(AL)

AH-0

說(shuō)明:①在指令DIV之前使用,被除數(shù)是兩位非壓縮BCD碼,存放

在AX中,AH中存放十位數(shù)字,AL中存放個(gè)位數(shù)字,且高4位均為

0;除數(shù)是一位非壓縮的BCD碼,高4位為0;調(diào)整結(jié)果在AL中,AH

中清0;執(zhí)行其后的DIV指令后,AL中為一位非壓縮BCD碼的商,

AH中為一位BCD碼的余數(shù);

②影響狀態(tài)標(biāo)志SF、ZF和PF,其余OF、CF和AF標(biāo)志位無(wú)

定義。

47

433邏輯運(yùn)算與移位類指令

邏輯運(yùn)算與移位指令有13條,分為3類,即邏輯運(yùn)算指令、移位指令

和循環(huán)移位指令,可對(duì)8位/16位寄存器或存儲(chǔ)器中的數(shù)據(jù)進(jìn)行操作。

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

邏輯運(yùn)算指令有5條,其中源/目操作數(shù)地址同算術(shù)運(yùn)算指令。

(1)邏輯“與"指令A(yù)ND

格式:ANDDST,SRC

功能:DST-(DST)A(SRC)

說(shuō)明:使?fàn)顟B(tài)標(biāo)志CF和OF清0,AF無(wú)定義,SF、ZF和PF由運(yùn)算結(jié)

果設(shè)置。

例如指令:ANDAX,1110111101111111B

;使AX中第7、12位清0,其余位不變

48

(2)邏輯“或”指令OR

格式:ORDST,SRC

功能:DST-(DST)V(SRC)

說(shuō)明:對(duì)狀態(tài)標(biāo)志位的影響同AND指令。

例如指令:ORBX,0001000010000000B

;使BX中第7位、12位置1,其余位不變。

(3)邏輯“異或”指令XOR

格式:XORDST,SRC

功能:DST-(DST)十(SRC)

說(shuō)明:對(duì)狀態(tài)標(biāo)志位的影響同AND指令。

例如指令:XORAL,10100000B

;使AL的第5、7位取反,其余位不變。

49

將AX和CF清零。

解:實(shí)現(xiàn)方法有多種,如下:

方法1:ANDAX,0

方法2:XORAX,AX

方法3:SUBAX,AX

(4)邏輯“非”指令NOT

格式:NOTDSTDST

功能:DST*-(DST)

說(shuō)明:不影響標(biāo)志位。

⑸TEST測(cè)試指令

格式:TESTDST,SRC

功能:(DST)A(SRC)置狀態(tài)標(biāo)志,不送結(jié)果

說(shuō)明:執(zhí)行過(guò)程與AND指令相同,設(shè)置狀態(tài)標(biāo)志,不送結(jié)果;對(duì)狀

態(tài)標(biāo)志位的影響同AND指令。

50

例如指令:TESTAX,0040H;測(cè)試AX中第6位是否為1

2.移位指令

移位指令有4條,包括算術(shù)/邏輯左移與右移,其作用如圖4.18所示。

(1)算術(shù)左移指令SAL

格式:SALDST,CNT

功能:左移,如圖4.18(a)所示,相當(dāng)于操作數(shù)乘以2。

說(shuō)明:①DSF可以是除立即數(shù)之外的任一種尋址方式,移位次數(shù)由

CNT決定,CNT可以是1或寄存器CL;DST可以是字節(jié),也可以是

字;

②影響狀態(tài)標(biāo)志CF、SF、PF和ZF,AF無(wú)定義,OF只在CNT=1時(shí)

有效。

(2)算術(shù)右移指令SAR

51

格式:SARDST,CNT

功能:右移,如所示,相當(dāng)于操作數(shù)除以2。

說(shuō)明:操作數(shù)同指令SAL,對(duì)狀態(tài)標(biāo)志位的影響同指令SAL。

CF<-<<—0>CF

DST—DST

(a)算術(shù)左移(b)算術(shù)右移

CF<—<<—0()—>>—>CF

DSTDST

(C)邏輯左移(d)邏輯右移

圖4.18移位指令示意圖

(3)邏輯左移指令SHL

格式:SHLDST,CNT

功能:左移,如圖4.18(c)所示,相當(dāng)于無(wú)符號(hào)數(shù)乘2。

說(shuō)明:操作數(shù)同指令SAL,對(duì)狀態(tài)標(biāo)志位的影響同指令SAL。

52

(4)邏輯右移指令SHR

格式:SHRDST,CNT

功能:右移,如圖4.18(d)所示,相當(dāng)于無(wú)符號(hào)數(shù)除2。

說(shuō)明:操作數(shù)同SAL指令,對(duì)狀態(tài)標(biāo)志位的影響同指令SAL。

3.循環(huán)移位指令

循環(huán)移位指令有4條,包括帶進(jìn)位/不帶進(jìn)位的循環(huán)左移與右移,其

作用如圖4.19所示。

(1)循環(huán)左移指令ROL

格式:ROLDST,CNT

功能:循環(huán)左移,如圖4.19(a)所示。

說(shuō)明:影響狀態(tài)標(biāo)志位CF,OF只在CNT=1時(shí)有效,不影響SF、

PF、ZF和AF。

53

DSTDST

CF

(a)循環(huán)左移(b)循環(huán)右移

DSTDST

CF<<,CF>>

(C)帶進(jìn)位循環(huán)左移(d)帶進(jìn)位循環(huán)右移

圖4.19循環(huán)移位指令的操作示意圖

(2)循環(huán)右移指令ROR

格式:RORDST,CNT

功能:循環(huán)右移,如圖4.19(b)所示。

說(shuō)明:同指令ROL。

(3)帶進(jìn)位循環(huán)左移指令RCL

格式:RCLDST,CNT

功能:帶進(jìn)位循環(huán)左移,如圖4.19(所示。

說(shuō)明:同指令ROL。

54

(4)帶進(jìn)位循環(huán)右移指令RCR

格式:RCRDST,CNT

功能:帶進(jìn)位循環(huán)右移,如圖4.19(d)所示。

說(shuō)明:同指令ROL。

【例4.12]在寄存器DX和AX中存放有32位無(wú)符號(hào)二進(jìn)制數(shù),試編寫

程序,實(shí)現(xiàn)乘4運(yùn)算。

解:由于是32位數(shù)據(jù),因此需要先對(duì)低16位左移,再對(duì)高16位帶進(jìn)位

左移,重復(fù)兩遍,即乘4,程序如下:

SHLAX,1

RCLDX,1

SHLAX,1

RCLDX,1

55

4.3.4串操作類指令

在程序設(shè)計(jì)中經(jīng)常遇到成組數(shù)據(jù)處理,比如對(duì)一串字符進(jìn)行處

理,可以是字節(jié)串,也可以是字串。所處理的字符長(zhǎng)度可達(dá)64KB字節(jié)。

串操作指令隱含寄存器和標(biāo)志位的作用如表4.:所示。串操作指令有5

條,重復(fù)前綴有3條。

表4.1串指令的寄存器和標(biāo)志位作用

寄存器作用

SI源串變址寄存器,段地址在DS中(允許段超越前綴修改)

DI目的串變址寄存器,段地址在ES中(不允許修改)

CX重復(fù)執(zhí)行次數(shù)計(jì)數(shù)器

AL/AXLODS指令目的操作數(shù),STOS指令的源操作數(shù)

DF=O時(shí)SKDI自動(dòng)增值(字節(jié)增1,字增2)

DF

DF=1時(shí)SKDI自動(dòng)減值(字節(jié)減1,字減2)

FLAG

ZF控制比較/掃描操作結(jié)果

56

1.串傳送指令MOVS

格式:MOVSDST,SRC

MOVSB(字節(jié))

MOVSW(字)

功能:(DI)-((SI))

字節(jié)操作:SI-(SI)±1,DI<-(DI)±1

字操作:SI-(SI)±2,DI<-(DI)±2

說(shuō)明:①指令MOVS在操作數(shù)地址的前面用關(guān)鍵字BYTE/WORD

PTR說(shuō)明是字節(jié)傳送還是字傳送;

②當(dāng)標(biāo)志位DF=0時(shí),地址遞增;DF=1時(shí),地址遞減;

2.串比較指令CMPS

格式:CMPSSRC,DST

CMPSB(字節(jié))

CMPSW(字)

功能:((SI)H(DI))置狀態(tài)狀態(tài)標(biāo)志,不送結(jié)果

57

字節(jié)操作:SI^(SI)±1,DI-(DI)±1

字操作:SI<-(SI)±2,DI-(DI)±2

說(shuō)明:同指令MOVS。

3.串掃描指令SCAS

格式:SCASDST

SCASB(字節(jié))

SCASW(字)

功能:用AL/AX中的數(shù)據(jù)減去DI指示的數(shù)據(jù),置狀態(tài)標(biāo)志,但不

送結(jié)果。

字節(jié)操作:(AL)?((DI)),DI-(DI)±1

字操作時(shí):(AX).((DI)),DI-(DI)±2

說(shuō)明:同指令MOVS。

58

4.串裝入指令LODS

格式:LODSSRC

LODSB(字節(jié))

LODSW(字)

功能:從SI指示的存儲(chǔ)器單元讀取數(shù)據(jù),送入AL/AX中。

字節(jié)操作:(AL)一((SI)),SI-(SI)±1

字操作:(AX)一((SI)),SI-(SI)±2

說(shuō)明:同指令MOVS。

5.串存儲(chǔ)指令STOS

格式:STOSDST

STOSB(字節(jié))

STOSW(字)

功能:把AL/AX中的數(shù)據(jù)傳送到DI指示的存儲(chǔ)器單元中。

字節(jié)操作:(DI)一(AL),DI-(DI)±1

字操作時(shí):(DI)一(AX),DI-(DI)土2

說(shuō)明:同指令MOVS。

59

6.串重復(fù)前綴指令

串重復(fù)前綴指令有三條,用來(lái)修飾串操作指令,使之重復(fù)執(zhí)行。

(1)重復(fù)前綴指令

格式:REPStringprimitive;可作用于指令MOVS、LODS或

STOS

(2)相等時(shí)重復(fù)前綴指令

格式:REPE/REPZStringprimitive;可作用于指令CMPS或

SCAS

(3)不相等時(shí)重復(fù)前綴指令

格式:REPNE/REPNZStringprimitive;可作用于指令CMPS或

SCAS

【例4.13]若在主存TABLE起始的區(qū)域中存放有1K字節(jié)的數(shù)據(jù),試

編程將該數(shù)據(jù)塊傳送到NEXT起始的區(qū)域中。

60

解:首先設(shè)置源/目操作數(shù)起始地址,然后使用重復(fù)傳送指令編

程,程序如下:

MOVAX,SEGTABLE

;SEG是取值運(yùn)算符,將TABLE標(biāo)號(hào)所在段的段地址送入累加器AX中

MOVDS,AX

MOVAX,SEGNEXT

MOVES,AX

MOVSI,OFFSETTABLE

;OFFSET是取值運(yùn)算符,將TABLE所在段的段內(nèi)偏移地址送入寄存

器SI中

MOVDLOFFSETNEXT

MOVCX,1024

CLD;使DF=0

REPMOVSB

61

4.3.5控制轉(zhuǎn)移類指令

控制轉(zhuǎn)移指令有28條,分5種類型,主要用于控制程序的執(zhí)行流程。

1.無(wú)條件轉(zhuǎn)移指令

可段內(nèi)轉(zhuǎn)移,也可以段間轉(zhuǎn)移,有4種尋址方式,詳見(jiàn)422節(jié)。

格式:JMPOPR;其中OPR為標(biāo)號(hào)

功能:段內(nèi)轉(zhuǎn)移IP-OPR偏移地址,CS不變

段間轉(zhuǎn)移CS-OPR段地址,IP-OPR偏移地址

2.條件轉(zhuǎn)移指令

以狀態(tài)標(biāo)志寄存器(PSW)相應(yīng)位的值為依據(jù),滿足條件則轉(zhuǎn)移,

屬段內(nèi)短轉(zhuǎn)移,相對(duì)偏移量為428?+127字節(jié)。

(1)單標(biāo)志位轉(zhuǎn)移指令

62

①JZ/JEOPR

功能:若ZF=L結(jié)果為0,轉(zhuǎn)移到OPR處執(zhí)行程序,否則順序執(zhí)行。

@JNZ/JNEOPR

功能:若ZF=0,結(jié)果不為0,轉(zhuǎn)移到OPR處執(zhí)行程序,否則順序執(zhí)行。

③JCOPR

功能:若CF=L有進(jìn)位,轉(zhuǎn)移到OPR處執(zhí)行程序,否則順序執(zhí)行。

@JNCOPR

功能:若CF=0,無(wú)進(jìn)位,轉(zhuǎn)移到OPR處執(zhí)行程序,否則順序執(zhí)行。

⑤JOOPR

功能:若OF=L有溢出,轉(zhuǎn)移到OPR處執(zhí)行程序,否則順序執(zhí)行。

(6)JNOOPR

功能:若OF=0,無(wú)溢出,轉(zhuǎn)移到OPR處執(zhí)行程序,否則順序執(zhí)行。

63

⑦JSOPR

功能:若SF=L結(jié)果為負(fù),轉(zhuǎn)移到OPR處執(zhí)行程序,否則順序執(zhí)行。

@JNSOPR

功能:若SF=0,結(jié)果為正,轉(zhuǎn)移到OPR處執(zhí)行程序,否則順序執(zhí)行。

(9)JPE/JPOPR

功能:若PF=L奇偶標(biāo)志為1,轉(zhuǎn)移到OPR處執(zhí)行程序,否則順序執(zhí)行。

@JPO/JNPOPR

功能:若PF=0,奇偶標(biāo)志為0,轉(zhuǎn)移到OPR處執(zhí)行程序,否則順序執(zhí)行。

(2)無(wú)符號(hào)數(shù)比較轉(zhuǎn)移指令

@JA/JNBEOPR

功能:若CF=0或ZF=0,被減數(shù)高于減數(shù),轉(zhuǎn)移到OPR處執(zhí)行程序,

否則順序執(zhí)行。

64

?JNA/JBEOPR

功能:若CF=1或ZF=L被減數(shù)低于或等于減數(shù),轉(zhuǎn)移到OPR處執(zhí)行

程序,否則順序執(zhí)行。

(3)JNAE/JBOPR

功能:若CF=L被減數(shù)低于減數(shù),轉(zhuǎn)移到OPR處執(zhí)行程序,否則順

序執(zhí)行。

@JAE/JNBOPR

功能:若CF=0,被減數(shù)不低于減數(shù),轉(zhuǎn)移到OPR處執(zhí)行程序,否

則順序執(zhí)行。

(3)帶符號(hào)數(shù)比較轉(zhuǎn)移指令

@JL/JNGEOPR

功能:若SF十OF=L被減數(shù)小于減數(shù),轉(zhuǎn)移到OPR處執(zhí)行程序,否

則順序執(zhí)行。

@JNL/JGEOPR

65

功能:若SF十OF=0,被減數(shù)大于或等于減數(shù),轉(zhuǎn)移到OPR處執(zhí)

行程序,否則順序執(zhí)行。

@JLE/JNGOPR

功能:若ZF=1或SF十OF=L被減數(shù)小于或等于減數(shù),轉(zhuǎn)移到

OPR處執(zhí)行程序,否則順序執(zhí)行。

@JNLE/JGOPR

功能:若ZF=O且SF十OF=0,被減數(shù)大于減數(shù),轉(zhuǎn)移到OPR處執(zhí)

行程序,否則順序執(zhí)行。

2.循環(huán)控制指令

控制程序的重復(fù)執(zhí)行,以CX中的值或CX與ZF標(biāo)志位的值結(jié)合,作為

轉(zhuǎn)移條件,屬段內(nèi)短轉(zhuǎn)移,相對(duì)偏移量為-128?+127字節(jié)。

(1)循環(huán)指令

66

格式:LOOPOPR

功能:CX<-(CX)-L測(cè)試(CX)#0,轉(zhuǎn)移到標(biāo)號(hào)處繼續(xù)循環(huán),否則退出循環(huán)。

(2)相等或?yàn)?時(shí)轉(zhuǎn)移

格式:LOOPZ/LOOPEOPR

功能:CX*-(CX)-L測(cè)試(CX)WO且ZF=L轉(zhuǎn)移到標(biāo)號(hào)處繼續(xù)循環(huán),否則

退出循環(huán)。

(3)不相等或不為0時(shí)轉(zhuǎn)移

格式:LOOPNZ/LOOPNEOPR

功能:CX-(CX)-1,測(cè)試(CX)#0且ZF=0,轉(zhuǎn)移到標(biāo)號(hào)處繼續(xù)循環(huán),否則

退出循環(huán)。

(4)測(cè)試轉(zhuǎn)移指令

格式:JCXZOPR

功能:測(cè)試(CX)=0,轉(zhuǎn)移到標(biāo)號(hào)處繼續(xù)循環(huán),否則順序執(zhí)行。

67

【例4.14]編寫程序,求1+2+3+.??+100的累加和,結(jié)果保存在AX寄

存器中。

解:采用循環(huán)累加的方法編程,程序如下:

MOVAX,0

MOVCX,100

LP:ADDAX,CX

LOOPLP

3.子程序調(diào)用與返回指令

子程序通過(guò)指令CALL調(diào)用,執(zhí)行完后,通過(guò)指令RET返回,有4種

尋址方式,可以段內(nèi)調(diào)用,也可以段間調(diào)用。

(1)子程序調(diào)用指令

格式:CALLDST;其中DST為子程序名(也稱為過(guò)程名)。

68

功能:①段內(nèi)調(diào)用SP-(SP)—2

(SP)+L(SP)-(IP);返回地址壓棧

IP-DST偏移地址

②段間調(diào)用SP-(SP)—2

(SP)+L(SP)-(CS);返回段地址壓棧

SP-(SP)-2

(SP)+1,(SP)-(IP);返回偏移地址壓棧

IP-DST偏移地址

CS-DST段地址

(2)子程序返回指令RET

作為子程序的最后一條指令,從堆棧中彈出斷點(diǎn)地址,裝入IP或

IP與CS中,即返回到主程序的斷點(diǎn)處。若帶參數(shù)(指令RETN),

使堆棧指針SP移動(dòng)N個(gè)偶數(shù)字節(jié)單元。

69

格式:RET或RETN;其中N是一個(gè)整型表達(dá)式

功能:①段內(nèi)返回IP-((SP)+L(SP))

SP-(SP)+2

帶參數(shù)返回時(shí)還要再執(zhí)行下面的一步操作

SP-(SP)+N

②段間返回IP-((SP)+L(SP))

SP-(SP)+2

CS*((SP)+L(SP))

SP-(SP)+2

帶參數(shù)返回時(shí)還要再執(zhí)行下面的一步操作

SP-(SP)+N

4.中斷指令

(1)中斷指令I(lǐng)NT

70

格式:INTOPR

功能:SP-(SP)—2

(SP)+1,(SP)-PSW

SP-(SP)-2

(SP)+1,(SP)-(CS)

SP+(SP)-2

(SP)+1,(SP)-(IP)

IP-(OPRX4)

CS-(0PRX4+2)

其中OPR為中斷類型碼,其值在0~255范圍內(nèi)。

(2)溢出中斷指令I(lǐng)NTO

格式:INTO

功能:PSW、CS、IP壓棧

71

IP-(10H)

CS-(12H)

(3)中斷返回指令I(lǐng)RET

格式:IRET

功能:IP-((SP)+1,(SP))

SP-(SP)+2

CS*((SP)+L(SP))

SP*-(SP)+2

PSW-((SP)+1,(SP)

SP-(SP)+2

指令I(lǐng)NT和INTO只影響控制標(biāo)志IF和TF,使IF=TF=O,不影響其余標(biāo)

志位;中斷返回指令I(lǐng)RET影響所有標(biāo)志位。

溫馨提示

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