匯編語言課件2-2_第1頁
匯編語言課件2-2_第2頁
匯編語言課件2-2_第3頁
匯編語言課件2-2_第4頁
匯編語言課件2-2_第5頁
已閱讀5頁,還剩82頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

教學提示

全面而準確地理解每條指令

的功能和應(yīng)用,是編寫匯編

語言程序的關(guān)鍵

旨令

CHSH3

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

---------------------

□”數(shù)據(jù)傳送是計算機中最基本、最重要

的一種操作

>傳送指令也是最常使用的一類指令

?傳送指令把數(shù)據(jù)從一個位置傳送到另

一個位置.

?際標志寄存器傳送指令外,均不影響r

標志位

A重點掌握

MOVXCHGXLATPUSHPOPLEA

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

>提供方便靈活的通用傳送操作

口A有3條指令

PMOV

XCHG

XLAT

■傳送指令MOV(move)

?把一個字節(jié)或字的操作數(shù)從源地址傳

送至目的地址

口MOVreg/mem,imm

MOVreg/mem/seg,reg

MOVreg/seg,mem

MOVreg/mem,seg

;段寄存器送寄存器或主存

moval,4;al-4,子節(jié)傳送

movex,Offh;ex-OOffh,字傳送

注意立即數(shù)是字節(jié)量還是字量

k匕明確指令是字節(jié)操作還是字操作

movwordptr[si+2],Obh

;wordptr說明是字操作

例2.2:寄存器傳送

J

movax,bx;ax-bx,字傳送

movah,al;ah-al,字節(jié)傳送

movds,ax;dsax,字傳送

mov[si],alsi-al,字節(jié)傳送

例2.3:存儲器傳送

moval,[bx_

movdx,[bp];dx-ss:[bp

moves,[si];es<-ds:[si

l不存在存儲器向存儲器的傳送指令

7

第4riMOV指令傳送功能

□立即數(shù)

儲通用寄存器

W■>

口器AXBXCXDX

BPSPSIDI

、/'/

段寄存器

CSDSESSS

MOV也并非任意傳送

第2裴一■非法傳送種種

兩個操作數(shù)的類型不一致叵妞

I■例如源操作數(shù)是字節(jié),而目的操作

h數(shù)是字;或相反

■?兩個操作數(shù)不能都是存儲器回0

■傳送指令很靈活,但主存之間的直

接傳送卻不允許,

?段寄存器的操作有一些限制m]

■段寄存器屬專用寄存器,對他們的

操作能力有限

兩個操作數(shù)的類型要一致

A絕大多數(shù)雙操作數(shù)指令,除非特別說明,目

的操作數(shù)與源操作數(shù)必須類型一致,否則為非

法指令

MOVAL,050AH

;非法指令:050Ah為字,而AL為字節(jié)

>寄存器有明確的字節(jié)或字類型,有寄存器參—

與的指令其操作數(shù)類型就是寄存器的類型"

>對于存儲器單元與立即數(shù)同時作為操作數(shù)的

情況,必須顯式指明;byteptr指示字節(jié)類型,

wordptr指示字類型

斷邕-,兩個操作數(shù)不能都是存儲器

=□nh

>8086指令系統(tǒng)不允許兩個操作數(shù)都是

_存儲單元(除串操作指令),要實現(xiàn)這

.種傳送,可通過寄存器間接實現(xiàn)

movax,bufferl

;ax-bufferl(將bufferl內(nèi)容送ax)

movbuffer2,ax

;buffer2-ax

;這里buffer1和buffer2是兩個字變量

;實際表示直接尋址方式

第2,要小心段寄存器的操作

□>不允許立即數(shù)傳送給段寄存器

MOVDS,100H

;非法指令:立即數(shù)不能傳送段寄存器

A不允許直接改變CS值

MOVCS,[SI];不允許使用的指令J1

A不允許段寄存器之間的直接數(shù)據(jù)傳送.

MOVDS,ES

;非法指令:不允許段寄存器間傳送

^■;"由指:HG(exchange)

B1"---------------------⑼

?把兩個地方的數(shù)據(jù)進行互換Y7

XCHGreg,reg/mem

;regoreg/mem

A寄存器與寄存器之間對換數(shù)據(jù)J

A寄存器與存儲器之間對換數(shù)據(jù)■■

>不能在存儲器與存儲器之間對換數(shù)據(jù)

例2.6:寄存器間交換

movax,1234h;ax=1234h

movbx,5678h;bx=5678h

xchgax,bx

;ax=5678h,bx=1234h

xchgah,al;ax=7856h

"列2.7:寄存器與存儲器交換

xchgax,[2000h];字交換

;等同于xchg[2000h],ax

xchgal,[2000h];字節(jié)交換

;等同于xchg[2000h],al

第2,換碼指令XLAT(translate)

□A將BX指定的緩沖區(qū)中、AL指定的位移

處的一個字節(jié)數(shù)據(jù)取出賦給AL

XLAT;al-ds:[bx+al]

A換碼指令執(zhí)行前:.

在主存建立一個字節(jié)量表格,內(nèi)含要轉(zhuǎn)換成的目的代碼■

表格首地址存放于BX,AL存放相對表格首地址的位移量

A換碼指令執(zhí)行后:

將AL寄存器的內(nèi)容轉(zhuǎn)換為目標代碼

例2.8:代碼轉(zhuǎn)換

movbx,100h

moval,03h

xlat

9換碼指令沒有顯式的操作數(shù),但使用

了BX和AL;因為換碼指令使用了隱含

尋址方式一采用默認操作數(shù)

V______________________________7

第2皂上2.3.2堆棧操作指令

>堆棧是一個“后進先出

FILO"(或說“先進后

出FILO”)的主存區(qū)域,

*SP

位于堆棧段中;SS段寄(棧頂)

存器記錄其段地址

A堆棧只有一個出口,即

當前棧頂;用堆棧指針

寄存器SP指定

?棧頂是地址較小的一端0000H

(低端),棧底不變

第2要A堆棧和隊列

=□nh

?堆棧:按照后進先

出(LIFO)的原則組織

的存儲器空間(棧)

LIFO

A隊列:按照先進先

出(FIFO)的原則組織

的存儲器空間g匹

FIFO

第2章■堆棧的操作

?堆棧只有兩種基本操作:進棧和

出棧,對應(yīng)兩條指令PUSH和POP

.使

,;出棧指令把棧頂

針的一個字傳送至指

然SP

個2,

數(shù)

頂,

定的目的操作數(shù),

入嚓后堆棧指針加

部SP2

第2制A進木戔指令PUSH

=□=*--------------

PUSHrl6/ml6/seg

;SP-SP—2

;SS:[SP]—rl6/ml6/seg

pushax

push[2000h]

第2章■出棧指令POP

POPrl6/ml6/seg

rl6/ml6/seg*-SS:[SP]

;SP—SP+2SS8000H代

POPAX

的箱碼

SP0200H段

80000H

popaxSP

802015H

pop[2000h]DX棧頂

80202H

指令執(zhí)行前

POPDX指令執(zhí)行過程

第2要?堆棧的特點

□?堆棧操作的單位是字,進棧和出棧只對字量

?字量數(shù)據(jù)從棧頂壓入和彈出時,都是低地址

字節(jié)送低字節(jié),高地址字節(jié)送高字節(jié)

?堆棧操作遵循先進后出原則,但可用存儲器

i尋址方式隨機存取堆棧中的數(shù)據(jù)

>堆棧常用來________,

■臨時存放數(shù)據(jù)

■傳遞參數(shù)

■保存和恢復寄存器

pushax;進入子程序后

pushbx

pushds

???

popds;返回主程序前

popbx

popax

第2,2.3.3標志寄存器傳送指令

?標志寄存器傳送指令用來傳送標

志寄存器FLAGS的內(nèi)容,方便進

行對各個標志位的直接操作

>有2對4條指令

■低8位傳送:LAHF和SAHF

■16位傳送:PUSHF和POPF

第2皂■標志低字節(jié)進出AH指令

LAHFSAHF

;AH-FLAGS的低字節(jié);FLAGS的低字節(jié)-AH

ALAHF指令將標志寄存器ASAHF將AH寄存器內(nèi)容

的低字節(jié)送寄存器AH送FLAGS的低字節(jié)

>SF/ZF/AF/PF/CF狀態(tài)標A用AH的第7/6/4/2/0位

志位分別送入AH的第相應(yīng)設(shè)置SF/ZF/AF/

7/6/4/2/0位,而AH的PF/CF標志

第5/3/1位任意

第21■標志寄存器進出堆棧指令

PUSHFPOPF

;SP-SP—2;FLAGS-SS:[SP]

;SS:[SP]-FLAGS;SP-SP+2

>PUSHF指令將標志寄存APOPF指令將棧頂字單

器的內(nèi)容壓入堆棧,元內(nèi)容送標志寄存器

同時棧頂指針SP減2同時棧頂指針SP加2

pushf;保存全部標志到堆棧

popax;從堆棧中取出全部標志

orax,OlOOh;設(shè)置D8=TF=1,

;ax其他位不變

pushax;將ax壓入堆棧

popf;FLAGS-AX

;將堆棧內(nèi)容取到標志寄存器

第2*|12.3.4地址傳送指令

A地址傳送指令將存儲器單元的邏

輯地址送至指定的寄存器

■有效地址傳送指令LEA

■指針傳送指令LDS和LES

>注意不是獲取存儲器單元的內(nèi)容—

第2an有效地址傳送指令LEA(loadEA)

>將存儲器操作數(shù)的有效地址傳

口送至指定的16位寄存器中

二7

LEArl6,mem

;rl6-mem的有效地址EA,

LEA例213:獲取有效地址

movbx,0400h

movsi,3ch

leabx,[bx+si+0f62h]

;BX=0400h+003ch+0f62h=139EH

均獲得主存單元的有效地址;不是

物理地址,也不是該單元的內(nèi)容

治可以實現(xiàn)計算功能|

第21J指針傳送指令

LDSr16,memLESrl6,mem

;rl6-mem,;rl6-mem,

;DS-mem+2;ES-mem+2

>LDS指令將主存中mem>LES指令將主存中mem

指定的字送至rl6,指定的字送至rl6,

并將mem的下一字送并將mem的下一字送

DS寄存器ES寄存器

例214:地址指針傳送

movwordptr[3060h],OlOOh

movwordptr[3062h],1450h

lesdi,[3060h];es=1450h,di=0100h

Idssi,[3060h];ds=1450h,si=0100h

9mem指定主存的連續(xù)4個字節(jié)作

為邏輯地址(32位的地址指針),

送入DS:rl6或ES:rl6

第2,2.3.5輸入輸出指令

□>8086通過輸入輸出指令與外設(shè)進行數(shù)

據(jù)交換;呈現(xiàn)給程序員的外設(shè)是端口

(Port)即I/O地址

A8086用于尋址外設(shè)端口的地址線為16

條,端口最多為2化=65536(64K).

個,端口號為0000H?FFFFH?

?每個端口用于傳送一個字節(jié)的外設(shè)數(shù)

據(jù)

第2*|1輸入輸出尋址方式

A8086的端口有64K個,無需分段,

設(shè)計有兩種尋址方式

。直接尋址:只用于尋址00H?FFH前

256個端口,操作數(shù)i8表示端口號

?:?間接尋址:可用于尋址全部64K個端.

口,DX寄存器的值就是端口號■

>對大于FFH的端口只能采用間接尋

址方式

第2盍』輸入指令I(lǐng)N/-

=!■■IIN

>將外設(shè)數(shù)據(jù)傳送給CPU內(nèi)的AL/AX_____

rWI

I—LINAL,i8

;字節(jié)輸入:AL-I/O端口(i8直接尋址)

INAL,DX

;字節(jié)輸入:AL-I/O端口(DX間接尋址)J

INAX,i8■

;字輸入:AX-I/O端口(i8直接尋址)

INAX,DX

;字輸入:AX-I/O端口(DX間接尋址)

例2,5:輸入字量

;直接尋址,字節(jié)量輸入

inal,21h

movah,al'兩段功能相同

inal,20h?■字量數(shù)據(jù)傳送實

;直接尋址,際上實現(xiàn)了連續(xù)的

inax,20h兩個端口地址的字

;間接尋址,字[節(jié)量傳送

movdx,20h

inax,dx

第2要―?輸出指令OUT

OUT

□>將CPU內(nèi)的AL/AX數(shù)據(jù)傳送給外設(shè)

『;?//:演示〕

I—LOUTi8,AL

;字節(jié)輸出:I/O端口一AL(i8直接尋址)

OUTDX,AL

;字節(jié)輸出:I/O端口一AL(DX間接尋址)

OUTi8,AX

;字輸出:I/O端口-AX(i8直接尋址)

OUTDX,AX

;字輸出:I/O端口-AX(DX間接尋址)

■IH

;間接尋址,字節(jié)量輸出

movdx,3fch

moval,80h

outdx,al

第2要一■2.4算術(shù)運算類指令

□>四則運算是計算機經(jīng)常進行的一種操

作。算術(shù)運算指令實現(xiàn)二進制(和3

進制)數(shù)據(jù)的四則運算

>請注意算術(shù)運算類指令對標志的影響

■掌握:ADD/ADC/INC、SUB/SBB/DEC/

NEG/CMP

■熟悉:MUL/IMUL、DIV/IDIV

■理解:CBW/CWD、DAA/DAS>AAA/

AAS/AAM/AAD

第2邕■力口§去指令ADD

□AADD指令將源與目的操作數(shù)相加,結(jié)

果送到目的操作數(shù)

>ADD指令按狀態(tài)標志的定義相應(yīng)設(shè)置

ADDreg,imm/reg/mem

;reg-reg+imm/reg/mem

ADDmem,imm/reg

;mem*-mem+imm/reg

例2」7a:加法運算

moval,Ofbh;al=0fbh

addal,07h;al=02h

movwordptr[200h],4652h

;[200h]=4652h

movbx,Ifeh;bx=lfeh

addal,bl;al=00h

addwordptr[bx+2],OfOfOh

;[200h]=3742h

1E幅,

w

第2,帶進位加法指令ADC

□AADC指令將源與目的操作數(shù)相加,再加上進

位CF標志,結(jié)果送到目的操作數(shù)

>ADC指令按狀態(tài)標志的定義相應(yīng)設(shè)置

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

運算

ADCreg,imm/reg/mem

;reg*-reg+imm/reg/mem+CF

ADCmem,imm/reg

9mem-mem+imm/reg+CF

例2.18a:雙字加法

J

movax,4652h9ax=4652h

addax,OfOfOh9ax=3742h,CF=1

movdx,0234hdx=0234h

adcdx,OfOfOhdx=f325h,CF=O

;DX.AX=02344652H

+FOFOFOFOH

=F3253742H

第2空增量指令I(lǐng)NC(increment)

□AINC指令對操作數(shù)加1(增量)

I-IAINC指令不影響進位CF標志,按

1定義設(shè)置其他狀態(tài)標志

INCreg/mem

;reg/mem^reg/mem+1

incbx

incbyteptr[bx

2

Un減法指令SUB(subtract)

ASUB指令將目的操作數(shù)減去源操作數(shù),

結(jié)果送到目的操作數(shù)

>SUB指令按照定義相應(yīng)設(shè)置狀態(tài)標志

SUBreg,imm/reg/mem

;reg^reg—imm/reg/mem

SUBmem,imm/reg

;imm/reg

例247b:減法運算J

moval,Ofbh;al=Ofbh

subal,07h;al=0f4h,CF=O

movwordptr[200h],4652h

;[200h]=4652h

movbx,Ifeh;bx=lfeh

subal,bl;al=0f6h

subwordptr[bx+2],OfOfOh

;[200h]=5562h,CF=1

r意;

第2要一?帶借位減法指令SBB

ASBB指令將目的操作數(shù)減去源操作數(shù),再減

去借位CF(進位),結(jié)果送到目的操作數(shù)。

>SBB指令按照定義相應(yīng)設(shè)置狀態(tài)標志

ASBB指令主要與SUB配合,實現(xiàn)多精度減法

運算

SBBreg,imm/reg/mem

;reg*-reg—imm/reg/mem—CF

SBBmem,imm/reg

9mem-mem—imm/reg-CF

例2.18b:雙字減法

Imovax,4652h;ax=4652h

Isubax,OfOfOh;ax=5562h,CF=1

Imovdx,0234h;dx=0234h

Isbbdx,OfOfOh

;dx=1143h,CF=1

I;DX.AX=0234

4652H

I-F0F0

FOFOH

I=1143

第2,減量指令DEC(decrement^、

----------------------------------------------------------------------------------g.

ADEC指令對操作數(shù)減1(減量)

ADEC指令不影響進位CF標志,按

定義設(shè)置其他狀態(tài)標志

DECreg/mem

;reg/mem-reg/mem—1

INC指令和DEC指令都是單操作數(shù)指令

)主要用于對計數(shù)器和地址指針的調(diào)整

<7

第求補指令NEG(negative)

三NEG指令對操作數(shù)執(zhí)行求補運算:用

零減去操作數(shù),然后結(jié)果返回操作數(shù)

h?求補運算也可以表達成:將操作數(shù)按

位取反后加1

ANEG指令對標志的影響與用零作減法

的SUB指令一樣

NEGreg/mem

;reg/mem^O-reg/mem;

NEG

例219:求補運算

movax,0ff64h

negal

;ax=ff9ch,OF=0、SF=1、ZF=0、PF二1、CF=1

subal,9dh

;ax=ffffh,OF二0、SF=1、ZF=0、PF二1、CF=1

negax

;ax=0001h,OF二0、SF二0、ZF二0、PF二0、CF=1

decal

;ax=0000h,OF二0、SF二0、ZF二1、PF=KCF=1

negax

;ax=0000h,OF=0、SF=0、ZF二1、PF二1、

■比較指令CMP(compare)

ACMP指令將目的操作數(shù)減去源操作數(shù),

按照定義相應(yīng)設(shè)置狀態(tài)標志

ACMP指令執(zhí)行的功能與SUB指令,但

結(jié)果不回送目的操作數(shù)

reg,imm/reg/mem

;reg-imm/reg/mem

CMPmem,imm/reg

;mem—imm/reg

CMP例2.20:比較AL與100

cmpal,100;al-100

jbbelow

;al<100,跳轉(zhuǎn)到below執(zhí)行

/A

“.執(zhí)行比較指令之后,可以根據(jù)標志

判斷兩個數(shù)是否相等、大小關(guān)系等

j

ITLC~~cm?aii、—au?JL

below:

J2.4.3乘法指令

MULr8/m8IMULr8/m8

;無符號字節(jié)乘法;有符號字節(jié)乘法

;AX-ALXr8/ni8;AX<-ALXr8/m8

MULrl6/ml6IMULrl6/ml6

;無符號字乘法;有符號字乘法

;DX.AX<-AXXrl6/ml6;DX.AX<-AXXrl6/ml6

說明

第2,乘法指令的功能

□>乘法指令分無符號和有符號乘法指令

?乘法指令的源操作數(shù)顯式給出,隱含

使用另一個操作數(shù)AX和DX

■字節(jié)量相乘:AL與r8/m8相乘,得到16位

的結(jié)果,存入AX

■字量相乘:AX與M6/m16相乘,得到32■

位的結(jié)果,其高字存入DX,低字存入AX

>乘法指令利用OF和CF判斷乘積的高一

半是否具有有效數(shù)侑

第21■乘法指令對標志的影響

UA乘法指令如下影響OF和CF標志:

■MUL指令——若乘積的高一半(AH或DX)

為0,則OF=CF=0;否貝I]OF=CF=1

■IMUL指令——若乘積的高一半是低一半

i的符號擴展,則OF=CF=0;否則均為1

>乘法指令對其他狀態(tài)標志沒有定義.

Z對標志沒有定義:指令執(zhí)行后這些標志是任,

意的、不可預測(就是誰也不知道是0還是1)

獨對標志沒有影響:指令執(zhí)行不改變標志狀態(tài)

例2.21:乘法運算

moval,0b4h;al=b4h=180

movbl,llh;bl=llh=17

mulbl;ax=0bf4h=3060

;OF=CF=LAX高8位不為0

moval,0b4h;al=b4h=—76

movbl,llh;bl=llh=17

imulbl;ax=faf4h=—1292

;OF=CF=1,AX高8位含有效數(shù)字

第2更>2.4.4除法指令

DIVr8/m8;無符號字節(jié)除法:[W]

AL-AX4-r8/m8的商,Ah-AX+r8/m8的余數(shù)

DIVrl6/ml6;無符號字除法:

;AX-DX.AX+rl6/ml6的商,DX-DX.AX+rl6/ml6的余數(shù)

IDIVr8/m8;有符號字節(jié)除法:

AL-AX4-r8/m8的商,Ah-AX+r8/m8的余數(shù)

IDIVrl6/ml6;有符號字除法:

;AX-DX.AX+rl6/ml6的商,DX-DX.AX+rl6/ml6的余數(shù)

第2,「I除法指令的功能

□>除法指令分無符號和有符號除法指令

?除法指令的除數(shù)顯式給出,隱含使用

另一個操作數(shù)AX和DX作為被除數(shù)

■字節(jié)量除法:AX除以r8/m8,8位商存入

AL,8位余數(shù)存入AH

■字量除法:DX.AX除以M6/m16,16位商■

存入AX,16位余數(shù)存入DX

>除法指令對標志沒有定義

>除法指令會產(chǎn)生結(jié)果溢出

第2裴一■除法錯中斷

□?當被除數(shù)遠大于除數(shù)時,所得的商就

有可能超出它所能表達的范圍。如果

存放商的寄存器AL/AX不能表達,便

產(chǎn)生溢出,086CPU中就產(chǎn)生編號為

0的內(nèi)部中斷除法錯中斷

■對DIV指令,除數(shù)為0,或者在字節(jié)除時

商超過8位,或者在字除時商超過16位,

則發(fā)生除法溢出

■對IDIV指令,除數(shù)為0,或者在字節(jié)除時

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

商不在?32768?32767范圍內(nèi),則發(fā)生除

法溢出

例2.22:除法運算

movax.0400h:ax=400h=1024

movbl,0b4h:bl=b4h=180

divbl;商al=05h=5

:余數(shù)ah=7ch=124

movax.0400h:ax=400h=1024

movbl.0b4h:bl=b4h=—76

idivbl;I?lal=f3h=—13

;余數(shù)ah=24h=

W

第2皂2.4.5符號擴展指令

,■不影響標志位

CBW;AL的符號擴展至AH

;如AL的最高有效位是0,則AH=00

;AL的最高有效位為1,則AH=FFH。AL不變

CWD;AX的符號擴展至DX

;如AX的最高有效位是0,則DX=00

;AX的最高有效位為1,則DX=FFFFH。AX不變

?什么是符號擴展__

A符號擴展指令常用于獲得倍長的數(shù)據(jù)

第2,符號擴展的概念

□?符號擴展是指用一個操作數(shù)的符號位

(即最高位)形成另一個操作數(shù),后

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

1(負數(shù))。符號擴展不改變數(shù)據(jù)大小

■對于數(shù)據(jù)64H(表示數(shù)據(jù)100),其最高

位D7為。,符號擴展后高8位都是0,成為■

0064H(仍表示數(shù)據(jù)100)■

■對于數(shù)據(jù)ffOOH(表示有符號數(shù)一256),

其最高位D15為1,符號擴展后高16位都

是1,成為ffffffOOH(仍表示有符號數(shù)一

256)

例2.23:符號擴展

moval,80hal=80h

cbwax=ff80h

addal,255al=7fh

cbwax=007fh

例2.24:AX+BX

J

cwd;DX.AX-AX

idivbx;AX-DX.AX+BX

V利用符號擴展指令得到除法指令所

需要的倍長于除數(shù)的被除數(shù)

%對無符號數(shù)除法應(yīng)該采用直接使高■

位或高16位清。的方法,獲得倍長的

被除數(shù)

第2t■246十進制調(diào)整指令

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

行十進制調(diào)整,以得到十進制的運算結(jié)果

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

口壓縮BCD碼就是通??诜菈嚎sBCD碼用8個

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

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

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

表示兩個十進制位,進制位0~9,高4位

即00?99任意,通常默認為0

市BCD碼(BinaryCodedDecimal)

□A二進制編碼的十進制數(shù):一位十

進制數(shù)用4位二進制編碼來表示

A8086支持壓縮BCD碼和非壓縮

BCD碼的調(diào)整運算

真值864

二進制編碼08H40H

壓縮BCD碼08H64H

非壓縮BCD碼08H0604H

第2皂_?壓縮BCD碼加、減調(diào)整指令

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

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

DAADAS

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

為壓縮BCD碼為壓縮BCD碼

>使用DAA或DAS指令前,應(yīng)先執(zhí)行以AL為目的操

作數(shù)的加法或減法指令

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

他標志,例如CF反映壓縮BCD碼相加或減的進位

或借位狀態(tài)

例2.25a:壓縮BCD力口法

moval,68h

;al=68h,壓縮BCD碼表示真值68

movbl,28h

;bl=28h,壓縮BCD碼表示真值28

addal,bl

;二進制加法:al=68h+28h=90h

daa;十進制調(diào)整:al=96h

;實現(xiàn)壓縮BCD碼加法:68+28=9£

例Z25b:壓縮BCD減法

moval,68h

;al=68h,壓縮BCD碼表示真值68

movbl,28h

;bl=28h,壓縮BCD碼表示真值28

subal,bl

;二進制減法:al=68h-28h=40h

das;十進制調(diào)整:al=40h

;實現(xiàn)壓縮BCD碼加法:68-28-40

例2.26:壓縮BCD減法

movax.1234h

movbx.4612h

subal,bl

das34-12=22,CF=O

xchgal,ah

sbbal.bh

das12-46=66,CF=1

xchgal,ah;11234-4612=6622

1E幅,

W

第2皂一■非壓縮BCD碼加、減調(diào)整指令

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

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

AAAAAS—12.27?

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

非壓縮BCD碼為非壓縮BCD碼

;AH-AH+調(diào)整的進位;AH-AH一調(diào)整的借位

>使用AAA或AAS指令前,應(yīng)先執(zhí)行以AL為目的操

作數(shù)的加法或減法指令

AAAA和AAS指令在調(diào)整中產(chǎn)生了進位或借位,則

AH要加上進位或減去借位,同時CF=AF=1,否則

CF=AF=O;它們對其他標志無定義

例Z27a:非壓縮BCD加

movax,0608h

;ax=0608h,非壓縮BCD碼表示真值68

movbl,09h

;bl=09h,非壓縮BCD碼表示真值9

addal,bl

;二進制加法:al=08h+09h=llh

aaa

;十進制調(diào)整:ax=0707h

;實現(xiàn)非壓縮BCD碼加法:68+9=口口

6呵

例Z27b:非壓縮BCD減

movax,0608h

;ax=0608h,非壓縮BCD碼表示真值68

movbl,09h

;bl=09h,非壓縮BCD碼表示真值9

subal,bl

;二進制減法:al=08h-09h=ffh

aas

;十進制調(diào)整:ax=0509h

;實現(xiàn)非壓縮BCD碼減法:68-9=5

f「ENTER

1?

第2皂一■非壓縮BCD碼乘、除調(diào)整指令

(MULr8/m8)AAD

AAM;AX-將AX中非壓縮BCD

;AX-將AX的乘積調(diào)整為碼擴展成二進制數(shù)

非壓縮BCD碼(DIVr8/m8)

AAAM指令跟在字節(jié)乘MUL之后,將乘積調(diào)整為非

壓縮BCD碼

AAAD指令跟在字節(jié)除DIV之前,先將非壓縮BCD

碼的被除數(shù)調(diào)整為二進制數(shù)

AAAM和AAD指令根據(jù)結(jié)果設(shè)置SF、ZF和PF,但對

OF、CF和AF無定義

例2.27c:非壓縮BCD乘

movax,0608h

;ax=0608h,非壓縮BCD碼表示真值68

movbl,09h

;bl=09h,非壓縮BCD碼表示真值9

mulbl

;二進制乘法:al=08hX09h=0048h

aam

;十進制調(diào)整:ax=0702h

;實現(xiàn)非壓縮BCD碼乘法:8X9=7j

f‘ENTER

例2.27d:非壓縮BCD除

movax,0608h

;ax=0608h,非壓縮BCD碼表示真值68

movbl,09h

;bl=09h,非壓縮BCD碼表示真值9

aam

;二進制擴展:ax=68=0044h

divbl

;除法運算:商al=07h,余數(shù)ah=05h

;實現(xiàn)非壓縮BCD碼初法:一

684-9=7(余5)6呵

第2*|1習題2.19(p72)

□A設(shè)X、Y、Z、V均為

65X

16位帶符號數(shù),分F3

02¥

別存放在X、Y、Z、00

V存儲單元中,閱讀24Z

E0

如下程序段,得出返

它的運算公式,并

說明運算結(jié)果存于

何處?

習題2.19:算術(shù)運算1

movax,X

imulY;DX.AX=XXY

movex,ax

movbx,dx;BX.CX=XXY

movax,Z

cwd

addex,ax

adcbx,dx;BX.CX=XXY+Z

第2章教學要求(2)

1.熟悉8086的基本參數(shù)、堆棧工作原理、指令

對標志的影響、符號擴展的含義、壓縮和非

壓縮BCD的格式

2.掌握基

溫馨提示

  • 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

提交評論