




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
教學基本要求:
(1)、了解單片機的指令系統、編程語言等基本概念;(2)、熟悉單片機匯編語言指令格式中符號的意義;(3)、熟悉單片機匯編語言指令系統每條指令的功能;(4)、掌握單片機指令系統的7種尋址方式;(5)、掌握單片機指令系統每類指令的用法。教學重點:(1)、單片機指令系統的尋址方式;(2)、片內、外RAM單元之間的數據傳送;(3)、加法運算指令組的用法;(4)、邏輯運算指令組的用法;(5)、控制轉移指令組的用法。第3章80C51單片機指令系統教學難點:(1)、寄存器間接尋址、變址尋址、相對尋址等概念;(2)、堆棧操作指令的應用。(3)、十進制調整指令DAA的應用;(4)、控制轉移指令轉移目的地址、偏移量rel的計算;(5)、子程序調用、返回指令的用法。3.1單片機指令系統概述1、指令系統概述指令:是供用戶使用的單片機的軟件資源,是單片機所能接受的軟件工作者的命令的最小工作單位。指令系統:單片機所能執行的指令集合。機器語言:指令以二進制碼來表示。匯編語言:指令以助記符形式來表示。機器語言程序:使用機器語言編寫的程序。匯編語言程序:使用匯編語言編寫的程序。注意:MCS-51單片機指令系統不具有通用性,因此,用其編寫的匯編語言程序也不具有通用性,不能移植。
MCS-51系列單片機的匯編語言指令系統共有111條指令,其中49條為單字節指令,45條為雙字節指令,17條為三字節指令。從指令執行的時間來看,單機器周期指令64條,雙機器周期指令45條,四機器周期指令2條。
MCS-51單片機的指令系統共有33個功能,用匯編語言編程時,只需44個助記符。(1)、數據傳送類指令(29條)(2)、算術運算類指令(24條)(3)、邏輯運算及移位類指令(24條)(4)、控制轉移類指令(17條)(5)、位操作類指令(17條)2、MCS-51單片機指令格式指令格式:即指令的表示方法,其內容包括指令的長度和指令內部信息的安排。采用助記符表示的匯編語言指令格式如下:[標號:]操作碼助記符[目的操作數],[源操作數][;注釋]
(1)一條指令中標號、操作數、注釋部分可有可無,但操作碼部分必不可少。(2)標號是程序員根據編程需要給指令設定的符號地址,標號由1~8個字符組成,不能用系統規定的寄存器名,也不能用指令系統中的助記符名稱,它的第一個字符必須是英文字,不能是數字或其它符號,標號后必須用冒號“:”。(3)操作碼表示指令的操作種類,用來規定指令進行什么操作,常用操作碼的英文名稱或縮寫形式來表示,操作碼后必須有一個或多哥空格“”作間隔符。
例如:MOV表示數據傳送操作,ADD表示加法操作。(4)操作數表示指令操作的對象,它可能是一個具體的數據,也可能是指出到哪里取得數據的地址或符號。一條指令中,可能沒有(RET指令),也可能有一個(CPLA指令)、兩個(MOVA,#00H指令,MOV30H,#50H指令)或三個(CJNEA,#00H,NEXT)操作數。根據操作數的位置的不同,可分為目的(左)操作數和源(右)操作數,操作數之間也以逗號“,”相隔(乘法指令MULAB和除法指令DIVAB除外)。(5)注釋是對指令的解釋說明,用以提高程序的可讀性。注釋前必須加分號“;”。
(6)書寫匯編語言指令必須注意以上規則。
3、指令格式中符號意義說明
Rn:當前寄存器組的8個通用寄存器R0~R7(n=0~7)。
Ri:當前寄存器組中的2個寄存器RO,R1,可作地址指針,即間接尋址的寄存器(i=0,1)。
direct:內部RAM的8位地址,既可以是內部RAM的低128個單元地址(0~127),也可以是專用寄存器的單元地址或符號,如I/O端口,控制寄存器,狀態寄存器等(128~255)。
#data:包含在指令中的8位立即數。
#data16:包含在指令中的16位立即數。
addr16:表示16位目的地址,只限于在LCALL和LJMP指令中使用,目的地址范圍是64KB的程序存儲器地址空間。
addr11:表示11位目的地址,只限于在ACALL和AJMP指令中使用,目的的地址必須存放在與下一條指令第一個字節同一個2KB程序存儲器地址空間之內。
Rel:相對轉移指令中的偏移量,為8位帶符號補碼數。
DPTR:數據指針,可用作16位的地址寄存器。
Bit:內部RAM或專用寄存器中的直接尋址位。
A:累加器(直接尋址方式的累加器表示為Acc)
B:B寄存器,用于MUL和DIV指令中。
C:進位標志位或布爾處理機中的累加位。
@:為間址寄存器或基址寄存器的前綴標志。
/:位操作數的前綴,表示對該位狀態取反。(X):某寄存器或某單元中的內容。
((X)):由X間接尋址的單元中的內容。←:表示將箭頭右邊的內容傳送至箭頭的左邊。3.280C51單片機指令尋址方式
MCS-51單片機指令系統中的大多數指令執行時都需要使用操作數,而在單片機中只有指定了操作數的存儲單元才能得到操作數,因此,要得到操作數,就只需找到操作數存放的單元即可。所謂尋址方式:即如何確定參與操作的數的真正單元。根據操作數單元指定方法的不同,就有了不同的尋址方式。
MCS-51單片機共有7種尋址方式。由于指令中的操作數有目的(左)操作數和源(右)操作數之分,因此,在講解尋址方式時,均以源(右)操作數為例。(1)寄存器尋址方式
a)、寄存器尋址就是指操作數在寄存器中,因此,指定了寄存器就得到了操作數。
b)寄存器尋址的指令中,以符號名稱來表示寄存器。例:假設原來(A)=30H,(R1)=40H,現執行指令MOVA,R1;指令功能:將R1中的內容(操作數)送A中;
指令執行過程:A←(R1);
指令執行結果:(A)=(R1)=40H。
c)尋址范圍:1)當前工作寄存器組R0~R7;
2)部分專用寄存器A,AB,DPIR等。例:MOVP1,A;將累加器A的內容送到P1口
MOVP1,R4;將寄存器R4的內容送到P1口
CLRA;將累加器A清0CPLA;將累加器A中的內容取反
MULAB;將累加器A的內容與寄存器B的內容相乘(2)直接尋址方式
a)直接尋址即指令所需的操作數直接以操作數存放的單元地址的形式給出。例:假設內部RAM3AH單元的內容是88H,累加器A的內容是10H,現執行指令MOVA,3AH。指令功能:將3AH中的內容(操作數)送A中;
指令執行過程:A←(3AH);指令執行結果:(A)=(3AH)=88H。
b)采用直接尋址的指令一般是雙字節或三字節指令。
c)直接尋址是訪問專用寄存器的唯一方法。
d)尋址范圍:
1)內部RAM低128個單元,低128單元地址在指令中須以直接單元地址形式給出;
2)專用寄存器,專用寄存器除以單元地址形式給出外,還可以以寄存器符號的形式給出。例:MOVP1,20H;將內部RAM20H單元的內容傳送到P1口
MOVA,P0;將P0口的內容傳送到AMOVA,80H;將P0口的內容傳送到A(3)寄存器間接尋址方式
a)寄存器間接尋址是指指令所需的操作數是通過寄存器間接得到的,寄存器中存放的則是操作數存放的單元地址。例:假設內部RAM3AH單元的內容是65H,寄存器R0的內容是3AH,現執行指令MOVA,@R0。指令功能:先將R0的內容3AH作為內部RAM的單元地址,再將內部RAM單元地址為3AH中的內容65H(操作數)送A中。
指令執行過程:A←((R0))或A←(3AH)指令執行結果:(A)=((R0))=(3AH)=65H。
b)間址寄存器:R0、R1、DPTR、SP。
指令中應在間址寄存器名之前加前綴@,SP除外。
c)尋址范圍:
1)內部RAM低128單元,可使用R0,R1作間址寄存器,其通用形式為@Ri(I=0或1)。例:MOVA,@R1;將R1指示的地址單元中內容傳送至A中。假設(R1)=40H,(40H)=90H,即把內部RAM中40H單元中的內容90H送到A。
2)外部(片外)RAM64KB單元,可使用DPTR作間址寄存器,其形式為@DPTR。例:MOVXA,@DPTR;將DPTR指示的外部RAM地址單元中的內容傳送至A。假設(DPTR)=1000H,(1000H)=80H,即把外部RAM1000H單元中的內容80H送到A。
3)外部(片外)RAM的低256單元(0000H~00FFH),它是一個特殊的尋址區,既可以使用DPTR作間址寄存器尋址,也可以使用R0或R1作間址寄存器尋址。例:假設外部RAM0020H單元中的內容是45H,現需將其送A中。
MOVDPTR,#0020H;MOVXA,@DPTR
或MOVR0,#20H;MOVXA,@R0;
4)在執行堆棧操作指令(PUSH,POP)時,也算為寄存器間接尋址,即以堆棧指針(SP)作間址寄存器的間接尋址方式。
例:PUSHACC;將A中的內容壓入堆棧
POPACC;將堆棧中的內容彈出,送到A(4)立即尋址方式
a)立即尋址即指令所需的操作數已在指令中直接給出。通常,把直接出現在指令中的操作數稱之為立即數。為了與直接尋址指令中的直接單元地址相區別,一般應在立即數前面加“#”標志。
b)采用立即尋址的指令,一般為雙字節。第一個字節為指令的操作碼,第二個字節為立即數。
c)尋址范圍:程序存儲器空間。
例:MOVA,#40H;指令功能:將程序存儲器中某單元的內容3AH(立即數)送A中
指令執行過程:A←3AH
指令執行結果:(A)=3AHd)除8位立即數外,MCS-51指令系統中還有一條16位立即尋址指令,即:MOVDPTR,#data16,其功能是把16位立即數送數據指針DPTR。
例:MOVDPTR,#1000H;指令功能:將程序存儲器中某單元的內容1000H(立即數)送DPTR中
MOVP1,#55H ;將立即數55H送P1口
MOV 20H,#55H ;將立即數55H送20H單元
MOV R0,#20H;將立即數20H送寄存器R0(5)變址尋址方式
a)變址尋址用于訪問程序存儲器中的常數或數據表格。變址尋址即是以DPTR或PC作為基址寄存器,以累加器A為變址寄存器,并以兩者的內容相加形成16位地址作為目的操作數地址,以達到訪問程序存儲器中的常數或數據表格的目的。
b)尋址范圍:程序存儲器空間。
c)指令數目:三條,均為一字節指令
MOVCA,@A+DPTR;指令執行過程:A←((A)+(DPTR))
指令執行結果:(A)=((A)+(DPTR))
MOVCA,@A+PC;指令執行過程:A←((A)+(PC))指令執行結果:(A)=((A)+(PC))
JMP@A+DPTR
指令執行過程:PC←((A)+(DPTR))指令執行結果:(PC)=((A)+(DPTR))
d)注意:三條指令中A的內容均為8位二進制無符號數。
(6)位尋址方式
a)位尋址即對二進制數據位進行尋址。
b)尋址范圍:
1)、內部RAM中的位尋址區(單元地址20H~2FH),128個位,位地址是00H~7FH。位地址區中的位有兩種表示方法:
直接使用位地址表示;單元地址加位數表示例:MOVC,20H;將位地址為20H的位狀態傳送給累加位C。
例:MOVC,24H.0;將位地址為20H的位狀態傳累加位C。例:SETB3DH;將內部RAM位尋址區中的3DH位置1。假設內部RAM27H單元的內容是00H,執行SETB3DH后,由于3DH對應內部RAM27H的第5位,因此該位變為1,也就是27H單元的內容變為20H。該指令的執行過程如圖所示。
2)、專用寄存器的可尋址位可供位尋址的專用寄存器有11個,PSW,IPIE,PO,P1,P2,P3,SCON,A,TCON,B,實有可尋址位83位。專用寄存器的可尋址位有四種表示方法:
直接使用位地址表示例:MOVC,D5H;將PSW中位地址為D5H的位狀態傳給累加位C
單元地址加位數表示例:MOVC,D0H.5;將PSW中位地址為D5H的位狀態傳給累加位C
位名稱表示例:MOVC,F0;將PSW中位地址為D5H的位狀態傳給累加位C
專用寄存器符號加位數表示例:MOVC,PSW.5;將PSW中位地址為D5H的位狀態傳給累加位C(7)相對尋址方式
a)相對尋址是為解決程序轉移而設置的,為轉移指令所用。
相對尋址是將程序計數器PC的當前值與指令中給出的地址偏移量(rel)相加,其和為轉移指令的目的地址。注意:PC當前值是指執行完該轉移指令后的PC值,即轉移指令的PC值加上轉移指令的字節數。轉移指令轉移到的目的地址=轉移指令PC當前值+偏移量rel=轉移指令首地址+轉移指令字節數+rel。偏移量rel是一個帶符號的8位二進制補碼數,所能表示數的范圍為-128~+127。
b)尋址范圍:程序存儲器空間具體地說,相對轉移是以轉移指令所在地址為基點,向前(地址增加方向)最大可轉移(127+轉移指令字節數)個單元地址,向后(地址減少方向)最大可轉移(128-轉移指令字節數)個單元地址。3.380C51單片機指令分類介紹
MCS-51單片機指令系統包括111條指令,按功能可以劃分為以下5類:數據傳送類指令(29條);
算術運算類指令(24條);邏輯運算類指令(24條);控制轉移類指令(17條);位操作類指令(17條);3.3.1數據傳送類指令
a)指令數目:29條;
b)指令通用格式:助記符操作碼目的操作數,源操作數;
c)指令功能:數據傳送,屬于數據復制性質;
d)助記符類型(8種):
MOV,MOVC,MOVX
XCH,XCHD,SWAP,PUSH,POPe)尋址方式源操作數:寄存器,寄存器間接、直接、立即、變址尋址;目的操作數:寄存器,寄存器間接、直接尋址1、內部RAM數據傳送指令組
a)立即數傳送指令指令格式相應操作操作結果說明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;指令執行后(A)=20H例:MOV20H,#20H;指令執行后(20H)=20H例:MOVSP,#60H;指令執行后(SP)=60H例:MOVB,#30H;指令執行后(B)=30H例:MOVR1,#20H;指令執行后(R1)=20H例:MOVR0,#20H;指令執行后(R0)=20HMOV@R0,#30H;指令執行后((R0))=30H或(20H)=30H例:MOVDPTR,#1020H;指令執行后(DPTR)=1020H;(DPH)=10H,(DPL)=20H
本指令是三字節指令,第一個字節是操作碼信息,第二、第三字節分別是操作數(立即數)的高、低8位信息,其二進制目標代碼存放格式如下:操作碼10010000程序存儲器立即數高8位(DPH)00010000立即數低8位(DPL)00100000
b)內部RAM單元之間的數據傳送指令指令格式相應操作操作結果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;指令執行后(30H)=(20H)例:MOVP1,20H;指令執行后(P1)=(20H)例:MOVP2,P0;指令執行后(P2)=(P0)例:MOV40H,P3;指令執行后(40H)=(P3)例:MOV0A0H,R7;指令執行后(P2)=(R7)例:MOVPSW,R1;指令執行后(PSW)=(R1)例:MOVR2,20H;指令執行后(R2)=(20H)例:MOVR3,B;指令執行后(R3)=(B)例:MOV40H,@R0;指令執行后(40H)=((R0))例:MOVP0,@R1;指令執行后(P0)=((R1))例:MOV@R0,0A0H;指令執行后((R0))=(P2)例:MOV@R1,30H;指令執行后((R1))=(30H)
c)通過累加器的數據傳送指令指令格式相應操作操作結果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;
指令執行后(A)=(R0)例:MOVR3,A;指令執行后(R3)=(A)例:MOVA,B;
指令執行后(A)=(B)例:MOVA,40H;指令執行后(A)=(40H)例:MOVPSW,A;指令執行后(PSW)=(A)例:MOV60H,A;指令執行后(60H)=(A)例:MOVA,@R0;指令執行后(A)=((R0))例:MOV@R1,A;指令執行后((R1))=(A)(3)外部RAM數據傳送指令組指令格式相應操作操作結果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單元的內容20H送至A中。
MOVDPTR,#2000H;外部RAM2000H單元地址作為16位立即數送數據指針DPTRMOVXA,@DPTR;外部RAM2000H單元的內容20H送A
(A)=((DPTR))=(2000H)=20H例:將累加器A中的內容40H送至外部RAM4000H單元中。
MOVDPTR,#4000H;外部RAM4000H單元地址作為16位立即數送數據指針DPTRMOVX@DPTR,A;A的內容40H送外部RAM4000H單元((DPTR))=(4000H)=(A)=40H例:將外部RAM0050H單元的內容20H送至A中。
a)MOVDPTR,#0050H;外部RAM0050H單元地址作為16位立即數送數據指針DPTRMOVXA,@DPTR;外部RAM0050H單元的內容20H送A
(A)=((DPTR))=(2000H)=20Hb)MOVR0,#50H;外部RAM0050H單元地址作為8位立即數送間址寄存器R0MOVXA,@R0;外部RAM0050H單元的內容20H送A
(A)=((R0))=(50H)=20H例:將累加器A中的內容40H送至外部RAM0050H單元中。
a)MOVDPTR,#0050H;外部RAM0050H單元地址作為16位立即數送數據指針DPTR
MOVX@DPTR,A;A的內容40H送外部RAM0050H單元((DPTR))=(0050H)=(A)=40Hb)MOVR1,#50H;外部RAM0050H單元地址作為8位立即數送間址寄存器R1MOVX@R1,A;A的內容40H送外部RAM0050H單元((R1))=(50H)=(A)=40H例:將內部RAM60H單元的內容40H送至外部RAM4000H單元中。
MOVA,60H;將60H單元的內容40H先送A中,(A)=40HMOVDPTR,#4000H;外部RAM4000H單元地址送DPTRMOVX@DPTR,A;A的內容40H送外部RAM4000H單元((DPTR))=(4000H)=(A)=40H例:將外部RAM4000H單元的內容40H送至內部RAM60H單元中。
MOVDPTR,#4000H;外部RAM4000H單元地址送DPTRMOVXA,@DPTR;外部RAM4000H單元的內容40H送A
(A)=((DPTR))=(4000H)==40HMOV60H,A;將A的內容40H送60H單元,(60H)=40H例:將外部RAM4000H單元內容40H送至外部RAM0050H單元中。
MOVDPTR,#4000H;外部RAM4000H單元地址送DPTRMOVXA,@DPTR;外部RAM4000H單元的內容40H送A
(A)=((DPTR))=(4000H)=40HMOVR0,#50H;外部RAM0050H單元地址送間址寄存器R0MOVX@R0,A;外部RAM(0050H)=(A)=40H例:將內部RAM60H單元內容40H送至內部RAM50H單元中。
a)MOV50H,60H;內部RAM60H單元內容40H送至內部RAM50H單元中,(50H)=(60H)=40Hb)MOVA,60H;先將內部RAM60H單元內容40H送A,(A)=40HMOV50H,A;再將A的內容送內部RAM50H單元,(50H)=40H注意:
1)外部RAM與外部RAM單元之間、外部RAM與內部RAM單元之間的數據傳送必須采用寄存器間接尋址的方式,而且必須通過累加器A進行;
2)MCS-51指令系統中沒有專用的存儲器讀寫指令,實際上外部數據存儲器數據傳送指令就是外部RAM的讀寫指令;
3)內部RAM單元之間的數據傳送可有多種尋址方式。(4)程序存儲器數據傳送指令組程序存儲器數據傳送指令組既可用于內部程序存儲器,也可用于外部程序存儲器。程序存儲器數據傳送指令組的指令只有兩條,均為單字節指令,采用變址尋址方式。數據只能從程序存儲器單向讀出,而且也必須通過累加器A進行傳送。
MOVCA,@A+DPTR;
MOVCA,@A+PC
這兩條指令用于訪問程序存儲器中的數據表格,因此也稱之為查表指令。其功能非常重要,將在第四章匯編語言程序設計中講解。(5)數據交換指令組數據交換主要在內部RAM單元與A之間、A的高、低4位之間進行,有整字節和半字節兩種交換。指令類型指令格式相應操作整字節交換XCHA,
Rn(A)?(Rn)XCHA,direct(A)?(direct)XCHA,@Ri(A)?((Ri))半字節交換XCHDA,@Ri(A)3~0?((Ri))3~0A高低半字節交換SWAPA(A)3~0?(A)7~4例:假設(A)=38H,(R0)=54H,執行指令XCHA,R0;結果為(A)=54H,(R0)=38H。例:假設(A)=88H,(30H)=45HH,執行指令XCHA,30H;
結果為(A)=45H,(30H)=88H。例:假設(A)=34H,(R1)=50H,(50H)=56H,執行指令XCHA,@R1;
結果為(A)=56H,((R1))=(50H)=34H。例:假設(A)=34H,(R1)=50H,(50H)=56H,執行指令XCHDA,@R1;
結果為(A)=36H,((R1))=(50H)=54H。例:假設(A)=34H,執行指令SWAPA;結果為(A)=43H。思考題:分析下列程序段執行的過程及結果:假設內部RAM2AH、2BH單元中連續存放有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;程序段執行后的最終結果:(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程序段執行后的最終結果:(2AH)=a0a1
;(2BH)=a2a3
;(A)=a2a3
;(6)堆棧操作指令組堆棧操作指令組只有兩條指令:進棧指令和出棧指令。
a)進棧指令:PUSHdirect;功能:為內部RAM低128單元或專用寄存器內容送至棧頂單元。
指令操作過程:SP←(SP)+1;(SP)←(direct)
b)出棧指令:POPdirect;
功能:棧頂單元內容送內部RAM低128單元或專用寄存器。
指令操作過程:direct←((SP));(SP)←(SP)-1
注意:進棧指令和出棧指令均采用寄存器間接尋址方式,間址寄存器是SP,例:將片外RAM2500H單元的內容88H送到片內RAM40H單元,MOVDPTR,#2500H;(DPTR)=2500HMOVXA,@DPTR;(A)=((DPTR))=88HMOVSP,#60H;(SP)=60HPUSHACC;(SP)=61H,(61H)=88HPOP40H;(40H)=88H,(SP)=60H例:分析以下程序段的執行結果
MOVSP,#60H;(SP)=60HMOVA,#30H;(A)=30HMOVB,#40H;(B)=40HPUSHACC;
PUSHBPOPDPH;
POPDPL;執行結果:(DPH)=
(DPL)=例:單片機應用系統程序設計時,經常需要用到中斷服務程序和各類子程序,在執行中斷服務程序和子程序前,常常需要把程序狀態寄存器PSW、累加器A、數據指針DPTR的內容保護起來(現場進棧保護),在中斷服務程序和子程序執行結束之前,再恢復它們的內容(現場出棧恢復)。以下程序段可實現上述功能。
MOVSP,#60H;
PUSHPSW;
PUSHACC;
PUSHDPL;
PUSHDPH;
…………………………
POPDPH;
POPDPL;
POPACC;
POPPSW;注意:堆棧深度、堆棧平衡,數據進棧、出棧的先后次序。3.3.2算術運算類指令
a)指令數目:24條;
b)指令通用格式:助記符操作碼目的操作數,源操作數;
c)指令功能:數據算術運算(加減乘除),此類指令對程序狀態字PSW的進位位(CY),輔助進位位(AC),溢出位(OV)三種標志位有影響,即對它們自動置位或復位,但是,加1和減1指令不影響這些標志;
d)助記符類型(8種):
ADD、ADDC、SUBB、INC、DEC、DA、MUL、DIVe)注意:算術運算類指令都是針對8位二進制無符號數的。(1)加法指令組指令格式相應操作操作結果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中的數與源操作數所指出的內容相加,其相加結果仍存在A中。
b)8位二進制數加法運算指令的一個加數總是累加器A。
c)運算影響PSW的位狀態相加過程中,若位3有進位,則AC置1,否則,AC清0,若位7有進位,則CY置1,否則,CY清0。
d)、對于無符號數相加,若CY置位,說明和產生溢出,即大于255。
e)、對于有符號數相加,當位6或位7之中只有一位進位時,溢出標志位OV置位,說明和產生了溢出,結果出錯。
OV位只對有符號數加法有意義,對于無符號數加法無意義。
溢出表達式:OV=D6cy⊕D7cyD6cy:位6向位7的進位
D7cy:位7向cy的進位例:假設(A)=C2H,(R0)=A9H,執行ADDA,R011000010
+10101001
1←01101011
OV=D6cy⊕D7cy=0⊕1=1
若C2H,A9H為無符號數,則(A)=6BH,(AC)=0,(CY)=1,則表示溢出,結果大于255。若C2H,A9H為有符號數,則OV=1,表示有溢出,結果出錯,因為兩個負數相加不可能得到正數的和。例:假設(A)=78H,(10H)=64H,執行指令ADDA,10H,求兩無符號數之和,并說明PSW的有關標志位狀態。
01111000
+)0110010011011100PSW:OV=D6cy⊕D7cy=1⊕0=1,CY=0,AC=0。練習題:(A)=53H,(R0)=FCH,執行指令:ADDA,R0
(2)帶進位加法指令組指令格式相應操作操作結果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)把源操作數所指示的內容和A中的內容及進位標志CY相加,結果存入A中。運算前一個加數必定在A中,運算后和存于A中。
b)此類指令運算結果同樣對PSW中相關位有影響,影響規則與加法指令組相同。
c)它一般用于多字節數的加法運算,低字節相加的和可能產生進位,可通過帶進位加法指令將低字節的進位加到高字節上去,高字節求和時,必須使用帶進位的加法指令。例:假設(A)=AEH,(20H)=81H,(CY)=1,求兩數之和,及PSW相關位內容,執行指令ADDCA,20H。
1010111010000001
+)11←00110000OV=D6cy⊕D7cy=0⊕1=1;CY=1AC=1(A)=30H練習題:假設(A)=85H,(20H)=FFH,CY=1求兩數之和,及PSW相關位內容,執行指令ADDCA,20H。(3)帶減位加法指令組指令格式相應操作操作結果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中的內容和源操作數所指示的內容及進位標志CY相減,結果存入A中。運算前被減數必定在A中,運算后差存于A中。
b)此類指令運算結果同樣對PSW中相關位有影響,影響規則與加法指令組相同。其中,OV位只對有符號數減法有意義。
c)減法運算只有帶借位減法指令,而沒有不帶借位減法指令。如需進行不帶借位的減法運算,只需在用SUBB指令前先用CLRC指令把CY清0即可。例:假設(A)=C9H,(R2)=54H,(CY)=1,求兩數之差,及PSW相關位內容,執行指令SUBBA,R2。
11001001
01010100
-)101110100
OV=D6cy⊕D7cy=1⊕0=1
若C9H,54H為無符號數,則由于CY=0,無溢出,結果正確。若C9H,54H為有符號數,則由于OV=1,有溢出,結果出錯。
練習題:假設(A)=DBH,(R4)=73H,(CY)=1,求兩數之差,及PSW相關位內容,執行指令SUBBA,R4。(4)加1指令組指令格式相應操作操作結果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)將操作數所指定單元或寄存器中的內容加1,其結果送回原操作數單元。
b)此組指令的操作不影響PSW的狀態。
例:假設(A)=FFH,(DPTR)=10FFH,(CY)=0,執行指令:
INCA;(A)=00H,(CY)=0INCDPTR;(DPTR)=1100H;(CY)=0(5)減1指令組指令格式相應操作操作結果DECAA←(A)-1(A)=(A)-1DECRnRn←(Rn)-1(Rn)=(Rn)-1DECdirectdirect←(direct)-1(direct)=(direct)-1DEC@Ri(Ri)←((Ri))-1((Ri))=((Ri))-1
a)將操作數所指定單元或寄存器中的內容減1,其結果送回原操作數單元。
b)此組指令的操作不影響PSW的狀態。
c)沒有DPTR減1指令。例:假設(40H)=00H,(R1)=50H,(50H)=60H,(CY)=1執行指令:DEC40H;(40H)=0FFH,(CY)=1DEC@R1;((R1))=(50H)=5FH,(CY)=1例:內部RAM40H和41H單元分別存放兩個8位二進制無符號加數,求兩數相加之和,和存放在內部RAM42H單元中。假設兩數之和仍是8位二進制數。解:例:內部RAM40H和41H單元分別存放兩個8位二進制無符號加數,求兩數相加之和,和存放在內部RAM42H單元中。假設兩數之和仍是8位二進制數。(注意比較兩種編程方法的優劣性)解(1)MOVA,40H;(A)=(40H)
ADDA,41H;(A)=(40H)+(41H)
MOV42H,A;(42H)=(40H)+(41H)(2)MOVR0,#40H;設置數據指針,(R0)=40HMOVA,@R0;取第一個加數,(A)=(40H)
INCR0;修改數據指針,(R0)=41HADDA,@R0;兩數相加(A)=(40H)+(41H)
INCR0;修改數據指針,(R0)=42HMOV@R0,A;存兩數和(42H)=(40H)+(41H)例:兩個三字節二進制無符號數相加,被加數放在內部RAM20H~22H單元(低字節存放在低地址單元,高字節存放在高地址單元,即低位在前,高位在后),加數放在2AH~2CH單元,和放在20H~22H單元,最高位如有進位,則放在23H單元中。解:數據類型(二、十進制數,有、無符號數);數據結構(升、降序排列)被加數(N1)加數(N2)和(N3)20H單元低字節(8位)2AH單元低字節(8位)20H單元低字節(8位)21H單元中字節(8位)2BH單元中字節(8位)21H單元中字節(8位)22H單元高字節(8位)2CH單元高字節(8位)22H單元高字節(8位)23H單元進位位被加數(N1)高字節(8位)中字節(8位)低字節(8位)加數(N2)高字節(8位)中字節(8位)低字節(8位)被加數N1高字節(8位)中字節(8位)低字節(8位)加數N2高字節(8位)中字節(8位)低字節(8位)
+)進位位(CY)進位位(CY)進位位(CY)
和N3進位高字節(8位)中字節(8位)低字節(8位)
MOVA,20H;(A)=被加數N1低字節
ADDA,2AH;(A)=被加數N1低字節+加數N2低字節
低字節和的進位在CY中
MOV20H,A;(20H)=和N3低字節
MOVA,21H;(A)=被加數N1中字節
ADDCA,2BH;(A)=被加數N1中字節+加數N2中字節+
低字節和的進位,中字節和的進位在CY中
MOV21H,A;(21H)=和N3中字節
MOVA,22H;(A)=被加數N1高字節
ADDCA,2CH;
MOV22H,A;(22H)=和N3高字節
MOVA,#00H;
ADDCA,#00H;高字節和的進位位處理
MOV23H,A;保存處理后的高字節和的進位思考題:
1)如果N1、N2、N3的數據結構為高字節存放在低地址單元,低字節存放在高地址單元,應如何修改程序?
2)上述程序,如果利用數據指針,采用寄存器間接尋址的方式,應如何修改程序?思考題:1)被加數(N1)高字節(8位)中字節(8位)低字節(8位)加數(N2)高字節(8位)中字節(8位)低字節(8位)解:MOVA,22H;(A)=被加數N1低字節
ADDA,2CH;(A)=被加數N1低字節+加數N2低字節低字節和的進位在CY中
MOV22H,A;(22H)=和N3低字節
MOVA,21H;(A)=被加數N1中字節被加數(N1)加數(N2)和(N3)20H單元高字節(8位)2AH單元高字節(8位)20H單元高字節(8位)21H單元中字節(8位)2BH單元中字節(8位)21H單元中字節(8位)22H單元低字節(8位)2CH單元低字節(8位)22H單元低字節(8位)1FH單元進位位
ADDCA,2BH;(A)=被加數N1中字節+加數N2中字節+
低字節和的進位,中字節和的進位在CY中
MOV21H,A;(21H)=和N3中字節
MOVA,20H;(A)=被加數N1高字節
ADDCA,2AH;(A)=被加數N1高字節+加數N2高字節+
中字節和的進位,高字節和的進位在CY中
MOV20H,A;(20H)=和N3高字節
ADDCA,#00H;高字節和的進位位處理
MOV1FH,A;保存處理后的高字節和的進位思考題:2)解:MOVR0,#20H;設置被加數N1數據指針,(R0)=20HMOVR1,#2AH;設置加數N2數據指針,(R1)=2AHMOVA,@R0;取被加數N1低字節,(A)=(20H)
ADDA,@R1;N1低字節和N2低字節相加
MOV@R0,A;和的低字節存于20HINCR0;修改N1數據指針,(R0)=21HINCR1;修改N2數據指針,(R1)=2BHMOVA,@R0;取被加數N1中字節,(A)=(21H)
ADDCA,@R1;N1、N2中字節、低字節進位相加
MOV@R0,A;和的中字節存于21HINCR0;修改N1數據指針,(R0)=22H
INCR1;修改N2數據指針,(R1)=2CHMOVA,@R0;取被加數N1高字節,(A)=(22H)
ADDCA,@R1;N1、N2高字節、中字節進位相加
MOV@R0,A;和的高字節存于22HADDCA,#00H;高字節和的進位位處理
INCR0;
MOV@R0,A;保存處理后的高字節和的進位
思考題:
3)上述程序,如果改變N1、N2、N3的數據結構(高字節存放在低地址單元,低字節存放在高地址單元),應如何修改程序?被加數(N1)加數(N2)和(N3)20H單元高字節(8位)2AH單元高字節(8位)20H單元高字節(8位)21H單元中字節(8位)2BH單元中字節(8位)21H單元中字節(8位)22H單元低字節(8位)2CH單元低字節(8位)22H單元低字節(8位)1FH單元進位位思考題:3)解:MOVR0,#22H;設置被加數N1數據指針,(R0)=22HMOVR1,#2CH;設置加數N2數據指針,(R1)=2CHMOVA,@R0;取被加數N1低字節,(A)=(22H)
ADDA,@R1;N1低字節和N2低字節相加
MOV@R0,A;和的低字節存于22HDECR0;修改N1數據指針,(R0)=21HDECR1;修改N2數據指針,(R1)=2BH
MOVA,@R0;取被加數N1中字節,(A)=(21H)
ADDCA,@R1;N1、N2中字節、低字節進位相加
MOV@R0,A;和的中字節存于21HDECR0;修改N1數據指針,(R0)=20HDECR1;修改N2數據指針,(R1)=2AHMOVA,@R0;取被加數N1高字節,(A)=(20H)
ADDCA,@R1;N1、N2高字節、中字節進位相加
MOV@R0,A;和的高字節存于20HADDCA,#00H;高字節和的進位位處理
DECR0;
MOV@R0,A;保存處理后的高字節和的進位(6)乘除指令組
a)乘法指令
MULAB1)實現兩個8位無符號二進制數的乘法操作,被乘數在A中,乘數在B中,乘積為16位,高8位送B,低8位送A。
2)此指令影響PSW的狀態,CY位總被清0,當乘積大于255,則OV=1,否則清0。
例:(A)=4EH,(B)=5DH,執行指令MULAB
01001110
×)010111011110001010110
∴(B)=1CH(A)=56H,OV=1,CY=0
b)乘法指令DIVAB1)實現兩個8位無符號二進制數除法,被除數在A,除數在B,A←商,B←余數。
2)此指令影響PSW位狀態,CY位總被清0。當除數為0(B=0)OV=1,表示除法沒有意義。例:(A)=11H,(B)=04H,執行指令DIVAB
其結果(A)=01H,B=1,CY=OV=0(7)十進制調整指令DAA
指令功能:用于對BCD碼十進制數加法運算的結果進行修正。
a)十進制調整問題指令系統中,只有針對二進制數的加法指令(ADD、ADDC),而沒有專門用于十進制數(BCD碼)的加法指令,因此,十進制數(BCD碼)的加法運算只能借助于二進制數的加法指令,但二進制數加法指令不能完全適用于十進制數(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位二進制數共有16個編碼,但BCD碼只用了其中10個(0000~1001),剩下6個(1010~1111)沒用,為無效碼。
在BCD碼加法運算中,凡結果進入或者跳過無效編碼區時,其結果就是錯誤的。
c)調整方法:
1)1位BCD碼加法運算出錯調整
1位BCD碼加法運算出錯情況有兩種:相加結果大于9,進入無效編碼區;相加結果有進位(AC),跳過無效編碼區。以上兩種情況均使相加結果比正確值小6,調整方法就是加6。
6+3=98+7=158+9=17011010001000
+)0011
+)0111
+)1001100111111←0001
+)0110(6)
+)0110(6)
1←0101(15)1←0111(17)
2)2位(字節)BCD碼加法運算出錯調整
2位(字節)BCD碼加法運算出錯情況有三種:相加結果高4位或低4位大于9,進入無效編碼區;相加結果高4位或低4位產生進位,跳過無效編碼區;相加結果高4位為9,低4位大于9,這樣低位加6修正時產生的進位會使高位大于9,進入無效編碼區。A的低4位大于9或(AC)=1,則進行低4
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物業客戶滿意度提升培訓
- 精濁中醫護理查房
- 《家電維護小管家》第二課時(教案)-四年級勞動北師大版
- 兩位數除以一位數(商是兩位數)(教學設計)-2023-2024學年三年級下冊數學人教版
- 九年級物理上冊 第7章 第三節 電磁鐵教學設計 (新版)教科版
- 《小數的初步認識》(教學設計)-2024-2025學年三年級上冊數學人教版
- 2024年九年級語文下冊 第二單元 8 蒲柳人家教學設計 新人教版
- 2024-2025學年高中歷史 專題五 走向世界的資本主義市場 二 血與火的征服與掠奪(1)教學教學設計 人民版必修2
- 一年級體育上冊 第一課集隊、游戲教學設計
- 2023八年級歷史下冊 第四單元 民族團結與祖國統一第12課 民族大團結教學設計 新人教版
- 資源環境信息系統(gis)課件
- 特洛伊戰爭(英文版)
- 本科大學生勞動教育理論與實踐教程第三章 教學課件
- 近代以來廣州外貿產業的發展歷程
- 29《馬說》2022中考語文文言文閱讀復習精選真題匯編(原卷版+解析版)
- DBJ04-T 410-2021城市停車場(庫)設施配置標準
- 車站主體結構模板支架專項施工方案--終稿(專家意見修改的)-副本
- 保潔崗位培訓
- 小學美術國測(國家義務教育質量監測)復習內容
- 麗聲北極星自然拼讀繪本第二級 Pad, Pad, Pad! 課件
- meta分析范文展示
評論
0/150
提交評論