![微型計(jì)算機(jī)原理與應(yīng)用 教學(xué) 作者 陳建鐸 宋彩利 程俊波 第四章 匯編語(yǔ)言_第1頁(yè)](http://file4.renrendoc.com/view4/M00/16/1E/wKhkGGaXIeeARPHyAAGnM9WaMqE996.jpg)
![微型計(jì)算機(jī)原理與應(yīng)用 教學(xué) 作者 陳建鐸 宋彩利 程俊波 第四章 匯編語(yǔ)言_第2頁(yè)](http://file4.renrendoc.com/view4/M00/16/1E/wKhkGGaXIeeARPHyAAGnM9WaMqE9962.jpg)
![微型計(jì)算機(jī)原理與應(yīng)用 教學(xué) 作者 陳建鐸 宋彩利 程俊波 第四章 匯編語(yǔ)言_第3頁(yè)](http://file4.renrendoc.com/view4/M00/16/1E/wKhkGGaXIeeARPHyAAGnM9WaMqE9963.jpg)
![微型計(jì)算機(jī)原理與應(yīng)用 教學(xué) 作者 陳建鐸 宋彩利 程俊波 第四章 匯編語(yǔ)言_第4頁(yè)](http://file4.renrendoc.com/view4/M00/16/1E/wKhkGGaXIeeARPHyAAGnM9WaMqE9964.jpg)
![微型計(jì)算機(jī)原理與應(yīng)用 教學(xué) 作者 陳建鐸 宋彩利 程俊波 第四章 匯編語(yǔ)言_第5頁(yè)](http://file4.renrendoc.com/view4/M00/16/1E/wKhkGGaXIeeARPHyAAGnM9WaMqE9965.jpg)
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鐵管制品項(xiàng)目可行性研究報(bào)告
- 公眾號(hào)廣告服務(wù)合同范本
- 農(nóng)場(chǎng)收購(gòu)協(xié)議合同范本
- 2025年大氣汞排放檢測(cè)市場(chǎng)環(huán)境分析
- 乙方簽字合同范本模板
- 2025年針織衫項(xiàng)目可行性研究報(bào)告
- 2025年度單親家庭子女撫養(yǎng)費(fèi)用減免及保障合同
- 2025年雙點(diǎn)彈力襯布項(xiàng)目投資可行性研究分析報(bào)告
- 2025年度家政服務(wù)行業(yè)市場(chǎng)拓展合同范本
- 體育用品行業(yè)發(fā)展?jié)摿︻A(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 政治校本課程
- 川2020J146-TJ 建筑用輕質(zhì)隔墻條板構(gòu)造圖集
- (完整)讀歌詞猜歌名
- 八年級(jí)下開(kāi)學(xué)第一課主題班會(huì)
- 初中英語(yǔ)人教版 八年級(jí)上冊(cè) 單詞默寫表 漢譯英
- pcs-9611d-x說(shuō)明書國(guó)內(nèi)中文標(biāo)準(zhǔn)版
- GB/T 1634.1-2004塑料負(fù)荷變形溫度的測(cè)定第1部分:通用試驗(yàn)方法
- 無(wú)人機(jī)航拍技術(shù)理論考核試題題庫(kù)及答案
- T∕CMATB 9002-2021 兒童肉類制品通用要求
- 工序勞務(wù)分包管理課件
- 暖通空調(diào)(陸亞俊編)課件
評(píng)論
0/150
提交評(píng)論