第3章 80C51單片機指令系統(tǒng)_第1頁
第3章 80C51單片機指令系統(tǒng)_第2頁
第3章 80C51單片機指令系統(tǒng)_第3頁
第3章 80C51單片機指令系統(tǒng)_第4頁
第3章 80C51單片機指令系統(tǒng)_第5頁
已閱讀5頁,還剩106頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

教學(xué)基本要求:

(1)、了解單片機的指令系統(tǒng)、編程語言等基本概念;(2)、熟悉單片機匯編語言指令格式中符號的意義;(3)、熟悉單片機匯編語言指令系統(tǒng)每條指令的功能;(4)、掌握單片機指令系統(tǒng)的7種尋址方式;(5)、掌握單片機指令系統(tǒng)每類指令的用法。教學(xué)重點:(1)、單片機指令系統(tǒng)的尋址方式;(2)、片內(nèi)、外RAM單元之間的數(shù)據(jù)傳送;(3)、加法運算指令組的用法;(4)、邏輯運算指令組的用法;(5)、控制轉(zhuǎn)移指令組的用法。第3章80C51單片機指令系統(tǒng)教學(xué)難點:(1)、寄存器間接尋址、變址尋址、相對尋址等概念;(2)、堆棧操作指令的應(yīng)用。(3)、十進制調(diào)整指令DAA的應(yīng)用;(4)、控制轉(zhuǎn)移指令轉(zhuǎn)移目的地址、偏移量rel的計算;(5)、子程序調(diào)用、返回指令的用法。3.1單片機指令系統(tǒng)概述1、指令系統(tǒng)概述指令:是供用戶使用的單片機的軟件資源,是單片機所能接受的軟件工作者的命令的最小工作單位。指令系統(tǒng):單片機所能執(zhí)行的指令集合。機器語言:指令以二進制碼來表示。匯編語言:指令以助記符形式來表示。機器語言程序:使用機器語言編寫的程序。匯編語言程序:使用匯編語言編寫的程序。注意:MCS-51單片機指令系統(tǒng)不具有通用性,因此,用其編寫的匯編語言程序也不具有通用性,不能移植。

MCS-51系列單片機的匯編語言指令系統(tǒng)共有111條指令,其中49條為單字節(jié)指令,45條為雙字節(jié)指令,17條為三字節(jié)指令。從指令執(zhí)行的時間來看,單機器周期指令64條,雙機器周期指令45條,四機器周期指令2條。

MCS-51單片機的指令系統(tǒng)共有33個功能,用匯編語言編程時,只需44個助記符。(1)、數(shù)據(jù)傳送類指令(29條)(2)、算術(shù)運算類指令(24條)(3)、邏輯運算及移位類指令(24條)(4)、控制轉(zhuǎn)移類指令(17條)(5)、位操作類指令(17條)2、MCS-51單片機指令格式指令格式:即指令的表示方法,其內(nèi)容包括指令的長度和指令內(nèi)部信息的安排。采用助記符表示的匯編語言指令格式如下:[標號:]操作碼助記符[目的操作數(shù)],[源操作數(shù)][;注釋]

(1)一條指令中標號、操作數(shù)、注釋部分可有可無,但操作碼部分必不可少。(2)標號是程序員根據(jù)編程需要給指令設(shè)定的符號地址,標號由1~8個字符組成,不能用系統(tǒng)規(guī)定的寄存器名,也不能用指令系統(tǒng)中的助記符名稱,它的第一個字符必須是英文字,不能是數(shù)字或其它符號,標號后必須用冒號“:”。(3)操作碼表示指令的操作種類,用來規(guī)定指令進行什么操作,常用操作碼的英文名稱或縮寫形式來表示,操作碼后必須有一個或多哥空格“”作間隔符。

例如:MOV表示數(shù)據(jù)傳送操作,ADD表示加法操作。(4)操作數(shù)表示指令操作的對象,它可能是一個具體的數(shù)據(jù),也可能是指出到哪里取得數(shù)據(jù)的地址或符號。一條指令中,可能沒有(RET指令),也可能有一個(CPLA指令)、兩個(MOVA,#00H指令,MOV30H,#50H指令)或三個(CJNEA,#00H,NEXT)操作數(shù)。根據(jù)操作數(shù)的位置的不同,可分為目的(左)操作數(shù)和源(右)操作數(shù),操作數(shù)之間也以逗號“,”相隔(乘法指令MULAB和除法指令DIVAB除外)。(5)注釋是對指令的解釋說明,用以提高程序的可讀性。注釋前必須加分號“;”。

(6)書寫匯編語言指令必須注意以上規(guī)則。

3、指令格式中符號意義說明

Rn:當(dāng)前寄存器組的8個通用寄存器R0~R7(n=0~7)。

Ri:當(dāng)前寄存器組中的2個寄存器RO,R1,可作地址指針,即間接尋址的寄存器(i=0,1)。

direct:內(nèi)部RAM的8位地址,既可以是內(nèi)部RAM的低128個單元地址(0~127),也可以是專用寄存器的單元地址或符號,如I/O端口,控制寄存器,狀態(tài)寄存器等(128~255)。

#data:包含在指令中的8位立即數(shù)。

#data16:包含在指令中的16位立即數(shù)。

addr16:表示16位目的地址,只限于在LCALL和LJMP指令中使用,目的地址范圍是64KB的程序存儲器地址空間。

addr11:表示11位目的地址,只限于在ACALL和AJMP指令中使用,目的的地址必須存放在與下一條指令第一個字節(jié)同一個2KB程序存儲器地址空間之內(nèi)。

Rel:相對轉(zhuǎn)移指令中的偏移量,為8位帶符號補碼數(shù)。

DPTR:數(shù)據(jù)指針,可用作16位的地址寄存器。

Bit:內(nèi)部RAM或?qū)S眉拇嫫髦械闹苯訉ぶ肺弧?/p>

A:累加器(直接尋址方式的累加器表示為Acc)

B:B寄存器,用于MUL和DIV指令中。

C:進位標志位或布爾處理機中的累加位。

@:為間址寄存器或基址寄存器的前綴標志。

/:位操作數(shù)的前綴,表示對該位狀態(tài)取反。(X):某寄存器或某單元中的內(nèi)容。

((X)):由X間接尋址的單元中的內(nèi)容?!罕硎緦⒓^右邊的內(nèi)容傳送至箭頭的左邊。3.280C51單片機指令尋址方式

MCS-51單片機指令系統(tǒng)中的大多數(shù)指令執(zhí)行時都需要使用操作數(shù),而在單片機中只有指定了操作數(shù)的存儲單元才能得到操作數(shù),因此,要得到操作數(shù),就只需找到操作數(shù)存放的單元即可。所謂尋址方式:即如何確定參與操作的數(shù)的真正單元。根據(jù)操作數(shù)單元指定方法的不同,就有了不同的尋址方式。

MCS-51單片機共有7種尋址方式。由于指令中的操作數(shù)有目的(左)操作數(shù)和源(右)操作數(shù)之分,因此,在講解尋址方式時,均以源(右)操作數(shù)為例。(1)寄存器尋址方式

a)、寄存器尋址就是指操作數(shù)在寄存器中,因此,指定了寄存器就得到了操作數(shù)。

b)寄存器尋址的指令中,以符號名稱來表示寄存器。例:假設(shè)原來(A)=30H,(R1)=40H,現(xiàn)執(zhí)行指令MOVA,R1;指令功能:將R1中的內(nèi)容(操作數(shù))送A中;

指令執(zhí)行過程:A←(R1);

指令執(zhí)行結(jié)果:(A)=(R1)=40H。

c)尋址范圍:1)當(dāng)前工作寄存器組R0~R7;

2)部分專用寄存器A,AB,DPIR等。例:MOVP1,A;將累加器A的內(nèi)容送到P1口

MOVP1,R4;將寄存器R4的內(nèi)容送到P1口

CLRA;將累加器A清0CPLA;將累加器A中的內(nèi)容取反

MULAB;將累加器A的內(nèi)容與寄存器B的內(nèi)容相乘(2)直接尋址方式

a)直接尋址即指令所需的操作數(shù)直接以操作數(shù)存放的單元地址的形式給出。例:假設(shè)內(nèi)部RAM3AH單元的內(nèi)容是88H,累加器A的內(nèi)容是10H,現(xiàn)執(zhí)行指令MOVA,3AH。指令功能:將3AH中的內(nèi)容(操作數(shù))送A中;

指令執(zhí)行過程:A←(3AH);指令執(zhí)行結(jié)果:(A)=(3AH)=88H。

b)采用直接尋址的指令一般是雙字節(jié)或三字節(jié)指令。

c)直接尋址是訪問專用寄存器的唯一方法。

d)尋址范圍:

1)內(nèi)部RAM低128個單元,低128單元地址在指令中須以直接單元地址形式給出;

2)專用寄存器,專用寄存器除以單元地址形式給出外,還可以以寄存器符號的形式給出。例:MOVP1,20H;將內(nèi)部RAM20H單元的內(nèi)容傳送到P1口

MOVA,P0;將P0口的內(nèi)容傳送到AMOVA,80H;將P0口的內(nèi)容傳送到A(3)寄存器間接尋址方式

a)寄存器間接尋址是指指令所需的操作數(shù)是通過寄存器間接得到的,寄存器中存放的則是操作數(shù)存放的單元地址。例:假設(shè)內(nèi)部RAM3AH單元的內(nèi)容是65H,寄存器R0的內(nèi)容是3AH,現(xiàn)執(zhí)行指令MOVA,@R0。指令功能:先將R0的內(nèi)容3AH作為內(nèi)部RAM的單元地址,再將內(nèi)部RAM單元地址為3AH中的內(nèi)容65H(操作數(shù))送A中。

指令執(zhí)行過程:A←((R0))或A←(3AH)指令執(zhí)行結(jié)果:(A)=((R0))=(3AH)=65H。

b)間址寄存器:R0、R1、DPTR、SP。

指令中應(yīng)在間址寄存器名之前加前綴@,SP除外。

c)尋址范圍:

1)內(nèi)部RAM低128單元,可使用R0,R1作間址寄存器,其通用形式為@Ri(I=0或1)。例:MOVA,@R1;將R1指示的地址單元中內(nèi)容傳送至A中。假設(shè)(R1)=40H,(40H)=90H,即把內(nèi)部RAM中40H單元中的內(nèi)容90H送到A。

2)外部(片外)RAM64KB單元,可使用DPTR作間址寄存器,其形式為@DPTR。例:MOVXA,@DPTR;將DPTR指示的外部RAM地址單元中的內(nèi)容傳送至A。假設(shè)(DPTR)=1000H,(1000H)=80H,即把外部RAM1000H單元中的內(nèi)容80H送到A。

3)外部(片外)RAM的低256單元(0000H~00FFH),它是一個特殊的尋址區(qū),既可以使用DPTR作間址寄存器尋址,也可以使用R0或R1作間址寄存器尋址。例:假設(shè)外部RAM0020H單元中的內(nèi)容是45H,現(xiàn)需將其送A中。

MOVDPTR,#0020H;MOVXA,@DPTR

或MOVR0,#20H;MOVXA,@R0;

4)在執(zhí)行堆棧操作指令(PUSH,POP)時,也算為寄存器間接尋址,即以堆棧指針(SP)作間址寄存器的間接尋址方式。

例:PUSHACC;將A中的內(nèi)容壓入堆棧

POPACC;將堆棧中的內(nèi)容彈出,送到A(4)立即尋址方式

a)立即尋址即指令所需的操作數(shù)已在指令中直接給出。通常,把直接出現(xiàn)在指令中的操作數(shù)稱之為立即數(shù)。為了與直接尋址指令中的直接單元地址相區(qū)別,一般應(yīng)在立即數(shù)前面加“#”標志。

b)采用立即尋址的指令,一般為雙字節(jié)。第一個字節(jié)為指令的操作碼,第二個字節(jié)為立即數(shù)。

c)尋址范圍:程序存儲器空間。

例:MOVA,#40H;指令功能:將程序存儲器中某單元的內(nèi)容3AH(立即數(shù))送A中

指令執(zhí)行過程:A←3AH

指令執(zhí)行結(jié)果:(A)=3AHd)除8位立即數(shù)外,MCS-51指令系統(tǒng)中還有一條16位立即尋址指令,即:MOVDPTR,#data16,其功能是把16位立即數(shù)送數(shù)據(jù)指針DPTR。

例:MOVDPTR,#1000H;指令功能:將程序存儲器中某單元的內(nèi)容1000H(立即數(shù))送DPTR中

MOVP1,#55H ;將立即數(shù)55H送P1口

MOV 20H,#55H ;將立即數(shù)55H送20H單元

MOV R0,#20H;將立即數(shù)20H送寄存器R0(5)變址尋址方式

a)變址尋址用于訪問程序存儲器中的常數(shù)或數(shù)據(jù)表格。變址尋址即是以DPTR或PC作為基址寄存器,以累加器A為變址寄存器,并以兩者的內(nèi)容相加形成16位地址作為目的操作數(shù)地址,以達到訪問程序存儲器中的常數(shù)或數(shù)據(jù)表格的目的。

b)尋址范圍:程序存儲器空間。

c)指令數(shù)目:三條,均為一字節(jié)指令

MOVCA,@A+DPTR;指令執(zhí)行過程:A←((A)+(DPTR))

指令執(zhí)行結(jié)果:(A)=((A)+(DPTR))

MOVCA,@A+PC;指令執(zhí)行過程:A←((A)+(PC))指令執(zhí)行結(jié)果:(A)=((A)+(PC))

JMP@A+DPTR

指令執(zhí)行過程:PC←((A)+(DPTR))指令執(zhí)行結(jié)果:(PC)=((A)+(DPTR))

d)注意:三條指令中A的內(nèi)容均為8位二進制無符號數(shù)。

(6)位尋址方式

a)位尋址即對二進制數(shù)據(jù)位進行尋址。

b)尋址范圍:

1)、內(nèi)部RAM中的位尋址區(qū)(單元地址20H~2FH),128個位,位地址是00H~7FH。位地址區(qū)中的位有兩種表示方法:

直接使用位地址表示;單元地址加位數(shù)表示例:MOVC,20H;將位地址為20H的位狀態(tài)傳送給累加位C。

例:MOVC,24H.0;將位地址為20H的位狀態(tài)傳累加位C。例:SETB3DH;將內(nèi)部RAM位尋址區(qū)中的3DH位置1。假設(shè)內(nèi)部RAM27H單元的內(nèi)容是00H,執(zhí)行SETB3DH后,由于3DH對應(yīng)內(nèi)部RAM27H的第5位,因此該位變?yōu)?,也就是27H單元的內(nèi)容變?yōu)?0H。該指令的執(zhí)行過程如圖所示。

2)、專用寄存器的可尋址位可供位尋址的專用寄存器有11個,PSW,IPIE,PO,P1,P2,P3,SCON,A,TCON,B,實有可尋址位83位。專用寄存器的可尋址位有四種表示方法:

直接使用位地址表示例:MOVC,D5H;將PSW中位地址為D5H的位狀態(tài)傳給累加位C

單元地址加位數(shù)表示例:MOVC,D0H.5;將PSW中位地址為D5H的位狀態(tài)傳給累加位C

位名稱表示例:MOVC,F(xiàn)0;將PSW中位地址為D5H的位狀態(tài)傳給累加位C

專用寄存器符號加位數(shù)表示例:MOVC,PSW.5;將PSW中位地址為D5H的位狀態(tài)傳給累加位C(7)相對尋址方式

a)相對尋址是為解決程序轉(zhuǎn)移而設(shè)置的,為轉(zhuǎn)移指令所用。

相對尋址是將程序計數(shù)器PC的當(dāng)前值與指令中給出的地址偏移量(rel)相加,其和為轉(zhuǎn)移指令的目的地址。注意:PC當(dāng)前值是指執(zhí)行完該轉(zhuǎn)移指令后的PC值,即轉(zhuǎn)移指令的PC值加上轉(zhuǎn)移指令的字節(jié)數(shù)。轉(zhuǎn)移指令轉(zhuǎn)移到的目的地址=轉(zhuǎn)移指令PC當(dāng)前值+偏移量rel=轉(zhuǎn)移指令首地址+轉(zhuǎn)移指令字節(jié)數(shù)+rel。偏移量rel是一個帶符號的8位二進制補碼數(shù),所能表示數(shù)的范圍為-128~+127。

b)尋址范圍:程序存儲器空間具體地說,相對轉(zhuǎn)移是以轉(zhuǎn)移指令所在地址為基點,向前(地址增加方向)最大可轉(zhuǎn)移(127+轉(zhuǎn)移指令字節(jié)數(shù))個單元地址,向后(地址減少方向)最大可轉(zhuǎn)移(128-轉(zhuǎn)移指令字節(jié)數(shù))個單元地址。3.380C51單片機指令分類介紹

MCS-51單片機指令系統(tǒng)包括111條指令,按功能可以劃分為以下5類:數(shù)據(jù)傳送類指令(29條);

算術(shù)運算類指令(24條);邏輯運算類指令(24條);控制轉(zhuǎn)移類指令(17條);位操作類指令(17條);3.3.1數(shù)據(jù)傳送類指令

a)指令數(shù)目:29條;

b)指令通用格式:助記符操作碼目的操作數(shù),源操作數(shù);

c)指令功能:數(shù)據(jù)傳送,屬于數(shù)據(jù)復(fù)制性質(zhì);

d)助記符類型(8種):

MOV,MOVC,MOVX

XCH,XCHD,SWAP,PUSH,POPe)尋址方式源操作數(shù):寄存器,寄存器間接、直接、立即、變址尋址;目的操作數(shù):寄存器,寄存器間接、直接尋址1、內(nèi)部RAM數(shù)據(jù)傳送指令組

a)立即數(shù)傳送指令指令格式相應(yīng)操作操作結(jié)果說明MOVA,#dataA←data(A)=dataMOVdirect,#datadirect←data(direct)=dataMOVRn,#dataRn←data

(Rn

)=datan=0~7MOV@Ri,#data(Ri)←data((Ri))=datai=0,1MOVDPTR,#data16DPTR←data16(DPTR)=data16例:MOVA,#20H;指令執(zhí)行后(A)=20H例:MOV20H,#20H;指令執(zhí)行后(20H)=20H例:MOVSP,#60H;指令執(zhí)行后(SP)=60H例:MOVB,#30H;指令執(zhí)行后(B)=30H例:MOVR1,#20H;指令執(zhí)行后(R1)=20H例:MOVR0,#20H;指令執(zhí)行后(R0)=20HMOV@R0,#30H;指令執(zhí)行后((R0))=30H或(20H)=30H例:MOVDPTR,#1020H;指令執(zhí)行后(DPTR)=1020H;(DPH)=10H,(DPL)=20H

本指令是三字節(jié)指令,第一個字節(jié)是操作碼信息,第二、第三字節(jié)分別是操作數(shù)(立即數(shù))的高、低8位信息,其二進制目標代碼存放格式如下:操作碼10010000程序存儲器立即數(shù)高8位(DPH)00010000立即數(shù)低8位(DPL)00100000

b)內(nèi)部RAM單元之間的數(shù)據(jù)傳送指令指令格式相應(yīng)操作操作結(jié)果MOVdirect2,direct1direct2←(direct1)(direct2)=(direct1)MOVdirect,Rndirect←(Rn)(direct)=(Rn)MOVRn,directRn←(direct)(Rn)=(direct)MOVdirect,@Ridirect←((Ri))(direct)=((

Ri))MOV@Ri,direct(Ri)←(direct)((Ri))=(direct)例:MOV30H,20H;指令執(zhí)行后(30H)=(20H)例:MOVP1,20H;指令執(zhí)行后(P1)=(20H)例:MOVP2,P0;指令執(zhí)行后(P2)=(P0)例:MOV40H,P3;指令執(zhí)行后(40H)=(P3)例:MOV0A0H,R7;指令執(zhí)行后(P2)=(R7)例:MOVPSW,R1;指令執(zhí)行后(PSW)=(R1)例:MOVR2,20H;指令執(zhí)行后(R2)=(20H)例:MOVR3,B;指令執(zhí)行后(R3)=(B)例:MOV40H,@R0;指令執(zhí)行后(40H)=((R0))例:MOVP0,@R1;指令執(zhí)行后(P0)=((R1))例:MOV@R0,0A0H;指令執(zhí)行后((R0))=(P2)例:MOV@R1,30H;指令執(zhí)行后((R1))=(30H)

c)通過累加器的數(shù)據(jù)傳送指令指令格式相應(yīng)操作操作結(jié)果MOVA,RnA←(Rn)(A)=(Rn)MOVRn,ARn←(A)(Rn)=(A)MOVA,directA←(direct)(A)=(direct)MOVdirect,Adirect←(A)(direct)=(A)MOVA,@Ri

A←((Ri))(A)=((Ri))MOV@Ri,A(Ri)←(A)((Ri))=(A)例:MOVA,R0;

指令執(zhí)行后(A)=(R0)例:MOVR3,A;指令執(zhí)行后(R3)=(A)例:MOVA,B;

指令執(zhí)行后(A)=(B)例:MOVA,40H;指令執(zhí)行后(A)=(40H)例:MOVPSW,A;指令執(zhí)行后(PSW)=(A)例:MOV60H,A;指令執(zhí)行后(60H)=(A)例:MOVA,@R0;指令執(zhí)行后(A)=((R0))例:MOV@R1,A;指令執(zhí)行后((R1))=(A)(3)外部RAM數(shù)據(jù)傳送指令組指令格式相應(yīng)操作操作結(jié)果MOVXA,@DPTRA←((DPTR))(A)=((DPTR))MOVX@DPTR,A(DPTR)←(A)((DPTR))=(A)MOVXA,@RiA←((Ri))(A)=((Ri))MOVX@Ri,A(Ri)←(A)((Ri))=(A)例:將外部RAM2000H單元的內(nèi)容20H送至A中。

MOVDPTR,#2000H;外部RAM2000H單元地址作為16位立即數(shù)送數(shù)據(jù)指針DPTRMOVXA,@DPTR;外部RAM2000H單元的內(nèi)容20H送A

(A)=((DPTR))=(2000H)=20H例:將累加器A中的內(nèi)容40H送至外部RAM4000H單元中。

MOVDPTR,#4000H;外部RAM4000H單元地址作為16位立即數(shù)送數(shù)據(jù)指針DPTRMOVX@DPTR,A;A的內(nèi)容40H送外部RAM4000H單元((DPTR))=(4000H)=(A)=40H例:將外部RAM0050H單元的內(nèi)容20H送至A中。

a)MOVDPTR,#0050H;外部RAM0050H單元地址作為16位立即數(shù)送數(shù)據(jù)指針DPTRMOVXA,@DPTR;外部RAM0050H單元的內(nèi)容20H送A

(A)=((DPTR))=(2000H)=20Hb)MOVR0,#50H;外部RAM0050H單元地址作為8位立即數(shù)送間址寄存器R0MOVXA,@R0;外部RAM0050H單元的內(nèi)容20H送A

(A)=((R0))=(50H)=20H例:將累加器A中的內(nèi)容40H送至外部RAM0050H單元中。

a)MOVDPTR,#0050H;外部RAM0050H單元地址作為16位立即數(shù)送數(shù)據(jù)指針DPTR

MOVX@DPTR,A;A的內(nèi)容40H送外部RAM0050H單元((DPTR))=(0050H)=(A)=40Hb)MOVR1,#50H;外部RAM0050H單元地址作為8位立即數(shù)送間址寄存器R1MOVX@R1,A;A的內(nèi)容40H送外部RAM0050H單元((R1))=(50H)=(A)=40H例:將內(nèi)部RAM60H單元的內(nèi)容40H送至外部RAM4000H單元中。

MOVA,60H;將60H單元的內(nèi)容40H先送A中,(A)=40HMOVDPTR,#4000H;外部RAM4000H單元地址送DPTRMOVX@DPTR,A;A的內(nèi)容40H送外部RAM4000H單元((DPTR))=(4000H)=(A)=40H例:將外部RAM4000H單元的內(nèi)容40H送至內(nèi)部RAM60H單元中。

MOVDPTR,#4000H;外部RAM4000H單元地址送DPTRMOVXA,@DPTR;外部RAM4000H單元的內(nèi)容40H送A

(A)=((DPTR))=(4000H)==40HMOV60H,A;將A的內(nèi)容40H送60H單元,(60H)=40H例:將外部RAM4000H單元內(nèi)容40H送至外部RAM0050H單元中。

MOVDPTR,#4000H;外部RAM4000H單元地址送DPTRMOVXA,@DPTR;外部RAM4000H單元的內(nèi)容40H送A

(A)=((DPTR))=(4000H)=40HMOVR0,#50H;外部RAM0050H單元地址送間址寄存器R0MOVX@R0,A;外部RAM(0050H)=(A)=40H例:將內(nèi)部RAM60H單元內(nèi)容40H送至內(nèi)部RAM50H單元中。

a)MOV50H,60H;內(nèi)部RAM60H單元內(nèi)容40H送至內(nèi)部RAM50H單元中,(50H)=(60H)=40Hb)MOVA,60H;先將內(nèi)部RAM60H單元內(nèi)容40H送A,(A)=40HMOV50H,A;再將A的內(nèi)容送內(nèi)部RAM50H單元,(50H)=40H注意:

1)外部RAM與外部RAM單元之間、外部RAM與內(nèi)部RAM單元之間的數(shù)據(jù)傳送必須采用寄存器間接尋址的方式,而且必須通過累加器A進行;

2)MCS-51指令系統(tǒng)中沒有專用的存儲器讀寫指令,實際上外部數(shù)據(jù)存儲器數(shù)據(jù)傳送指令就是外部RAM的讀寫指令;

3)內(nèi)部RAM單元之間的數(shù)據(jù)傳送可有多種尋址方式。(4)程序存儲器數(shù)據(jù)傳送指令組程序存儲器數(shù)據(jù)傳送指令組既可用于內(nèi)部程序存儲器,也可用于外部程序存儲器。程序存儲器數(shù)據(jù)傳送指令組的指令只有兩條,均為單字節(jié)指令,采用變址尋址方式。數(shù)據(jù)只能從程序存儲器單向讀出,而且也必須通過累加器A進行傳送。

MOVCA,@A+DPTR;

MOVCA,@A+PC

這兩條指令用于訪問程序存儲器中的數(shù)據(jù)表格,因此也稱之為查表指令。其功能非常重要,將在第四章匯編語言程序設(shè)計中講解。(5)數(shù)據(jù)交換指令組數(shù)據(jù)交換主要在內(nèi)部RAM單元與A之間、A的高、低4位之間進行,有整字節(jié)和半字節(jié)兩種交換。指令類型指令格式相應(yīng)操作整字節(jié)交換XCHA,

Rn(A)?(Rn)XCHA,direct(A)?(direct)XCHA,@Ri(A)?((Ri))半字節(jié)交換XCHDA,@Ri(A)3~0?((Ri))3~0A高低半字節(jié)交換SWAPA(A)3~0?(A)7~4例:假設(shè)(A)=38H,(R0)=54H,執(zhí)行指令XCHA,R0;結(jié)果為(A)=54H,(R0)=38H。例:假設(shè)(A)=88H,(30H)=45HH,執(zhí)行指令XCHA,30H;

結(jié)果為(A)=45H,(30H)=88H。例:假設(shè)(A)=34H,(R1)=50H,(50H)=56H,執(zhí)行指令XCHA,@R1;

結(jié)果為(A)=56H,((R1))=(50H)=34H。例:假設(shè)(A)=34H,(R1)=50H,(50H)=56H,執(zhí)行指令XCHDA,@R1;

結(jié)果為(A)=36H,((R1))=(50H)=54H。例:假設(shè)(A)=34H,執(zhí)行指令SWAPA;結(jié)果為(A)=43H。思考題:分析下列程序段執(zhí)行的過程及結(jié)果:假設(shè)內(nèi)部RAM2AH、2BH單元中連續(xù)存放有4個BCD碼(1個BCD碼占4個二進制位)2AH單元2BH單元a3a2a1a0

MOVR0,#2AH;

MOVA,@R0;

SWAPA;

MOV@R0,A;

MOVR1,#2BH;

MOVA,@R1;

SWAPA;

XCHA,@R0;

MOV@R1,A;程序段執(zhí)行后的最終結(jié)果:(2AH)=;(2BH)=;(A)=;思考題:解

MOVR0,#2AH;(R0)=2AHMOVA,@R0;(A)=a3a2SWAPA;(A)=a2a3MOV@R0,A;((R0))=(2AH)=a2a3MOVR1,#2BH;(R1)=2BHMOVA,@R1;(A)=a1a0SWAPA;(A)=a0a1XCHA,@R0;(A)=a2a3,((R0))=(2AH)=a0a1MOV@R1,A;((R1))=(2BH)=(A)=a2a3程序段執(zhí)行后的最終結(jié)果:(2AH)=a0a1

;(2BH)=a2a3

;(A)=a2a3

;(6)堆棧操作指令組堆棧操作指令組只有兩條指令:進棧指令和出棧指令。

a)進棧指令:PUSHdirect;功能:為內(nèi)部RAM低128單元或?qū)S眉拇嫫鲀?nèi)容送至棧頂單元。

指令操作過程:SP←(SP)+1;(SP)←(direct)

b)出棧指令:POPdirect;

功能:棧頂單元內(nèi)容送內(nèi)部RAM低128單元或?qū)S眉拇嫫鳌?/p>

指令操作過程:direct←((SP));(SP)←(SP)-1

注意:進棧指令和出棧指令均采用寄存器間接尋址方式,間址寄存器是SP,例:將片外RAM2500H單元的內(nèi)容88H送到片內(nèi)RAM40H單元,MOVDPTR,#2500H;(DPTR)=2500HMOVXA,@DPTR;(A)=((DPTR))=88HMOVSP,#60H;(SP)=60HPUSHACC;(SP)=61H,(61H)=88HPOP40H;(40H)=88H,(SP)=60H例:分析以下程序段的執(zhí)行結(jié)果

MOVSP,#60H;(SP)=60HMOVA,#30H;(A)=30HMOVB,#40H;(B)=40HPUSHACC;

PUSHBPOPDPH;

POPDPL;執(zhí)行結(jié)果:(DPH)=

(DPL)=例:單片機應(yīng)用系統(tǒng)程序設(shè)計時,經(jīng)常需要用到中斷服務(wù)程序和各類子程序,在執(zhí)行中斷服務(wù)程序和子程序前,常常需要把程序狀態(tài)寄存器PSW、累加器A、數(shù)據(jù)指針DPTR的內(nèi)容保護起來(現(xiàn)場進棧保護),在中斷服務(wù)程序和子程序執(zhí)行結(jié)束之前,再恢復(fù)它們的內(nèi)容(現(xiàn)場出?;謴?fù))。以下程序段可實現(xiàn)上述功能。

MOVSP,#60H;

PUSHPSW;

PUSHACC;

PUSHDPL;

PUSHDPH;

…………………………

POPDPH;

POPDPL;

POPACC;

POPPSW;注意:堆棧深度、堆棧平衡,數(shù)據(jù)進棧、出棧的先后次序。3.3.2算術(shù)運算類指令

a)指令數(shù)目:24條;

b)指令通用格式:助記符操作碼目的操作數(shù),源操作數(shù);

c)指令功能:數(shù)據(jù)算術(shù)運算(加減乘除),此類指令對程序狀態(tài)字PSW的進位位(CY),輔助進位位(AC),溢出位(OV)三種標志位有影響,即對它們自動置位或復(fù)位,但是,加1和減1指令不影響這些標志;

d)助記符類型(8種):

ADD、ADDC、SUBB、INC、DEC、DA、MUL、DIVe)注意:算術(shù)運算類指令都是針對8位二進制無符號數(shù)的。(1)加法指令組指令格式相應(yīng)操作操作結(jié)果ADDA,

RnA←(A)+(Rn)(A)=(A)+(Rn)ADDA,directA←(A)+(direct)(A)=(A)+(direct)ADDA,@RiA←(A)+((Ri))(A)=(A)+((Ri))ADDA,#dataA←(A)+data(A)=(A)+data

a)將A中的數(shù)與源操作數(shù)所指出的內(nèi)容相加,其相加結(jié)果仍存在A中。

b)8位二進制數(shù)加法運算指令的一個加數(shù)總是累加器A。

c)運算影響PSW的位狀態(tài)相加過程中,若位3有進位,則AC置1,否則,AC清0,若位7有進位,則CY置1,否則,CY清0。

d)、對于無符號數(shù)相加,若CY置位,說明和產(chǎn)生溢出,即大于255。

e)、對于有符號數(shù)相加,當(dāng)位6或位7之中只有一位進位時,溢出標志位OV置位,說明和產(chǎn)生了溢出,結(jié)果出錯。

OV位只對有符號數(shù)加法有意義,對于無符號數(shù)加法無意義。

溢出表達式:OV=D6cy⊕D7cyD6cy:位6向位7的進位

D7cy:位7向cy的進位例:假設(shè)(A)=C2H,(R0)=A9H,執(zhí)行ADDA,R011000010

+10101001

1←01101011

OV=D6cy⊕D7cy=0⊕1=1

若C2H,A9H為無符號數(shù),則(A)=6BH,(AC)=0,(CY)=1,則表示溢出,結(jié)果大于255。若C2H,A9H為有符號數(shù),則OV=1,表示有溢出,結(jié)果出錯,因為兩個負數(shù)相加不可能得到正數(shù)的和。例:假設(shè)(A)=78H,(10H)=64H,執(zhí)行指令A(yù)DDA,10H,求兩無符號數(shù)之和,并說明PSW的有關(guān)標志位狀態(tài)。

01111000

+)0110010011011100PSW:OV=D6cy⊕D7cy=1⊕0=1,CY=0,AC=0。練習(xí)題:(A)=53H,(R0)=FCH,執(zhí)行指令:ADDA,R0

(2)帶進位加法指令組指令格式相應(yīng)操作操作結(jié)果ADDCA,RnA←(A)+(Rn)+(CY)(A)=(A)+(Rn)+(CY)ADDCA,directA←(A)+(direct)+(CY)(A)=(A)+(direct)+(CY)ADDCA,@RiA←(A)+((Ri))+(CY)(A)=(A)+((Ri))+(CY)ADDCA,#dataA←(A)+data+(CY)(A)=(A)+data+(CY)

a)把源操作數(shù)所指示的內(nèi)容和A中的內(nèi)容及進位標志CY相加,結(jié)果存入A中。運算前一個加數(shù)必定在A中,運算后和存于A中。

b)此類指令運算結(jié)果同樣對PSW中相關(guān)位有影響,影響規(guī)則與加法指令組相同。

c)它一般用于多字節(jié)數(shù)的加法運算,低字節(jié)相加的和可能產(chǎn)生進位,可通過帶進位加法指令將低字節(jié)的進位加到高字節(jié)上去,高字節(jié)求和時,必須使用帶進位的加法指令。例:假設(shè)(A)=AEH,(20H)=81H,(CY)=1,求兩數(shù)之和,及PSW相關(guān)位內(nèi)容,執(zhí)行指令A(yù)DDCA,20H。

1010111010000001

+)11←00110000OV=D6cy⊕D7cy=0⊕1=1;CY=1AC=1(A)=30H練習(xí)題:假設(shè)(A)=85H,(20H)=FFH,CY=1求兩數(shù)之和,及PSW相關(guān)位內(nèi)容,執(zhí)行指令A(yù)DDCA,20H。(3)帶減位加法指令組指令格式相應(yīng)操作操作結(jié)果SUBBA,RnA←(A)-(Rn)-(CY)(A)=(A)-(Rn)-(CY)SUBBA,directA←(A)-(direct)-(CY)(A)=(A)-(direct)-(CY)SUBBA,@RiA←(A)-((Ri))-(CY)(A)=(A)-((Ri))-(CY)SUBBA,#dataA←(A)-data-(CY)(A)=(A)-data-(CY)

a)把A中的內(nèi)容和源操作數(shù)所指示的內(nèi)容及進位標志CY相減,結(jié)果存入A中。運算前被減數(shù)必定在A中,運算后差存于A中。

b)此類指令運算結(jié)果同樣對PSW中相關(guān)位有影響,影響規(guī)則與加法指令組相同。其中,OV位只對有符號數(shù)減法有意義。

c)減法運算只有帶借位減法指令,而沒有不帶借位減法指令。如需進行不帶借位的減法運算,只需在用SUBB指令前先用CLRC指令把CY清0即可。例:假設(shè)(A)=C9H,(R2)=54H,(CY)=1,求兩數(shù)之差,及PSW相關(guān)位內(nèi)容,執(zhí)行指令SUBBA,R2。

11001001

01010100

-)101110100

OV=D6cy⊕D7cy=1⊕0=1

若C9H,54H為無符號數(shù),則由于CY=0,無溢出,結(jié)果正確。若C9H,54H為有符號數(shù),則由于OV=1,有溢出,結(jié)果出錯。

練習(xí)題:假設(shè)(A)=DBH,(R4)=73H,(CY)=1,求兩數(shù)之差,及PSW相關(guān)位內(nèi)容,執(zhí)行指令SUBBA,R4。(4)加1指令組指令格式相應(yīng)操作操作結(jié)果INCAA←(A)+1(A)=(A)+1INCRnRn←(Rn)+1(Rn)=(Rn)+1INCdirectdirect←(direct)+1(direct)=(direct)+1INC@Ri(Ri)←((Ri))+1((Ri))=((Ri))+1INCDPTRDPTR←(DPTR)+1(DPTR)=(DPTR)+1

a)將操作數(shù)所指定單元或寄存器中的內(nèi)容加1,其結(jié)果送回原操作數(shù)單元。

b)此組指令的操作不影響PSW的狀態(tài)。

例:假設(shè)(A)=FFH,(DPTR)=10FFH,(CY)=0,執(zhí)行指令:

INCA;(A)=00H,(CY)=0INCDPTR;(DPTR)=1100H;(CY)=0(5)減1指令組指令格式相應(yīng)操作操作結(jié)果DECAA←(A)-1(A)=(A)-1DECRnRn←(Rn)-1(Rn)=(Rn)-1DECdirectdirect←(direct)-1(direct)=(direct)-1DEC@Ri(Ri)←((Ri))-1((Ri))=((Ri))-1

a)將操作數(shù)所指定單元或寄存器中的內(nèi)容減1,其結(jié)果送回原操作數(shù)單元。

b)此組指令的操作不影響PSW的狀態(tài)。

c)沒有DPTR減1指令。例:假設(shè)(40H)=00H,(R1)=50H,(50H)=60H,(CY)=1執(zhí)行指令:DEC40H;(40H)=0FFH,(CY)=1DEC@R1;((R1))=(50H)=5FH,(CY)=1例:內(nèi)部RAM40H和41H單元分別存放兩個8位二進制無符號加數(shù),求兩數(shù)相加之和,和存放在內(nèi)部RAM42H單元中。假設(shè)兩數(shù)之和仍是8位二進制數(shù)。解:例:內(nèi)部RAM40H和41H單元分別存放兩個8位二進制無符號加數(shù),求兩數(shù)相加之和,和存放在內(nèi)部RAM42H單元中。假設(shè)兩數(shù)之和仍是8位二進制數(shù)。(注意比較兩種編程方法的優(yōu)劣性)解(1)MOVA,40H;(A)=(40H)

ADDA,41H;(A)=(40H)+(41H)

MOV42H,A;(42H)=(40H)+(41H)(2)MOVR0,#40H;設(shè)置數(shù)據(jù)指針,(R0)=40HMOVA,@R0;取第一個加數(shù),(A)=(40H)

INCR0;修改數(shù)據(jù)指針,(R0)=41HADDA,@R0;兩數(shù)相加(A)=(40H)+(41H)

INCR0;修改數(shù)據(jù)指針,(R0)=42HMOV@R0,A;存兩數(shù)和(42H)=(40H)+(41H)例:兩個三字節(jié)二進制無符號數(shù)相加,被加數(shù)放在內(nèi)部RAM20H~22H單元(低字節(jié)存放在低地址單元,高字節(jié)存放在高地址單元,即低位在前,高位在后),加數(shù)放在2AH~2CH單元,和放在20H~22H單元,最高位如有進位,則放在23H單元中。解:數(shù)據(jù)類型(二、十進制數(shù),有、無符號數(shù));數(shù)據(jù)結(jié)構(gòu)(升、降序排列)被加數(shù)(N1)加數(shù)(N2)和(N3)20H單元低字節(jié)(8位)2AH單元低字節(jié)(8位)20H單元低字節(jié)(8位)21H單元中字節(jié)(8位)2BH單元中字節(jié)(8位)21H單元中字節(jié)(8位)22H單元高字節(jié)(8位)2CH單元高字節(jié)(8位)22H單元高字節(jié)(8位)23H單元進位位被加數(shù)(N1)高字節(jié)(8位)中字節(jié)(8位)低字節(jié)(8位)加數(shù)(N2)高字節(jié)(8位)中字節(jié)(8位)低字節(jié)(8位)被加數(shù)N1高字節(jié)(8位)中字節(jié)(8位)低字節(jié)(8位)加數(shù)N2高字節(jié)(8位)中字節(jié)(8位)低字節(jié)(8位)

+)進位位(CY)進位位(CY)進位位(CY)

和N3進位高字節(jié)(8位)中字節(jié)(8位)低字節(jié)(8位)

MOVA,20H;(A)=被加數(shù)N1低字節(jié)

ADDA,2AH;(A)=被加數(shù)N1低字節(jié)+加數(shù)N2低字節(jié)

低字節(jié)和的進位在CY中

MOV20H,A;(20H)=和N3低字節(jié)

MOVA,21H;(A)=被加數(shù)N1中字節(jié)

ADDCA,2BH;(A)=被加數(shù)N1中字節(jié)+加數(shù)N2中字節(jié)+

低字節(jié)和的進位,中字節(jié)和的進位在CY中

MOV21H,A;(21H)=和N3中字節(jié)

MOVA,22H;(A)=被加數(shù)N1高字節(jié)

ADDCA,2CH;

MOV22H,A;(22H)=和N3高字節(jié)

MOVA,#00H;

ADDCA,#00H;高字節(jié)和的進位位處理

MOV23H,A;保存處理后的高字節(jié)和的進位思考題:

1)如果N1、N2、N3的數(shù)據(jù)結(jié)構(gòu)為高字節(jié)存放在低地址單元,低字節(jié)存放在高地址單元,應(yīng)如何修改程序?

2)上述程序,如果利用數(shù)據(jù)指針,采用寄存器間接尋址的方式,應(yīng)如何修改程序?思考題:1)被加數(shù)(N1)高字節(jié)(8位)中字節(jié)(8位)低字節(jié)(8位)加數(shù)(N2)高字節(jié)(8位)中字節(jié)(8位)低字節(jié)(8位)解:MOVA,22H;(A)=被加數(shù)N1低字節(jié)

ADDA,2CH;(A)=被加數(shù)N1低字節(jié)+加數(shù)N2低字節(jié)低字節(jié)和的進位在CY中

MOV22H,A;(22H)=和N3低字節(jié)

MOVA,21H;(A)=被加數(shù)N1中字節(jié)被加數(shù)(N1)加數(shù)(N2)和(N3)20H單元高字節(jié)(8位)2AH單元高字節(jié)(8位)20H單元高字節(jié)(8位)21H單元中字節(jié)(8位)2BH單元中字節(jié)(8位)21H單元中字節(jié)(8位)22H單元低字節(jié)(8位)2CH單元低字節(jié)(8位)22H單元低字節(jié)(8位)1FH單元進位位

ADDCA,2BH;(A)=被加數(shù)N1中字節(jié)+加數(shù)N2中字節(jié)+

低字節(jié)和的進位,中字節(jié)和的進位在CY中

MOV21H,A;(21H)=和N3中字節(jié)

MOVA,20H;(A)=被加數(shù)N1高字節(jié)

ADDCA,2AH;(A)=被加數(shù)N1高字節(jié)+加數(shù)N2高字節(jié)+

中字節(jié)和的進位,高字節(jié)和的進位在CY中

MOV20H,A;(20H)=和N3高字節(jié)

ADDCA,#00H;高字節(jié)和的進位位處理

MOV1FH,A;保存處理后的高字節(jié)和的進位思考題:2)解:MOVR0,#20H;設(shè)置被加數(shù)N1數(shù)據(jù)指針,(R0)=20HMOVR1,#2AH;設(shè)置加數(shù)N2數(shù)據(jù)指針,(R1)=2AHMOVA,@R0;取被加數(shù)N1低字節(jié),(A)=(20H)

ADDA,@R1;N1低字節(jié)和N2低字節(jié)相加

MOV@R0,A;和的低字節(jié)存于20HINCR0;修改N1數(shù)據(jù)指針,(R0)=21HINCR1;修改N2數(shù)據(jù)指針,(R1)=2BHMOVA,@R0;取被加數(shù)N1中字節(jié),(A)=(21H)

ADDCA,@R1;N1、N2中字節(jié)、低字節(jié)進位相加

MOV@R0,A;和的中字節(jié)存于21HINCR0;修改N1數(shù)據(jù)指針,(R0)=22H

INCR1;修改N2數(shù)據(jù)指針,(R1)=2CHMOVA,@R0;取被加數(shù)N1高字節(jié),(A)=(22H)

ADDCA,@R1;N1、N2高字節(jié)、中字節(jié)進位相加

MOV@R0,A;和的高字節(jié)存于22HADDCA,#00H;高字節(jié)和的進位位處理

INCR0;

MOV@R0,A;保存處理后的高字節(jié)和的進位

思考題:

3)上述程序,如果改變N1、N2、N3的數(shù)據(jù)結(jié)構(gòu)(高字節(jié)存放在低地址單元,低字節(jié)存放在高地址單元),應(yīng)如何修改程序?被加數(shù)(N1)加數(shù)(N2)和(N3)20H單元高字節(jié)(8位)2AH單元高字節(jié)(8位)20H單元高字節(jié)(8位)21H單元中字節(jié)(8位)2BH單元中字節(jié)(8位)21H單元中字節(jié)(8位)22H單元低字節(jié)(8位)2CH單元低字節(jié)(8位)22H單元低字節(jié)(8位)1FH單元進位位思考題:3)解:MOVR0,#22H;設(shè)置被加數(shù)N1數(shù)據(jù)指針,(R0)=22HMOVR1,#2CH;設(shè)置加數(shù)N2數(shù)據(jù)指針,(R1)=2CHMOVA,@R0;取被加數(shù)N1低字節(jié),(A)=(22H)

ADDA,@R1;N1低字節(jié)和N2低字節(jié)相加

MOV@R0,A;和的低字節(jié)存于22HDECR0;修改N1數(shù)據(jù)指針,(R0)=21HDECR1;修改N2數(shù)據(jù)指針,(R1)=2BH

MOVA,@R0;取被加數(shù)N1中字節(jié),(A)=(21H)

ADDCA,@R1;N1、N2中字節(jié)、低字節(jié)進位相加

MOV@R0,A;和的中字節(jié)存于21HDECR0;修改N1數(shù)據(jù)指針,(R0)=20HDECR1;修改N2數(shù)據(jù)指針,(R1)=2AHMOVA,@R0;取被加數(shù)N1高字節(jié),(A)=(20H)

ADDCA,@R1;N1、N2高字節(jié)、中字節(jié)進位相加

MOV@R0,A;和的高字節(jié)存于20HADDCA,#00H;高字節(jié)和的進位位處理

DECR0;

MOV@R0,A;保存處理后的高字節(jié)和的進位(6)乘除指令組

a)乘法指令

MULAB1)實現(xiàn)兩個8位無符號二進制數(shù)的乘法操作,被乘數(shù)在A中,乘數(shù)在B中,乘積為16位,高8位送B,低8位送A。

2)此指令影響PSW的狀態(tài),CY位總被清0,當(dāng)乘積大于255,則OV=1,否則清0。

例:(A)=4EH,(B)=5DH,執(zhí)行指令MULAB

01001110

×)010111011110001010110

∴(B)=1CH(A)=56H,OV=1,CY=0

b)乘法指令DIVAB1)實現(xiàn)兩個8位無符號二進制數(shù)除法,被除數(shù)在A,除數(shù)在B,A←商,B←余數(shù)。

2)此指令影響PSW位狀態(tài),CY位總被清0。當(dāng)除數(shù)為0(B=0)OV=1,表示除法沒有意義。例:(A)=11H,(B)=04H,執(zhí)行指令DIVAB

其結(jié)果(A)=01H,B=1,CY=OV=0(7)十進制調(diào)整指令DAA

指令功能:用于對BCD碼十進制數(shù)加法運算的結(jié)果進行修正。

a)十進制調(diào)整問題指令系統(tǒng)中,只有針對二進制數(shù)的加法指令(ADD、ADDC),而沒有專門用于十進制數(shù)(BCD碼)的加法指令,因此,十進制數(shù)(BCD碼)的加法運算只能借助于二進制數(shù)的加法指令,但二進制數(shù)加法指令不能完全適用于十進制數(shù)(BCD碼)加法運算。

6+3=98+7=158+9=17011010001000

+)0011

+)0111

+)1001100111111←0001

(9)(11)

12+34=4618+26=4471+64=13595+87=18200010010000110000111000110010101+)00110100

+)00100110

+)01100100

+)100001110100011000111110110101011←00011100

(46)

b)出錯原因

BCD碼是4位二進制編碼,4位二進制數(shù)共有16個編碼,但BCD碼只用了其中10個(0000~1001),剩下6個(1010~1111)沒用,為無效碼。

在BCD碼加法運算中,凡結(jié)果進入或者跳過無效編碼區(qū)時,其結(jié)果就是錯誤的。

c)調(diào)整方法:

1)1位BCD碼加法運算出錯調(diào)整

1位BCD碼加法運算出錯情況有兩種:相加結(jié)果大于9,進入無效編碼區(qū);相加結(jié)果有進位(AC),跳過無效編碼區(qū)。以上兩種情況均使相加結(jié)果比正確值小6,調(diào)整方法就是加6。

6+3=98+7=158+9=17011010001000

+)0011

+)0111

+)1001100111111←0001

+)0110(6)

+)0110(6)

1←0101(15)1←0111(17)

2)2位(字節(jié))BCD碼加法運算出錯調(diào)整

2位(字節(jié))BCD碼加法運算出錯情況有三種:相加結(jié)果高4位或低4位大于9,進入無效編碼區(qū);相加結(jié)果高4位或低4位產(chǎn)生進位,跳過無效編碼區(qū);相加結(jié)果高4位為9,低4位大于9,這樣低位加6修正時產(chǎn)生的進位會使高位大于9,進入無效編碼區(qū)。A的低4位大于9或(AC)=1,則進行低4

溫馨提示

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

評論

0/150

提交評論