單片機原理及應用李林功著第03章 指令系統(tǒng)_第1頁
單片機原理及應用李林功著第03章 指令系統(tǒng)_第2頁
單片機原理及應用李林功著第03章 指令系統(tǒng)_第3頁
單片機原理及應用李林功著第03章 指令系統(tǒng)_第4頁
單片機原理及應用李林功著第03章 指令系統(tǒng)_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第03章指令系統(tǒng)與匯編語言程序設計3.1指令格式 3.2尋址方式 3.3數(shù)據(jù)傳送類指令 3.4算術運算類指令

3.5邏輯運算類指令 3.6控制轉移類指令 3.7位操作類指令

MCS-51單片機指令系統(tǒng)1.按指令所占的字節(jié)數(shù)可分為:(1)單字節(jié)指令(49條)(2)雙字節(jié)指令(46條)(3)三字節(jié)指令(16條)2.按指令的執(zhí)行時間可分為:(1)單周期指令(65條)(2)雙周期指令(44條)(3)四周期指令(2條)3、按指令的功能可分為:(1)數(shù)據(jù)傳送類指令(29條)(2)算術運算類指令(24條)(3)邏輯運算類指令(24條)(4)控制轉移類指令(17條)(5)位操作類指令(17條)3.1MCS-51單片機指令格式 [標號:]操作碼助記符[目的操作數(shù)][,源操作數(shù)][;注釋]例如:AA:ADDA,﹟10H;將累加器A的內容與10H相加,結果存入累加器A AA為標號,是這條指令的標志,其值是該條指令的首地址;

ADD為操作碼,說明要進行加法運算;目的操作數(shù)為累加器A;源操作數(shù)為﹟10H;“;”后面為注釋部分。

MCS-51單片機指令中常用的符號規(guī)定:1)A(ACC)——累加器。2)B——專用寄存器,用于乘法和除法指令中。3)C——進位標志或進位位,或布爾處理機中的累加位(器)4)DPTR——數(shù)據(jù)指針,可用作16位地址寄存器。5)Rn(n=0~7)——當前寄存器組的8個工作寄存器R0~R7,由PSW中的RS1、RS0決定當前使用的寄存器組。6)Ri(i=0或1)——可用于間接尋址的兩個寄存器R0、R1。7)#data——8位立即數(shù)8)#data16——16位立即數(shù)。9)rel——以補碼形式表示的8位相對偏移量,范圍為-128~127,主要用在相對尋址的指令中。10)addr16和addr11——分別表示16位直接地址和11位直接地址。即存放操作數(shù)的存儲器地址。11)direct——表示內部數(shù)據(jù)存貯器單元的地址或特殊功能寄存器SFR的地址,對SFR而言,既可使用它的物理地址,也可直接使用它的名字。12)bit——表示內部RAM和SFR中的某些具有位尋址功能的位地址。SFR中的位地址可以直接出現(xiàn)在指令中,為了閱讀方便,往往也可用SFR的名字和所在的數(shù)位表示。如:表示PSW中的奇偶校驗位,可寫成D0H,也可寫成PSW.0的形式。13)@——間接尋址中工作寄存器的前綴符號。14)(X)——X單元中的內容。15)((X))——以X單元的內容為地址的存儲器單元內容,即(X)作地址,該地址單元的內容用((X))表示。16)$——當前指令的地址。17)/——“/”表示對該位操作數(shù)取反,但不影響該位的原值。18)→——“→”表示操作流程,將箭尾一方的內容送入箭頭所指的另一方單元中。3.2MCS-51單片機尋址方式1立即數(shù)尋址

立即尋址方式是指操作數(shù)包括在指令字節(jié)中,緊跟在操作碼的后面,作為指令的一部分與操作碼一起存放在程序存儲器中。符號"#"為立即數(shù)前綴【例】:MOVA,#52H;A←52HMOVDPTR,#5678H;DPTR←5678H2寄存器尋址

指令指定寄存器的名字,寄存器的內容為操作數(shù)【例】:MOVA,R0 ;A←(R0)

可用于寄存器尋址的寄存器有: (1)四組工作寄存器R0~R7共32個。 (2)部分特殊功能寄存器A、B、DPTR等。3寄存器間接尋址

指令指定寄存器的名字,寄存器的內容為操作數(shù)的存儲器地址。標志為寄存器名字前加“@”符號。不同的存儲空間要用不同的寄存器,規(guī)定如下:片內(128B)間接用Ri,即@R1,@R0片外(64KB)間接用DPTR,即@DPTR片外(低256B)可用@DPTR或@R1,@R0

注意:寄存器間接尋址方式不能用于對特殊功能寄存器SFR的尋址,堆棧操作(PUSH,POP)為隱含的SP間接尋址?!纠浚篗OVDPTR,#3456H;DPTR←3456HMOVXA,@DPTR;A←((DPTR))

假設(3456H)=99H,指令運行后(A)=99H。4直接尋址指令中直接給出操作數(shù)的存儲器地址,操作數(shù)在存儲器中。

【例】:MOVA,52H ;A←(52H)基址寄存器加變址寄存器的間接尋址

三條變址指令MOVCA,@A+PC;A←((A)+(PC))MOVCA,@A+DPTR;A←((A)+(DPTR))JMP@A+DPTR;PC←(A)+(DPTR)前兩條指令是在程序存儲器中取操作數(shù);第三條指令是要獲得程序的跳轉地址,實現(xiàn)程序的轉移。5變址尋址【例】:MOVA,#22H MOVDPTR,#63A0H MOVCA,@A+DPTR;A←((A)+(DPTR))6相對尋址相對尋址以程序計數(shù)器PC的當前值作為基地址,與指令中給出的相對偏移量rel進行相加,把所得之和作為程序的轉移地址.。在使用相對尋址時要注意以下兩點:

(1)當前PC值是指相對轉移指令的存儲地址加上該指令的字節(jié)數(shù)。(2)偏移量rel是有符號的單字節(jié)數(shù),以補碼表示,其取值范圍是-128~+127(00H~FFH)。 目標地址=當前PC值+rel=指令存儲地址+指令字節(jié)數(shù)+rel【例】:SJMP08H;PC←PC+2+08H

設該指令首地址為2000H,PC+2=2002H。因此程序轉向(PC)+2+rel=2000H+2+08H=200AH單元。7位尋址

位尋址是在指令中直接給出操作數(shù)的位地址。①直接位地址【例】:MOVC,0D5H ;PSW的位5(位地址D5H)②點操作符.【例】:MOVC,PSW.5 MOVC,0D0H.5

③位名稱表示形式【例】:MOVC,F(xiàn)0④用戶位定義

LEDBITP1.1MOVLED,C尋址方式與尋址空間尋址方式利用的變量

尋址空間1立即尋址#data程序存儲器2寄存器尋址R0~R7﹑A﹑B﹑DPTR工作寄存器和部分SFR3寄存器間接尋址@R0﹑@R1﹑SP片內RAM低128B@R0﹑@R1﹑@DPTR片外RAM或外部I/0口4直接尋址direct片內RAM低128B和SFR5變址尋址@A+PC﹑@A+DPTR程序存儲器6相對尋址PC+偏移量程序存儲器相對PC當前值256B7位尋址bit片內位尋址區(qū)和部分SFR存儲空間與尋址方式內部00H~1FH工作寄存器寄存器、直接、間接內部20H~2FH位空間位、直接、間接內部30H~7FH用戶RAM直接、間接內部80H~FFH特殊功能寄存器SFR直接、位(部分)外部RAM間接外部ROM程序存儲器變址、相對3.3數(shù)據(jù)傳送類指令助記符有:MOV,MOVX,MOVC,XCH,XCHD,PUSH,POP,SWAP。格式:MOV[目的操作數(shù)],[源操作數(shù)]功能:目的操作數(shù)←源操作數(shù)中的數(shù)據(jù)源操作數(shù)可以是:A、Rn、direct、@Ri、#data目的操作數(shù)可以是:A、Rn、direct、@Ri注意:一般不影響標志,只有一種堆棧操作可能直接修改程序狀態(tài)字PSW。另外,如果目的操作數(shù)為ACC,將會影響奇偶標志P。指令功能標志位解釋POVACCYMOVA,directA←(direct)√×××直接地址單元地址中的內容送到累加器AMOVA,#dataA←#data√×××立即數(shù)送到累加器A中MOVA,RnA←(Rn)√×××Rn中的內容送到累加器A中MOVA,@RiA←((Ri))√×××Ri內容指向的地址單元中的內容送到累加器A1.以累加器A為目的操作數(shù)的傳送指令(4條)

【例】:設外部RAM(2023H)=0FH,執(zhí)行以下程序段:

MOVDPTR,#2023H;DPTR←2023H MOVXA,@DPTR ;A←((DPTR)) MOV30H,A ;30H←(A) MOVA,#00H ;A←00H MOVX@DPTR,A ;((DPTR))←(A)

程序段執(zhí)行后,(DPTR)=2023H,(30H)=0FH,(A)=00H,(2023H)=00H,表示把片外RAM2023H單元的內容0FH送到內部RAM的30H單元,然后把外部RAM2023H單元和累加器A清0。 若采用R0和R1間接尋址,必須把高8位地址先送到P2口,上述程序段將改為:

MOVP2,#20H ;P2←20H MOVR0,#23H ;R0←23H MOVXA,@R0 ;A←(2023H) MOV30H,A ;30H←(A) MOVA,00H ;A←00H MOVX@R0,A ;2023H←(A)2.以寄存器Rn為目的操作數(shù)的傳送指令(3條)注意:沒有以下指令MOVRn,Rn;MOVRn,@Ri;MOV@Ri,Rn指令功能標志位解釋POVACCYMOVRn,directRn←(direct)××××直接地址單元中的內容送到寄存器Rn中MOVRn,#dataRn←#data××××立即數(shù)送到寄存器Rn中MOVRn,ARn←(A)××××累加器A中的內容送到寄存器Rn中

【例】:設內部RAM(30H)=40H,(40H)=10H,(10H)=00H,(P1)=0CAH,分析以下程序執(zhí)行后,各單元、寄存器、P2口的內容。

MOVR0,#30H ;R0←30H MOVA,@R0 ;A←((R0)) MOVR1,A ;R1←(A) MOVB,@R1 ;B←((R1)) MOV@R1,P1 ;((R1))←(P1) MOVP2,P1 ;P2←(P1) MOV10H,#20H ;(10H)←20H執(zhí)行上述指令后,(R0)=30H;(R1)=(A)=40H;(B)=10H;(40H)=(P1)=(P2)=0CAH;(10H)=20H。3.以直接地址為目的操作數(shù)的傳送指令(5條)注意:MOVdirect1,direct2,翻譯成機器碼時,源地址在前,目的地址在后。例MOV20H,30H翻譯為:853020H指令功能標志位解釋POVACCYMOVdirect,directdirect←(direct)××××直接地址單元中的內容送到直接地址單元MOVdirect,#datadirect←#data××××立即數(shù)送到直接地址單元MOVdirect,Adirect←(A)××××累加器A的內容送到直接地址單元MOVdirect,Rndirect

←(Rn)××××寄存器Rn的內容送到直接地址單元MOVdirect,@Ridirect←((Ri))××××寄存器Ri中的內容指定的存儲單元中的數(shù)據(jù)送到直接地址單元4.以間接地址為目的操作數(shù)的傳送指令(3條)指令功能標志位解釋POVACCYMOV@Ri,direct(Ri)←(direct)××××直接地址單元中的內容送到以Ri中的內容為地址的RAM單元MOV@Ri,#data(Ri)←#data××××立即數(shù)送到以Ri中的內容為地址的RAM單元MOV@Ri,A(Ri)←(A)××××累加器A中的內容送到以Ri中的內容為地址的RAM單元5.查表指令(2條)指令功能標志位解釋POVACCYMOVCA,@A+DPTRA←((A)+(DPTR))√×××DPTR的內容加上A的內容作為存儲器地址,將該地址單元中的內容送到累加器A中MOVCA,@A+PCPC←(PC)+1A←((A)+(PC))√×××PC的內容加上1,再加上A的內容作為存儲器地址,將該地址單元中的內容送到累加器A中

【例】:編一查表程序將內部ROM40H單元內的數(shù)(0~9)的平方存入內部RAM50H單元。

MOVA,40H;40H單元的數(shù)送A MOVDPTR,#TAB;DPTR指向表頭

MOVCA,@A+DPTR ;查表

MOV50H,A;結果存50H SJMP$;等待

TAB:DB0,1,4,9,……81

【例】:編一查表程序將內部RAM40H單元內的數(shù)(0~9)的平方存入內部RAM50H單元。

00219=3^300204=2^200191=1^100180=0^00017SJMP$0016MOV50H,A0014MOVCA,@A+DPTR0012MOVDPTR,#TAB0010MOVA,40H地址……指令……TABROM平方數(shù)據(jù)表50H…………40H2RAM6.累加器A與片外數(shù)據(jù)存儲器的傳送指令(4條)指令功能標志位解釋POVACCYMOVX@DPTR,A(DPTR)←(A)√×××累加器中的內容送到數(shù)據(jù)指針指向的片外RAM地址中MOVXA,@DPTRA←((DPTR))√×××數(shù)據(jù)指針指向的片外RAM地址中的內容送到累加器A中MOVXA,@RiA←((Ri))√×××寄存器Ri指向的片外RAM地址中的內容送到累加器A中MOVX@Ri,A(Ri)←(A)√×××累加器中的內容送到寄存器Ri指向的片外RAM地址中注意:在堆棧指令中只能用ACC,不能用A,屬于直接尋址。7.堆棧操作類指令(2條)指令功能標志位解釋POVACCYPUSHdirectSP←(SP)+1,SP←(direct)××××堆棧指針首先加1,直接尋址單元中的數(shù)據(jù)送到堆棧指針SP所指的單元中POPdirectdirect←(SP),SP←(SP)-1××××堆棧指針SP所指的單元數(shù)據(jù)送到直接尋址單元中,堆棧指針SP減1.

【例】:進入中斷服務程序時,常把程序狀態(tài)寄存器PSW、累加器A、數(shù)據(jù)指針DPTR進棧保護。設當前SP為60H。則程序段

MOVSP,#60H PUSHPSW PUSHACC PUSHDPL PUSHDPH執(zhí)行后,SP內容修改為64H,而61H、62H、63H、64H單元中依次存入PSW、A、DPL、DPH的內容。65H64HDPH63HDPL62HACC61HPSW60H……40HRAMSP堆棧區(qū)

【例】:在中斷服務程序結束之前,用下列程序段恢復數(shù)據(jù)。

POPDPH POPDPL POPACC POPPSW指令執(zhí)行之后,SP內容修改為60H,而64H、63H、62、61H單元的內容依次彈出到DPH、DPL、A、PSW中。保護數(shù)據(jù)時,進棧、出棧的次序一定要符合“先進后出”的原則。8.交換指令(5條)指令功能標志位解釋POVACCYXCHA,Rn(A)←→(Rn)√×××累加器與工作寄存器Rn的內容互換XCHA,@Ri(A)←→((Ri))√×××累加器與工作寄存器Ri所指的存儲單元中的內容互換XCHA,direct(A)←→(direct)√×××累加器與直接地址單元中的內容互換XCHDA,@Ri(A3-0)←→((Ri)3-0)√×××累加器與工作寄存器Ri所指的存儲單元中的內容低半字節(jié)互換SWAPA(A3-0)←→(A7-4)×累加器中的內容高低半字節(jié)互換【例】:設(R0)=30H,(A)=65H,(30H)=8FH執(zhí)行指令:XCHA,@R0 ;(R0)=30H,(A)=8FH, (30H)=65HXCHDA,@R0 ;(R0)=30H,(A)=6FH, (30H)=85HSWAPA ;(A)=56H指令功能標志位解釋POVACCYMOVDPTR,#data16DPH←#dataH,DPL←#dataL××××16位常數(shù)的高8位送到DPH,低8位送到DPL9.16位數(shù)據(jù)傳送指令(1條)

【例】:將片內RAM30H單元與40H單元中的內容互換。 方法1(直接地址傳送法):

MOV31H,30H MOV30H,40H MOV40H,31H SJMP $

方法2(間接地址傳送法):

MOVR0,#40H MOVR1,#30H MOVA,@R0 MOVB,@R1 MOV@R1,A MOV@R0,B SJMP$

方法3(字節(jié)交換傳送法):

MOVA,30H XCHA,40H MOV30H,A SJMP$

方法4(堆棧傳送法):

PUSH30H PUSH40H POP30H POP40H SJMP$3.4算術運算類指令算術運算指令共有24條算術運算主要是執(zhí)行加、減、乘、除法四則運算;加1、減1操作及BCD碼的運算調整利用進位標志C,可進行多字節(jié)無符號整數(shù)運算利用溢出標志,還可以對帶符號數(shù)進行補碼運算除加1、減1指令外,這類指令都對PSW有影響

MnemonicDescriptionByteCycleADDA,RnAddstheregistertotheaccumulator11ADDA,directAddsthedirectbytetotheaccumulator22ADDA,@RiAddstheindirectRAMtotheaccumulator12ADDA,#dataAddstheimmediatedatatotheaccumulator22ADDCA,RnAddstheregistertotheaccumulatorwithacarryflag11ADDCA,directAddsthedirectbytetotheaccumulatorwithacarryflag22ADDCA,@RiAddstheindirectRAMtotheaccumulatorwithacarryflag12ADDCA,#dataAddstheimmediatedatatotheaccumulatorwithacarryflag22SUBBA,RnSubtractstheregisterfromtheaccumulatorwithaborrow11SUBBA,directSubtractsthedirectbytefromtheaccumulatorwithaborrow22SUBBA,@RiSubtractstheindirectRAMfromtheaccumulatorwithaborrow12SUBBA,#dataSubtractstheimmediatedatafromtheaccumulatorwithaborrow221.加法指令(4條)指令功能標志位解釋POVACCYADDA,#dataA←(A)+#data√√√√累加器A中的內容與立即數(shù)#data相加,結果存在A中ADDA,directA←(A)+(direct)√√√√累加器A中的內容與直接地址單元中的內容相加,結果存在A中ADDA,RnA←(A)+(Rn)√√√√累加器A中的內容與工作寄存器Rn中的內容相加,結果存在A中ADDA,@RiA←(A)+((Ri))√√√√累加器A中的內容與工作寄存器Ri所指向地址單元中的內容相加,結果存在A中

各標志位的形成方法:如果位7有進位輸出,則置位CY,否則清CY;如果位3有進位輸出,則置位AC,否則清AC;

OV=CY7⊕CY6。若累加器A中1的個數(shù)為奇數(shù),則P=1,否則,P=0。

CYACF0RS1RS0OV--P【例】:設(A)=85H,(R1)=30H,(30H)=0AFH,執(zhí)行指令:

ADDA,@R1 10000101

+10101111 100110100執(zhí)行結果為:(A)=34H,CY=1,AC=1,OV=1,P=1

對于加法,溢出只能發(fā)生在兩個加數(shù)符號相同的情況。在進行帶符號數(shù)的加法運算時,溢出標志OV=1表示有溢出發(fā)生(即和大于+127或小于~128)。指令功能標志位解釋POVACCYADDCA,directA←(A)+(direct)+(CY)√√√√累加器A中的內容與直接地址單元的內容連同進位位相加,結果存在A中ADDCA,#dataA←(A)+#data+(CY)√√√√累加器A中的內容與立即數(shù)連同進位位相加,結果存在A中ADDCA,RnA←(A)+(Rn)+(CY)√√√√累加器A中的內容與工作寄存器Rn中的內容、連同進位位相加,結果存在A中ADDCA,@RiA←(A)+((Ri))+(CY)√√√√累加器A中的內容與工作寄存器Ri指向的地址單元中的內容、連同進位位相加,結果存在A中2.帶進位加法指令(4條)3.帶借位減法指令(4條)指令功能標志位解釋POVACCYSUBBA,directA←(A)-(direct)-(CY)√√√√累加器A中的內容減去直接地址單元中的內容再減借位位,結果存在A中SUBBA,#dataA←(A)-#data-(CY)√√√√累加器A中的內容減立即數(shù)再減借位位,結果存在A中SUBBA,RnA←(A)-(Rn)-(CY)√√√√累加器A中的內容減工作寄存器中的內容再減借位位,結果存在A中SUBBA,@RiA←(A)-((Ri))-(CY)√√√√累加器A中的內容減工作寄存器Ri指向的地址單元中的內容再減借位位,結果存在A中

在減法運算中CY=1表示有借位,CY=0則無借位。OV=1表明帶符號數(shù)相減時,從一個正數(shù)減去一個負數(shù)結果為負數(shù),或者從一個負數(shù)中減去一個正數(shù)結果為正數(shù)的錯誤情況。在進行減法運算前,如果不知道借位標志位C的狀態(tài),則應先對CY進行清零操作。如果要進行不帶借位減法,只需把CY先清零

【例】: 設(A)=0C9H,(R3)=54H,(CY)=1,執(zhí)行指令:

SUBBA,R3 11001001 -00000001 11001000 -0101010001110100

結果:(A)=74H,Cy=0,AC=0,OV=1,P=0在乘法運算時,如果OV=1,說明乘積大于FFH,否則OV=0,但進位標志位CY總是等于0?!纠浚喝?A)=80H=128,(B)=32H=50,執(zhí)行指令:

MULAB

結果:(B)=19H,(A)=00H,OV=1,CY=04.乘法指令(1條)指令功能標志位解釋POVACCYMULABBA←(A)×(B)√√×√累加器A中的內容與寄存器B中的內容相乘,乘積低8位存在A、高8位存B除法運算總是使進位標志位CY等于0。如果OV=1,表明寄存器B中的內容為00H,那么執(zhí)行結果為不確定值,表示除法有溢出?!纠浚涸O(A)=0BFH,(B)=32H,執(zhí)行指令:

DIVAB結果:(A)=03H,(B)=29H,CY=0,OV=05.除法指令(1條)指令功能標志位解釋POVACCYDIVABA←(A)÷(B)的商B←(A)÷(B)的余數(shù)√√×√累加器A中的內容除以寄存器B中的內容,所得到的商存A,余數(shù)存B中6.加1指令(5條)指令功能標志位解釋POVACCYINCAA←(A)+1××××累加器A中的內容加1,結果存在A中INCdirectdirect←(direct)+1××××直接地址單元中的內容加1,結果送回原地址單元INC@Ri(Ri)←((Ri))+1××××寄存器的內容指向的地址單元中的內容加1,結果送回原地址單元中INCRnRn←(Rn)+1××××寄存器Rn的內容加1,結果送回原地址單元中INCDPTRDPTR←(DPTR)+1××××數(shù)據(jù)指針的內容加1,結果送回數(shù)據(jù)指針中在INCdirect指令中,如果直接地址是I/O口,其功能是先讀入I/O鎖存器的內容,然后在CPU進行加1操作,再輸出到I/O口中,這就是“讀—修改—寫”操作。加1指令不影響標志。如果原寄存器的內容為FFH,執(zhí)行加1后,結果就會是00H。但不會影響標志。減1操作不影響標志位。實現(xiàn)“讀—修改—寫”操作7.減1指令(4條)指令功能標志位解釋POVACCYDECAA←(A)-1××××累加器A中的內容減1,結果送回累加器A中DECdirectdirect←(direct)-1××××直接地址單元中的內容減1,結果送回直接地址單元中DEC@Ri(Ri)←((Ri))-1××××寄存器Ri指向的地址單元中的內容減1,結果送回原地址單元中DECRnRn←(Rn)-1××××寄存器Rn中的內容減1,結果送回寄存器Rn中在進行BCD碼運算時,這條指令總是跟在ADD或ADDC指令之后,其功能是對執(zhí)行加法運算后存于累加器A中的結果進行調整。注意:DAA

只能用于加法運算8.十進制調整指令(1條)指令標志位解釋POVACCYDAA√√√√對累加器A中的BCD碼運算結果進行調整【例】:有兩個BCD數(shù)36與45相加,結果應為BCD碼81,程序如下:

MOVA,#36H ADDA,#45H DAA

加法指令執(zhí)行后得結果7BH;第三條指令對累加器A中的結構進行十進制調整,低4位(為0BH)大于9,因此要加6,最后得到調整的BCD碼為81。3.5邏輯運算類指令邏輯運算指令共有24條有與、或、異或、求反、左右移位、清0等邏輯操作有直接、寄存器和寄存器間址等尋址方式。1.清零指令(1條)指令功能標志位解釋

POVACCYCLRAA←0√×××累加器A中的內容清02.求反指令(1條)指令功能標志位解釋POVACCYCPLAA←()××××累加器A中的內容按位取反

【例】:

MOVA,#04H ;(A)=04RLA ;(A)=08 RRA ;(A)=04邏輯左移一位相當于乘2,邏輯右移一位相當于除2。4邏輯與操作指令(6條)指令功能標志位解釋POVACCYANLA,directA←(A)∧(direct)√×××累加器A中的內容和直接地址單元中的內容執(zhí)行與邏輯操作。結果存在累加器A中ANLA,#dataA←(A)∧#data√×××累加器A的內容和立即數(shù)執(zhí)行與操作。結果存在累加器A中ANLA,RnA←(A)∧(Rn)√×××累加器A的內容和寄存器Rn中的內容執(zhí)行與邏輯操作。結果存在累加器A中ANLA,@RiA←(A)∧((Ri))√×××累加器A的內容和工作寄存器Ri指向的地址單元的內容執(zhí)行與操作。結果存在累加器A中ANLdirect,Adirect←(direct)∧(A)××××直接地址單元中的內容和累加器A的內容執(zhí)行與邏輯操作。結果存在直接地址單元中ANLdirect,#datadirect←(direct)∧#data××××直接地址單元中的內容和立即數(shù)執(zhí)行與邏輯操作。結果存在直接地址單元中5.邏輯或操作指令(6條)指令功能標志位解釋POVACCYORLA,directA←(A)∨(direct)√×××累加器A中的內容和直接地址單元中的內容執(zhí)行邏輯或操作。結果存在累加器A中ORLA,#dataA←(A)∨#data√×××累加器A的內容和立即數(shù)執(zhí)行邏輯或操作。結果存在累加器A中ORLA,RnA←(A)∨(Rn)√×××累加器A的內容和寄存器Rn的內容執(zhí)行邏輯或操作。結果存在累加器A中ORLA,@RiA←(A)∨((Ri))√×××累加器A的內容和工作寄存器Ri指向的地址單元中的內容執(zhí)行邏輯或操作。結果存在累加器A中ORLdirect,Adirect←(direct)∨(A)××××直接地址單元中的內容和累加器A的內容執(zhí)行邏輯或操作。結果存在直接地址單元中ORLdirect,#datadirect←(direct)∨#data××××直接地址單元中的內容和立即數(shù)執(zhí)行邏輯或操作。結果存在直接地址單元中6.邏輯異或操作指令(6條)指令功能標志位解釋POVACCYXRLA,directA←(A)(direct)√×××累加器A中的內容和直接地址單元中的內容執(zhí)行邏輯異或操作。結果存在寄存器A中XRLA,@RiA←(A)((Ri))

√×××累加器A的內容和工作寄存器Ri指向的地址單元中的內容執(zhí)行邏輯異或操作。結果存在累加器A中XRLA,#dataA←(A)#data√×××累加器A的內容和立即數(shù)執(zhí)行邏輯異或操作。結果存在累加器A中XRLA,RnA←(A)(Rn)√×××累加器A的內容和寄存器Rn中的內容執(zhí)行邏輯異或操作。結果存在累加器A中XRLdirect,Adirect←(direct)(A)××××直接地址單元中的內容和累加器A的內容執(zhí)行邏輯異或操作。結果存在直接地址單元中XRLdirect,#datadirect←(direct)#data××××直接地址單元中的內容和立即數(shù)執(zhí)行邏輯異或操作。結果存在直接地址單元中【例】:利用邏輯運算指令,可以模擬各種硬件邏輯電路。如下圖所示的組合邏輯電路,試編寫一程序模擬其功能。設輸入信號放在X、Y、Z單元中,輸出信號放在F單元。參考程序如下:MOVA,X ;A←(X)ANLA,Y ;A←(A)∧(Y)MOVR1,A ;A內容暫存MOVA,Y ;A←(Y)XRLA,Z ;A←(Y)(Z)

CPLA ;A←ORLA,R1 ;得到輸出MOVF,A ;存輸出SJMP$3.6控制轉移類指令控制轉移指令共17條可對64kB程序空間地址單元進行訪問的長調用、長轉移指令,也有可對2kB字節(jié)進行訪問的絕對調用和絕對轉移指令,還有短相對轉移及無條件轉移指令這些指令都不會影響標志位。

1.無條件轉移指令(4條)指令功能標志位解釋POVACCYLJMPaddr16長轉移PC←(PC)+3PC←addr16××××給程序計數(shù)器賦予新值(16位地址)AJMPaddr11絕對轉移PC←(PC)+2,PC10-0←addr11××××程序計數(shù)器賦予新值(11位地址),(PC15-11)不改變SJMPrel短轉移PC←(PC)+2+rel××××當前程序計數(shù)器先加上2再加上偏移量賦予程序計數(shù)器JMP@A+DPTR間接轉移PC←(A)+(DPTR)××××累加器的值加上數(shù)據(jù)指針的值賦予程序計數(shù)器2.條件轉移指令(8條)指令功能標志位解釋POVACCYJZrel(A)=0,PC←(PC)+2+rel××××若累加器中的內容為0,則轉移到偏移量所指向的地址,否則程序順序執(zhí)行JNZrel(A)≠0,PC←(PC)+2+rel××××若累加器中的內容不為0,則轉移到偏移量所指向的地址,否則程序順序執(zhí)行CJNEA,direct,rel(A)≠(direct),PC←(PC)+3+rel×××√若累加器中的內容不等于直接地址單元的內容,則轉移到偏移量所指向的地址,否則程序順序執(zhí)行CJNEA,#data,rel(A)≠#data,PC←(PC)+3+rel×××√累加器中的內容不等于立即數(shù),則轉移到偏移量所指向的地址,否則程序順序執(zhí)行CJNERn,#data,rel(Rn)≠#data,PC←(PC)+3+rel×××√工作寄存器Rn中的內容不等于立即數(shù),則轉移到偏移量所指向的地址,否則程序順序執(zhí)行CJNE@Ri,#data,rel((Ri))≠#data,PC←(PC)+3+rel×××√工作寄存器Ri指向地址單元中的內容不等于立即數(shù),則轉移到偏移量所指向的地址,否則程序順序執(zhí)行DJNZRn,relRn←(Rn)-1,(Rn)≠0,PC←(PC)+2+rel××××工作寄存器Rn減1不等于0,則轉移到偏移量所指向的地址,否則程序順序執(zhí)行DJNZdirect,reldirect←(direct)-1,(direct)≠0,PC←(PC)+3+rel××××直接地址單元中的內容減1不等于0,則轉移到偏移量所指向的地址,否則程序順序執(zhí)行

【例】:將外部數(shù)據(jù)RAM中地址單元在256字節(jié)范圍內的一個數(shù)據(jù)塊傳送到內部數(shù)據(jù)RAM中,兩者的首地址分別為DATA1和DATA2,遇到傳送的數(shù)據(jù)為0時停止。 解:外部RAM向內部RAM的數(shù)據(jù)傳送一定要借助于累加器A,利用累加器判零轉移指令正好可以判別是否要繼續(xù)傳送或者終止。

MOVR0,#DATA1 ;外部數(shù)據(jù)塊首地址

MOVR1,#DATA2 ;內部數(shù)據(jù)塊首地址

LOOP:MOVXA,@R0 ;外部數(shù)據(jù)送給A HERE:JZHERE ;為0則終止

MOV@R1,A ;不為0傳送內部RAM數(shù) 據(jù)

INCR0 ;修改地址指針

INCR1 SJMPLOOP ;繼續(xù)循環(huán)3.子程序調用指令(4條)指令功能標志位解釋POVACCYLCALLaddr16PC←(PC)+3,SP←(SP)+1,(SP)←(PC7-0),SP←(SP)+1,(SP)←(PC15-8),(PC)←addr16××××長調用指令,可在64kB空間調用子程序。先保護PC當前值,然后轉移到目標地址ACALLaddr11PC←(PC)+2,SP←(SP)+1,(SP)←(PC7-0),SP←(SP)+1,(SP)←(PC15-8),(PC10-0)←addr11××××絕對調用指令,可在2kB空間調用子程序RETPC15-8

←(SP),SP←(SP)-1,PC7-0

←(SP),SP←(SP)-1××

溫馨提示

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

評論

0/150

提交評論