版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
教學(xué)基本要求:
(1)、了解單片機(jī)的指令系統(tǒng)、編程語言等基本概念;(2)、熟悉單片機(jī)匯編語言指令格式中符號(hào)的意義;(3)、熟悉單片機(jī)匯編語言指令系統(tǒng)每條指令的功能;(4)、掌握單片機(jī)指令系統(tǒng)的7種尋址方式;(5)、掌握單片機(jī)指令系統(tǒng)每類指令的用法。教學(xué)重點(diǎn):(1)、單片機(jī)指令系統(tǒng)的尋址方式;(2)、片內(nèi)、外RAM單元之間的數(shù)據(jù)傳送;(3)、加法運(yùn)算指令組的用法;(4)、邏輯運(yùn)算指令組的用法;(5)、控制轉(zhuǎn)移指令組的用法。第3章80C51單片機(jī)指令系統(tǒng)教學(xué)難點(diǎn):(1)、寄存器間接尋址、變址尋址、相對尋址等概念;(2)、堆棧操作指令的應(yīng)用。(3)、十進(jìn)制調(diào)整指令DAA的應(yīng)用;(4)、控制轉(zhuǎn)移指令轉(zhuǎn)移目的地址、偏移量rel的計(jì)算;(5)、子程序調(diào)用、返回指令的用法。3.1單片機(jī)指令系統(tǒng)概述1、指令系統(tǒng)概述指令:是供用戶使用的單片機(jī)的軟件資源,是單片機(jī)所能接受的軟件工作者的命令的最小工作單位。指令系統(tǒng):單片機(jī)所能執(zhí)行的指令集合。機(jī)器語言:指令以二進(jìn)制碼來表示。匯編語言:指令以助記符形式來表示。機(jī)器語言程序:使用機(jī)器語言編寫的程序。匯編語言程序:使用匯編語言編寫的程序。注意:MCS-51單片機(jī)指令系統(tǒng)不具有通用性,因此,用其編寫的匯編語言程序也不具有通用性,不能移植。
MCS-51系列單片機(jī)的匯編語言指令系統(tǒng)共有111條指令,其中49條為單字節(jié)指令,45條為雙字節(jié)指令,17條為三字節(jié)指令。從指令執(zhí)行的時(shí)間來看,單機(jī)器周期指令64條,雙機(jī)器周期指令45條,四機(jī)器周期指令2條。
MCS-51單片機(jī)的指令系統(tǒng)共有33個(gè)功能,用匯編語言編程時(shí),只需44個(gè)助記符。(1)、數(shù)據(jù)傳送類指令(29條)(2)、算術(shù)運(yùn)算類指令(24條)(3)、邏輯運(yùn)算及移位類指令(24條)(4)、控制轉(zhuǎn)移類指令(17條)(5)、位操作類指令(17條)2、MCS-51單片機(jī)指令格式指令格式:即指令的表示方法,其內(nèi)容包括指令的長度和指令內(nèi)部信息的安排。采用助記符表示的匯編語言指令格式如下:[標(biāo)號(hào):]操作碼助記符[目的操作數(shù)],[源操作數(shù)][;注釋]
(1)一條指令中標(biāo)號(hào)、操作數(shù)、注釋部分可有可無,但操作碼部分必不可少。(2)標(biāo)號(hào)是程序員根據(jù)編程需要給指令設(shè)定的符號(hào)地址,標(biāo)號(hào)由1~8個(gè)字符組成,不能用系統(tǒng)規(guī)定的寄存器名,也不能用指令系統(tǒng)中的助記符名稱,它的第一個(gè)字符必須是英文字,不能是數(shù)字或其它符號(hào),標(biāo)號(hào)后必須用冒號(hào)“:”。(3)操作碼表示指令的操作種類,用來規(guī)定指令進(jìn)行什么操作,常用操作碼的英文名稱或縮寫形式來表示,操作碼后必須有一個(gè)或多哥空格“”作間隔符。
例如:MOV表示數(shù)據(jù)傳送操作,ADD表示加法操作。(4)操作數(shù)表示指令操作的對象,它可能是一個(gè)具體的數(shù)據(jù),也可能是指出到哪里取得數(shù)據(jù)的地址或符號(hào)。一條指令中,可能沒有(RET指令),也可能有一個(gè)(CPLA指令)、兩個(gè)(MOVA,#00H指令,MOV30H,#50H指令)或三個(gè)(CJNEA,#00H,NEXT)操作數(shù)。根據(jù)操作數(shù)的位置的不同,可分為目的(左)操作數(shù)和源(右)操作數(shù),操作數(shù)之間也以逗號(hào)“,”相隔(乘法指令MULAB和除法指令DIVAB除外)。(5)注釋是對指令的解釋說明,用以提高程序的可讀性。注釋前必須加分號(hào)“;”。
(6)書寫匯編語言指令必須注意以上規(guī)則。
3、指令格式中符號(hào)意義說明
Rn:當(dāng)前寄存器組的8個(gè)通用寄存器R0~R7(n=0~7)。
Ri:當(dāng)前寄存器組中的2個(gè)寄存器RO,R1,可作地址指針,即間接尋址的寄存器(i=0,1)。
direct:內(nèi)部RAM的8位地址,既可以是內(nèi)部RAM的低128個(gè)單元地址(0~127),也可以是專用寄存器的單元地址或符號(hào),如I/O端口,控制寄存器,狀態(tài)寄存器等(128~255)。
#data:包含在指令中的8位立即數(shù)。
#data16:包含在指令中的16位立即數(shù)。
addr16:表示16位目的地址,只限于在LCALL和LJMP指令中使用,目的地址范圍是64KB的程序存儲(chǔ)器地址空間。
addr11:表示11位目的地址,只限于在ACALL和AJMP指令中使用,目的的地址必須存放在與下一條指令第一個(gè)字節(jié)同一個(gè)2KB程序存儲(chǔ)器地址空間之內(nèi)。
Rel:相對轉(zhuǎn)移指令中的偏移量,為8位帶符號(hào)補(bǔ)碼數(shù)。
DPTR:數(shù)據(jù)指針,可用作16位的地址寄存器。
Bit:內(nèi)部RAM或?qū)S眉拇嫫髦械闹苯訉ぶ肺弧?/p>
A:累加器(直接尋址方式的累加器表示為Acc)
B:B寄存器,用于MUL和DIV指令中。
C:進(jìn)位標(biāo)志位或布爾處理機(jī)中的累加位。
@:為間址寄存器或基址寄存器的前綴標(biāo)志。
/:位操作數(shù)的前綴,表示對該位狀態(tài)取反。(X):某寄存器或某單元中的內(nèi)容。
((X)):由X間接尋址的單元中的內(nèi)容。←:表示將箭頭右邊的內(nèi)容傳送至箭頭的左邊。3.280C51單片機(jī)指令尋址方式
MCS-51單片機(jī)指令系統(tǒng)中的大多數(shù)指令執(zhí)行時(shí)都需要使用操作數(shù),而在單片機(jī)中只有指定了操作數(shù)的存儲(chǔ)單元才能得到操作數(shù),因此,要得到操作數(shù),就只需找到操作數(shù)存放的單元即可。所謂尋址方式:即如何確定參與操作的數(shù)的真正單元。根據(jù)操作數(shù)單元指定方法的不同,就有了不同的尋址方式。
MCS-51單片機(jī)共有7種尋址方式。由于指令中的操作數(shù)有目的(左)操作數(shù)和源(右)操作數(shù)之分,因此,在講解尋址方式時(shí),均以源(右)操作數(shù)為例。(1)寄存器尋址方式
a)、寄存器尋址就是指操作數(shù)在寄存器中,因此,指定了寄存器就得到了操作數(shù)。
b)寄存器尋址的指令中,以符號(hào)名稱來表示寄存器。例:假設(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個(gè)單元,低128單元地址在指令中須以直接單元地址形式給出;
2)專用寄存器,專用寄存器除以單元地址形式給出外,還可以以寄存器符號(hào)的形式給出。例: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),它是一個(gè)特殊的尋址區(qū),既可以使用DPTR作間址寄存器尋址,也可以使用R0或R1作間址寄存器尋址。例:假設(shè)外部RAM0020H單元中的內(nèi)容是45H,現(xiàn)需將其送A中。
MOVDPTR,#0020H;MOVXA,@DPTR
或MOVR0,#20H;MOVXA,@R0;
4)在執(zhí)行堆棧操作指令(PUSH,POP)時(shí),也算為寄存器間接尋址,即以堆棧指針(SP)作間址寄存器的間接尋址方式。
例:PUSHACC;將A中的內(nèi)容壓入堆棧
POPACC;將堆棧中的內(nèi)容彈出,送到A(4)立即尋址方式
a)立即尋址即指令所需的操作數(shù)已在指令中直接給出。通常,把直接出現(xiàn)在指令中的操作數(shù)稱之為立即數(shù)。為了與直接尋址指令中的直接單元地址相區(qū)別,一般應(yīng)在立即數(shù)前面加“#”標(biāo)志。
b)采用立即尋址的指令,一般為雙字節(jié)。第一個(gè)字節(jié)為指令的操作碼,第二個(gè)字節(jié)為立即數(shù)。
c)尋址范圍:程序存儲(chǔ)器空間。
例:MOVA,#40H;指令功能:將程序存儲(chǔ)器中某單元的內(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;指令功能:將程序存儲(chǔ)器中某單元的內(nèi)容1000H(立即數(shù))送DPTR中
MOVP1,#55H ;將立即數(shù)55H送P1口
MOV 20H,#55H ;將立即數(shù)55H送20H單元
MOV R0,#20H;將立即數(shù)20H送寄存器R0(5)變址尋址方式
a)變址尋址用于訪問程序存儲(chǔ)器中的常數(shù)或數(shù)據(jù)表格。變址尋址即是以DPTR或PC作為基址寄存器,以累加器A為變址寄存器,并以兩者的內(nèi)容相加形成16位地址作為目的操作數(shù)地址,以達(dá)到訪問程序存儲(chǔ)器中的常數(shù)或數(shù)據(jù)表格的目的。
b)尋址范圍:程序存儲(chǔ)器空間。
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位二進(jìn)制無符號(hào)數(shù)。
(6)位尋址方式
a)位尋址即對二進(jìn)制數(shù)據(jù)位進(jìn)行尋址。
b)尋址范圍:
1)、內(nèi)部RAM中的位尋址區(qū)(單元地址20H~2FH),128個(gè)位,位地址是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個(gè),PSW,IPIE,PO,P1,P2,P3,SCON,A,TCON,B,實(shí)有可尋址位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
專用寄存器符號(hào)加位數(shù)表示例:MOVC,PSW.5;將PSW中位地址為D5H的位狀態(tài)傳給累加位C(7)相對尋址方式
a)相對尋址是為解決程序轉(zhuǎn)移而設(shè)置的,為轉(zhuǎn)移指令所用。
相對尋址是將程序計(jì)數(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是一個(gè)帶符號(hào)的8位二進(jìn)制補(bǔ)碼數(shù),所能表示數(shù)的范圍為-128~+127。
b)尋址范圍:程序存儲(chǔ)器空間具體地說,相對轉(zhuǎn)移是以轉(zhuǎn)移指令所在地址為基點(diǎn),向前(地址增加方向)最大可轉(zhuǎn)移(127+轉(zhuǎn)移指令字節(jié)數(shù))個(gè)單元地址,向后(地址減少方向)最大可轉(zhuǎn)移(128-轉(zhuǎn)移指令字節(jié)數(shù))個(gè)單元地址。3.380C51單片機(jī)指令分類介紹
MCS-51單片機(jī)指令系統(tǒng)包括111條指令,按功能可以劃分為以下5類:數(shù)據(jù)傳送類指令(29條);
算術(shù)運(yùn)算類指令(24條);邏輯運(yùn)算類指令(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é)指令,第一個(gè)字節(jié)是操作碼信息,第二、第三字節(jié)分別是操作數(shù)(立即數(shù))的高、低8位信息,其二進(jìn)制目標(biāo)代碼存放格式如下:操作碼10010000程序存儲(chǔ)器立即數(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進(jìn)行;
2)MCS-51指令系統(tǒng)中沒有專用的存儲(chǔ)器讀寫指令,實(shí)際上外部數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送指令就是外部RAM的讀寫指令;
3)內(nèi)部RAM單元之間的數(shù)據(jù)傳送可有多種尋址方式。(4)程序存儲(chǔ)器數(shù)據(jù)傳送指令組程序存儲(chǔ)器數(shù)據(jù)傳送指令組既可用于內(nèi)部程序存儲(chǔ)器,也可用于外部程序存儲(chǔ)器。程序存儲(chǔ)器數(shù)據(jù)傳送指令組的指令只有兩條,均為單字節(jié)指令,采用變址尋址方式。數(shù)據(jù)只能從程序存儲(chǔ)器單向讀出,而且也必須通過累加器A進(jìn)行傳送。
MOVCA,@A+DPTR;
MOVCA,@A+PC
這兩條指令用于訪問程序存儲(chǔ)器中的數(shù)據(jù)表格,因此也稱之為查表指令。其功能非常重要,將在第四章匯編語言程序設(shè)計(jì)中講解。(5)數(shù)據(jù)交換指令組數(shù)據(jù)交換主要在內(nèi)部RAM單元與A之間、A的高、低4位之間進(jìn)行,有整字節(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個(gè)BCD碼(1個(gè)BCD碼占4個(gè)二進(jìn)制位)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)堆棧操作指令組堆棧操作指令組只有兩條指令:進(jìn)棧指令和出棧指令。
a)進(jìn)棧指令: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
注意:進(jìn)棧指令和出棧指令均采用寄存器間接尋址方式,間址寄存器是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)=例:單片機(jī)應(yīng)用系統(tǒng)程序設(shè)計(jì)時(shí),經(jīng)常需要用到中斷服務(wù)程序和各類子程序,在執(zhí)行中斷服務(wù)程序和子程序前,常常需要把程序狀態(tài)寄存器PSW、累加器A、數(shù)據(jù)指針DPTR的內(nèi)容保護(hù)起來(現(xiàn)場進(jìn)棧保護(hù)),在中斷服務(wù)程序和子程序執(zhí)行結(jié)束之前,再恢復(fù)它們的內(nèi)容(現(xiàn)場出?;謴?fù))。以下程序段可實(shí)現(xiàn)上述功能。
MOVSP,#60H;
PUSHPSW;
PUSHACC;
PUSHDPL;
PUSHDPH;
…………………………
POPDPH;
POPDPL;
POPACC;
POPPSW;注意:堆棧深度、堆棧平衡,數(shù)據(jù)進(jìn)棧、出棧的先后次序。3.3.2算術(shù)運(yùn)算類指令
a)指令數(shù)目:24條;
b)指令通用格式:助記符操作碼目的操作數(shù),源操作數(shù);
c)指令功能:數(shù)據(jù)算術(shù)運(yùn)算(加減乘除),此類指令對程序狀態(tài)字PSW的進(jìn)位位(CY),輔助進(jìn)位位(AC),溢出位(OV)三種標(biāo)志位有影響,即對它們自動(dòng)置位或復(fù)位,但是,加1和減1指令不影響這些標(biāo)志;
d)助記符類型(8種):
ADD、ADDC、SUBB、INC、DEC、DA、MUL、DIVe)注意:算術(shù)運(yùn)算類指令都是針對8位二進(jìn)制無符號(hào)數(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位二進(jìn)制數(shù)加法運(yùn)算指令的一個(gè)加數(shù)總是累加器A。
c)運(yùn)算影響PSW的位狀態(tài)相加過程中,若位3有進(jìn)位,則AC置1,否則,AC清0,若位7有進(jìn)位,則CY置1,否則,CY清0。
d)、對于無符號(hào)數(shù)相加,若CY置位,說明和產(chǎn)生溢出,即大于255。
e)、對于有符號(hào)數(shù)相加,當(dāng)位6或位7之中只有一位進(jìn)位時(shí),溢出標(biāo)志位OV置位,說明和產(chǎn)生了溢出,結(jié)果出錯(cuò)。
OV位只對有符號(hào)數(shù)加法有意義,對于無符號(hào)數(shù)加法無意義。
溢出表達(dá)式:OV=D6cy⊕D7cyD6cy:位6向位7的進(jìn)位
D7cy:位7向cy的進(jìn)位例:假設(shè)(A)=C2H,(R0)=A9H,執(zhí)行ADDA,R011000010
+10101001
1←01101011
OV=D6cy⊕D7cy=0⊕1=1
若C2H,A9H為無符號(hào)數(shù),則(A)=6BH,(AC)=0,(CY)=1,則表示溢出,結(jié)果大于255。若C2H,A9H為有符號(hào)數(shù),則OV=1,表示有溢出,結(jié)果出錯(cuò),因?yàn)閮蓚€(gè)負(fù)數(shù)相加不可能得到正數(shù)的和。例:假設(shè)(A)=78H,(10H)=64H,執(zhí)行指令A(yù)DDA,10H,求兩無符號(hào)數(shù)之和,并說明PSW的有關(guān)標(biāo)志位狀態(tài)。
01111000
+)0110010011011100PSW:OV=D6cy⊕D7cy=1⊕0=1,CY=0,AC=0。練習(xí)題:(A)=53H,(R0)=FCH,執(zhí)行指令:ADDA,R0
(2)帶進(jìn)位加法指令組指令格式相應(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)容及進(jìn)位標(biāo)志CY相加,結(jié)果存入A中。運(yùn)算前一個(gè)加數(shù)必定在A中,運(yùn)算后和存于A中。
b)此類指令運(yùn)算結(jié)果同樣對PSW中相關(guān)位有影響,影響規(guī)則與加法指令組相同。
c)它一般用于多字節(jié)數(shù)的加法運(yùn)算,低字節(jié)相加的和可能產(chǎn)生進(jìn)位,可通過帶進(jìn)位加法指令將低字節(jié)的進(jìn)位加到高字節(jié)上去,高字節(jié)求和時(shí),必須使用帶進(jìn)位的加法指令。例:假設(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)容及進(jìn)位標(biāo)志CY相減,結(jié)果存入A中。運(yùn)算前被減數(shù)必定在A中,運(yùn)算后差存于A中。
b)此類指令運(yùn)算結(jié)果同樣對PSW中相關(guān)位有影響,影響規(guī)則與加法指令組相同。其中,OV位只對有符號(hào)數(shù)減法有意義。
c)減法運(yùn)算只有帶借位減法指令,而沒有不帶借位減法指令。如需進(jìn)行不帶借位的減法運(yùn)算,只需在用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為無符號(hào)數(shù),則由于CY=0,無溢出,結(jié)果正確。若C9H,54H為有符號(hào)數(shù),則由于OV=1,有溢出,結(jié)果出錯(cuò)。
練習(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單元分別存放兩個(gè)8位二進(jìn)制無符號(hào)加數(shù),求兩數(shù)相加之和,和存放在內(nèi)部RAM42H單元中。假設(shè)兩數(shù)之和仍是8位二進(jìn)制數(shù)。解:例:內(nèi)部RAM40H和41H單元分別存放兩個(gè)8位二進(jìn)制無符號(hào)加數(shù),求兩數(shù)相加之和,和存放在內(nèi)部RAM42H單元中。假設(shè)兩數(shù)之和仍是8位二進(jìn)制數(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;取第一個(gè)加數(shù),(A)=(40H)
INCR0;修改數(shù)據(jù)指針,(R0)=41HADDA,@R0;兩數(shù)相加(A)=(40H)+(41H)
INCR0;修改數(shù)據(jù)指針,(R0)=42HMOV@R0,A;存兩數(shù)和(42H)=(40H)+(41H)例:兩個(gè)三字節(jié)二進(jìn)制無符號(hào)數(shù)相加,被加數(shù)放在內(nèi)部RAM20H~22H單元(低字節(jié)存放在低地址單元,高字節(jié)存放在高地址單元,即低位在前,高位在后),加數(shù)放在2AH~2CH單元,和放在20H~22H單元,最高位如有進(jìn)位,則放在23H單元中。解:數(shù)據(jù)類型(二、十進(jìn)制數(shù),有、無符號(hào)數(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單元進(jìn)位位被加數(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位)
+)進(jìn)位位(CY)進(jìn)位位(CY)進(jìn)位位(CY)
和N3進(jìn)位高字節(jié)(8位)中字節(jié)(8位)低字節(jié)(8位)
MOVA,20H;(A)=被加數(shù)N1低字節(jié)
ADDA,2AH;(A)=被加數(shù)N1低字節(jié)+加數(shù)N2低字節(jié)
低字節(jié)和的進(jìn)位在CY中
MOV20H,A;(20H)=和N3低字節(jié)
MOVA,21H;(A)=被加數(shù)N1中字節(jié)
ADDCA,2BH;(A)=被加數(shù)N1中字節(jié)+加數(shù)N2中字節(jié)+
低字節(jié)和的進(jìn)位,中字節(jié)和的進(jìn)位在CY中
MOV21H,A;(21H)=和N3中字節(jié)
MOVA,22H;(A)=被加數(shù)N1高字節(jié)
ADDCA,2CH;
MOV22H,A;(22H)=和N3高字節(jié)
MOVA,#00H;
ADDCA,#00H;高字節(jié)和的進(jìn)位位處理
MOV23H,A;保存處理后的高字節(jié)和的進(jìn)位思考題:
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é)和的進(jìn)位在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單元進(jìn)位位
ADDCA,2BH;(A)=被加數(shù)N1中字節(jié)+加數(shù)N2中字節(jié)+
低字節(jié)和的進(jìn)位,中字節(jié)和的進(jìn)位在CY中
MOV21H,A;(21H)=和N3中字節(jié)
MOVA,20H;(A)=被加數(shù)N1高字節(jié)
ADDCA,2AH;(A)=被加數(shù)N1高字節(jié)+加數(shù)N2高字節(jié)+
中字節(jié)和的進(jìn)位,高字節(jié)和的進(jìn)位在CY中
MOV20H,A;(20H)=和N3高字節(jié)
ADDCA,#00H;高字節(jié)和的進(jìn)位位處理
MOV1FH,A;保存處理后的高字節(jié)和的進(jìn)位思考題: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é)進(jìn)位相加
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é)進(jìn)位相加
MOV@R0,A;和的高字節(jié)存于22HADDCA,#00H;高字節(jié)和的進(jìn)位位處理
INCR0;
MOV@R0,A;保存處理后的高字節(jié)和的進(jìn)位
思考題:
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單元進(jìn)位位思考題: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é)進(jìn)位相加
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é)進(jìn)位相加
MOV@R0,A;和的高字節(jié)存于20HADDCA,#00H;高字節(jié)和的進(jìn)位位處理
DECR0;
MOV@R0,A;保存處理后的高字節(jié)和的進(jìn)位(6)乘除指令組
a)乘法指令
MULAB1)實(shí)現(xiàn)兩個(gè)8位無符號(hào)二進(jìn)制數(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)實(shí)現(xiàn)兩個(gè)8位無符號(hào)二進(jìn)制數(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)十進(jìn)制調(diào)整指令DAA
指令功能:用于對BCD碼十進(jìn)制數(shù)加法運(yùn)算的結(jié)果進(jìn)行修正。
a)十進(jìn)制調(diào)整問題指令系統(tǒng)中,只有針對二進(jìn)制數(shù)的加法指令(ADD、ADDC),而沒有專門用于十進(jìn)制數(shù)(BCD碼)的加法指令,因此,十進(jìn)制數(shù)(BCD碼)的加法運(yùn)算只能借助于二進(jìn)制數(shù)的加法指令,但二進(jìn)制數(shù)加法指令不能完全適用于十進(jìn)制數(shù)(BCD碼)加法運(yùn)算。
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)出錯(cuò)原因
BCD碼是4位二進(jìn)制編碼,4位二進(jìn)制數(shù)共有16個(gè)編碼,但BCD碼只用了其中10個(gè)(0000~1001),剩下6個(gè)(1010~1111)沒用,為無效碼。
在BCD碼加法運(yùn)算中,凡結(jié)果進(jìn)入或者跳過無效編碼區(qū)時(shí),其結(jié)果就是錯(cuò)誤的。
c)調(diào)整方法:
1)1位BCD碼加法運(yùn)算出錯(cuò)調(diào)整
1位BCD碼加法運(yùn)算出錯(cuò)情況有兩種:相加結(jié)果大于9,進(jìn)入無效編碼區(qū);相加結(jié)果有進(jìn)位(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碼加法運(yùn)算出錯(cuò)調(diào)整
2位(字節(jié))BCD碼加法運(yùn)算出錯(cuò)情況有三種:相加結(jié)果高4位或低4位大于9,進(jìn)入無效編碼區(qū);相加結(jié)果高4位或低4位產(chǎn)生進(jìn)位,跳過無效編碼區(qū);相加結(jié)果高4位為9,低4位大于9,這樣低位加6修正時(shí)產(chǎn)生的進(jìn)位會(huì)使高位大于9,進(jìn)入無效編碼區(qū)。A的低4位大于9或(AC)=1,則進(jìn)行低4
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)產(chǎn)品代加工與農(nóng)業(yè)綠色生產(chǎn)合作合同3篇
- 2025年度全新員工離職保密協(xié)議及知識(shí)產(chǎn)權(quán)歸屬合同2篇
- 二零二五年度互聯(lián)網(wǎng)醫(yī)療股東股權(quán)變更及服務(wù)協(xié)議3篇
- 二零二五年度文化場館租賃合同范本3篇
- 二零二五年度環(huán)保材料研發(fā)人員勞動(dòng)合同書(含成果轉(zhuǎn)化)2篇
- 2025年公司法人變更合同審查與合規(guī)性審查專項(xiàng)服務(wù)3篇
- 二零二五年度環(huán)保設(shè)備檢修及保養(yǎng)協(xié)議3篇
- 二零二五年度農(nóng)產(chǎn)品電商運(yùn)營委托收購合作協(xié)議3篇
- 2025養(yǎng)生館合伙人生態(tài)養(yǎng)生旅游項(xiàng)目合作協(xié)議3篇
- 二零二五年度農(nóng)機(jī)作業(yè)與農(nóng)村環(huán)境保護(hù)服務(wù)合同3篇
- 透水混凝土工程檢驗(yàn)批質(zhì)量驗(yàn)收記錄表
- 2023年中荊投資控股集團(tuán)有限公司招聘筆試模擬試題及答案解析
- DPP-4抑制劑的臨床應(yīng)用及優(yōu)勢解析課件
- 《起重吊裝方案編制》課件
- 光伏扶貧項(xiàng)目可行性研究報(bào)告
- 鈑金沖壓件質(zhì)量要求
- 2022年高考全國甲卷語文試題評講課件55張
- 欠條(標(biāo)準(zhǔn)模版)
- 深圳京基·KKmall市場考察報(bào)告(45頁
- 國家開放大學(xué)電大本科《西方社會(huì)學(xué)》2023-2024期末試題及答案(試卷代號(hào):1296)
- JBT5323-91立體倉庫焊接式鋼結(jié)構(gòu)貨架 技術(shù)條件
評論
0/150
提交評論