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

下載本文檔

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

文檔簡介

第4章STC單片機CPU指令系統(tǒng)何賓2015.02STC單片機CPU尋址模式STC單片機CPU指令集本章主要內(nèi)容STC單片機CPU尋址模式一條機器指令包含兩部分,即:操作碼和操作數(shù)。操作碼的目的是要對被操作對象進行處理。典型地,對被操作對象實現(xiàn)邏輯與或非運算、加減乘除運算等。在機器/匯編語言指令中,將操作對象稱為操作數(shù)。STC單片機CPU尋址模式在STC8051單片機中,這些被操作的對象(操作數(shù))可以保存在下面:CPU的內(nèi)部寄存器片內(nèi)Flash程序存儲器片內(nèi)RAM片內(nèi)擴展RAM片外存儲器也可能僅是一個常數(shù)(它作為操作碼的一部分)。STC單片機CPU尋址模式因此,就需要預(yù)先確定一些規(guī)則:一方面使得操作數(shù)可以保存在這些區(qū)域內(nèi);另一方面,CPU可以找到它們。在STC8051單片機中,將CPU尋找操作對象(操作數(shù))所保存位置的方式,稱為尋址模式。STC單片機CPU尋址模式在8051單片機常用的寄存器符號有:A:表示8051的累加器ACC。DPTR:表示16位的數(shù)據(jù)指針,指向外部數(shù)據(jù)空間或代碼存儲空間。PC:表示16位的程序計數(shù)器,指向下一條將要執(zhí)行指令的地址。C:表示進位標志CY。AB:表示A和B寄存器對,用于乘和除操作。R0-R7:表示當前所使用寄存器組內(nèi)的8位通用寄存器。SP:表示堆棧指針。DPS:數(shù)據(jù)指針選擇寄存器。注:特殊匯編器符號用來表示8051CPU的內(nèi)部功能寄存器,不可以修改這些符號。STC單片機CPU尋址模式STC15系列單片機采用的是8051CPU內(nèi)核,所以其尋址模式和傳統(tǒng)的8051單片機是一樣的。尋址模式包括:立即數(shù)尋址直接尋址間接尋址寄存器尋址相對尋址變址尋址位尋址STC單片機CPU尋址模式

--立即數(shù)尋址模式一些指令直接加載常數(shù)的值,而不是地址。比如指令:

MOVA,#3AH功能將8位的十六進制立即數(shù)3A送給累加器。00111010ACC累加器3AHSTC單片機CPU尋址模式

--直接尋址模式操作數(shù)由一個直接8位地址域指定。當使用這種模式時,只能訪問片內(nèi)RAM和特殊功能寄存器SFR。比如指令:

MOVA,3AH將片內(nèi)RAM中地址為3AH單元的數(shù)據(jù)送給累加器A。地址3AH地址39H地址3BHACC累加器片內(nèi)數(shù)據(jù)區(qū)

STC單片機CPU尋址模式對比記憶:立即數(shù)尋址模式

MOVA,#3AH直接尋址模式

MOVA,3AH注:(1)如果操作數(shù)前帶“#”符號,則操作數(shù)表示的是一個立即數(shù),是立即數(shù)尋址方式。(2)如果操作數(shù)前面不帶“#”符號,則操作數(shù)表示的是存儲器的地址,3A是存儲器的地址,表示把存儲器地址為3A單元的內(nèi)容送到累加器A中。STC單片機CPU尋址模式

--間接尋址模式由指令指定一個寄存器,該寄存器包含操作數(shù)的地址。比如指令:

ANLA,@R1假設(shè):

累加器A中的內(nèi)容為31HR1寄存器的內(nèi)容為60H,即(R1)=60H,則以60H作為存儲器的地址,將60H地址單元的內(nèi)容與累加器A中的數(shù)31H進行邏輯“與”運算,運算結(jié)果存放在累加器A中。60HR1寄存器地址60H地址5FH地址61H片內(nèi)數(shù)據(jù)區(qū)ACC累加器31HANL=ACC累加器STC單片機CPU尋址模式

--寄存器尋址模式某些特定指令用來訪問寄存器組中的R0-R7寄存器、累加器A、通用寄存器B、地址寄存器和進位CY。由于這些指令不需要地址域,因此這些指令訪問效率更高。比如指令:

INCR0功能:將寄存器R0的內(nèi)容加1,再送回R0。假設(shè)當前寄存器R0中的內(nèi)容為50H。50HR0寄存器+1=R0寄存器51HSTC單片機CPU尋址模式對比記憶

間接尋址模式

ANLA,@R1寄存器尋址模式

ANLA,R1

注:間接尋址是把R1寄存器中的內(nèi)容60H作為地址,對60H地址中的內(nèi)容進行操作。而寄存器尋址是直接對寄存器中的內(nèi)容進行操作。

+

地址60H地址5FH地址61H片內(nèi)數(shù)據(jù)區(qū)A累加器31H=A累加器R1寄存器60HR1寄存器

and60HA累加器31H=A累加器STC單片機CPU尋址模式

--相對尋址模式相對尋址時將程序計數(shù)器PC中的當前值與指令第二個字節(jié)給出的數(shù)相加,其結(jié)果作為轉(zhuǎn)移指令的目的轉(zhuǎn)移地址。PC中的當前值為基地址,指令第二個字節(jié)給出的數(shù)作為偏移量。偏移量為帶符號的數(shù),范圍為-128~+127。由于目的地址是相對于PC中的基地址而言,所以這種尋址方式稱為相對尋址。這種尋址方式主要用于跳轉(zhuǎn)指令,比如指令:

JC80H功能:當進位標志為1時,則進行跳轉(zhuǎn)。STC單片機CPU尋址模式

--相對尋址模式程序計數(shù)器PC當前地址+80H程序計數(shù)器PC當前地址+1程序計數(shù)器PCC=0C=1STC單片機CPU尋址模式

--變址尋址模式這種模式使用數(shù)據(jù)指針作為基地址,累加器值作為偏移地址來讀取程序Flash存儲器。比如指令:

MOVC

A,@A+DPTR功能:將DPTR和A的內(nèi)容相加所得到的值作為程序存儲器的地址,并將該地址單元的內(nèi)容送累計累加器A。數(shù)據(jù)指針寄存器DPTR+累加器ACC地址數(shù)據(jù)累加器ACCSTC單片機CPU尋址模式

--位尋址模式位尋址是對一些內(nèi)部數(shù)據(jù)存儲器RAM和特殊功能寄存器SFR進行位操作時的尋址模式。在進行位操作時,指令操作數(shù)直接給出該位的地址,然后根據(jù)操作碼的類型對該位進行操作。在這種模式下,操作數(shù)是256比特中的某一位。比如指令:

MOVC,2BH功能:把位尋址區(qū)的2BH位狀態(tài)送進位位C。位地址2BH進位標志CSTC單片機CPU指令集STC15系列單片機內(nèi)的8051CPU指令集包含111條指令,這些指令與傳統(tǒng)的8051指令完全兼容,但是大幅度提高了執(zhí)行指令的時間效率。STC15單片機內(nèi)8051CPU指令集分為:算術(shù)運算指令邏輯指令數(shù)據(jù)傳輸指令布爾指令程序分支指令A(yù)DDA,Rn該指令將寄存器Rn的內(nèi)容和累加器A的內(nèi)容相加,結(jié)果保存在累加器A中。并設(shè)置CY標志、AC標志,以及溢出標志。當和的第3位和第7位有進位時,分別將AC和CY標志置位,否則置0。對于帶符號運算數(shù),當和的第7位與第6位中有一位進位,而另一位不產(chǎn)生進位時,溢出標志OV置位,否則清0。也可以這樣說,當兩個正數(shù)相加時,相加的結(jié)果為負數(shù);或當兩個負數(shù)相加時,相加的結(jié)果為正數(shù)時,在這兩種情況下設(shè)置OV為1。算術(shù)指令

--加法指令算術(shù)指令

--加法指令助記符操作標志機器碼字節(jié)數(shù)周期數(shù)ADDA,Rn(PC)←(PC)+1(A)←(A)+(Rn)CY,AC,OV00101rrr11ADDA,Rn指令的內(nèi)容注:rrr為寄存器的編號,因此機器碼范圍是28H~2FH。算術(shù)指令

--加法指令【例】假設(shè)累加器A中的數(shù)據(jù)為C3H,R0寄存器中的數(shù)據(jù)為AAH。當執(zhí)行指令:

ADDA,R0結(jié)果:(A)=6DH,(AC)=0,(CY)=1,(OV)=1計算過程為:

1100,0011

+1010,1010

1,0110,1101算術(shù)指令

--加法指令該指令將直接尋址單元的內(nèi)容和累加器A的內(nèi)容相加,結(jié)果保存在累加器A中。CY,AC,OV標志的設(shè)置同上。ADDA,directADDA,direct指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ADDA,direct(PC)←(PC)+2(A)←(A)+(direct)CY,AC,OV0000010122注:在操作碼后面跟著一個字節(jié)的直接地址。算術(shù)指令

--加法指令該指令將間接尋址單元的內(nèi)容和累加器A的內(nèi)容相加,結(jié)果保存在累加器A中。CY,AC,OV標志的設(shè)置同上。ADDA,@RiADDA,@Ri指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ADDA,@Ri(PC)←(PC)+1(A)←(A)+((Ri))CY,AC,OV0010011i12注:i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。算術(shù)指令

--加法指令該指令將一個立即數(shù)和累加器A的內(nèi)容相加,結(jié)果保存在累加器A中。CY,AC,OV標志的設(shè)置同上。ADDA,#dataADDA,#data指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ADDA,#data(PC)←(PC)+2(A)←(A)+dataCY,AC,OV0010010022注:在操作碼后面跟著一個字節(jié)的立即數(shù)。算術(shù)指令

--加法指令該指令將寄存器Rn的內(nèi)容與累加器A的內(nèi)容及進位標志CY的內(nèi)容相加,結(jié)果保存在累加器A中。CY,AC,OV標志的設(shè)置同上。ADDCA,RnADDCA,Rn指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ADDCA,Rn(PC)←(PC)+1(A)←(A)+(C)+(Rn)CY,AC,OV00111rrr11注:rrr為寄存器的編號,因此機器碼范圍是38H~3FH。算術(shù)指令

--加法指令【例】假設(shè)累加器A中的數(shù)據(jù)為C3H,R0寄存器中的數(shù)據(jù)為AAH,進位標志為1時,當執(zhí)行指令:

ADDCA,R0結(jié)果:(A)=6EH,(AC)=0,(CY)=1,(OV)=1計算過程為:

1100,0011

1010,1010

+1

10110,1110算術(shù)指令

--加法指令該指令將直接尋址單元的內(nèi)容與累加器A的內(nèi)容及進位標志CY中的內(nèi)容相加,結(jié)果保存在累加器A中。CY,AC,OV標志的設(shè)置同上。ADDCA,directADDCA,direct指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ADDCA,direct(PC)←(PC)+2(A)←(A)+(C)+(direct)CY,AC,OV0011010122注:在操作碼后面跟著一個字節(jié)的直接地址。算術(shù)指令

--加法指令該指令將間接尋址單元的內(nèi)容與累加器A的內(nèi)容及進位標志CY中的內(nèi)容相加,結(jié)果保存在累加器A中。CY,AC,OV標志的設(shè)置同上。ADDCA,@RiADDCA,@Ri指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ADDCA,@Ri(PC)←(PC)+1(A)←(A)+(C)+((Ri))CY,AC,OV0011011i12注:i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。算術(shù)指令

--加法指令該指令將一個立即數(shù)與累加器A的內(nèi)容及進位標志CY中的內(nèi)容相加,結(jié)果保存在ACC中。CY,AC,OV標志的設(shè)置同上。ADDCA,#dataADDCA,#data指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ADDCA,#data(PC)←(PC)+2(A)←(A)+(C)+dataCY,AC,OV0011010022注:在操作碼后面跟著一個字節(jié)的立即數(shù)。算術(shù)指令

--減法指令SUBBA,Rn該指令從累加器A中減去寄存器Rn和進位標志CY內(nèi)的內(nèi)容,將結(jié)果保存在累加器A中。SUBBA,Rn指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)SUBBA,Rn(PC)←(PC)+1(A)←(A)-(C)-(Rn)CY,AC,OV10011rrr11注:rrr為寄存器的編號,因此機器碼范圍是98H~9FH。算術(shù)指令

--減法指令如果第7位需要一個借位,則設(shè)置進位(借位)標志;否則,清除CY標志。如果第3位需要一個借位,則設(shè)置AC標志;否則,清除AC標志。如果第6位需要借位,而7位沒有借位時;或者第7位有借位,而第6位沒有借位時,在這兩種情況下都會設(shè)置OV標志?;蛘呖梢赃@樣說,當減去有符號的整數(shù)時,當一個正數(shù)減去一個負數(shù),產(chǎn)生一個負數(shù)結(jié)果時;或者一個負數(shù)減去一個正數(shù)時,產(chǎn)生一個正數(shù)結(jié)果時,設(shè)置OV標志。算術(shù)指令

--減法指令【例】假設(shè)累加器A中的數(shù)據(jù)為C9H,R2寄存器中的數(shù)據(jù)為54H,進位標志為1時,當執(zhí)行指令:

SUBBA,R2結(jié)果:(A)=74H,(AC)=0,(CY)=0,(OV)=1計算過程為:

1100,1001

0101,0100

-1

0111,0100算術(shù)指令

--減法指令該指令從累加器A中減去直接尋址單元的內(nèi)容和進位標志CY的內(nèi)容,然后結(jié)果保存在累加器A中。CY、AC、OV設(shè)置如上。SUBBA,directSUBBA,direct指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)SUBBA,direct(PC)←(PC)+2(A)←(A)-(C)-(direct)CY,AC,OV1001010122注:在操作碼后面跟著一個字節(jié)的直接地址。算術(shù)指令

--減法指令該指令從累加器A中減去間接尋址單元的內(nèi)容和進位標志CY的內(nèi)容,然后結(jié)果保存在累加器A中。CY、AC、OV設(shè)置如上。SUBBA,@RiSUBBA,@Ri指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)SUBBA,@Ri(PC)←(PC)+1(A)←(A)-(C)-((Ri))CY,AC,OV1001011i12注:i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。算術(shù)指令

--減法指令該指令從累加器A中減去一個立即數(shù)和進位標志CY的內(nèi)容,然后結(jié)果保存在累加器A中。CY、AC、OV設(shè)置如上。SUBBA,#dataSUBBA,#data指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)SUBBA,#data(PC)←(PC)+2(A)←(A)-(C)-dataCY,AC,OV1001010022注:在操作碼后面跟著一個字節(jié)的立即數(shù)。算術(shù)指令

--遞增指令I(lǐng)NCA該指令將累加器A的內(nèi)容加1,結(jié)果保存在累加器A中。若累加器的結(jié)果為0xFF時,將其內(nèi)容設(shè)置為0。INCA指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)INCA(PC)←(PC)+1(A)←(A)+1N0000010011算術(shù)指令

--遞增指令該指令將寄存器Rn的內(nèi)容加1,結(jié)果保存在Rn中。若Rn的結(jié)果為0xFF時,將其內(nèi)容設(shè)置為0。INCRnINCRn指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)INCRn(PC)←(PC)+1(Rn)←(Rn)+1N00001rrr12注:rrr為寄存器的編號,因此機器碼范圍是08H~0FH。算術(shù)指令

--遞增指令該指令將直接尋址單元的內(nèi)容加1,結(jié)果保存在直接地址單元中。若直接地址單元的結(jié)果為0xFF時,將其內(nèi)容設(shè)置為0。INCdirectINCdirect指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)INCdirect(PC)←(PC)+2(direct)←(direct)+1N0000010123注:在操作碼后面跟著一個字節(jié)的直接地址。算術(shù)指令

--遞增指令該指令將間接尋址單元的內(nèi)容加1,結(jié)果保存在間接地址單元中。若間接地址單元的結(jié)果為0xFF時,將其內(nèi)容設(shè)置為0。INC@RiINC@Ri指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)INC@Ri(PC)←(PC)+1((Ri))←((Ri))+1N0000011i13注:i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。算術(shù)指令

--遞增指令該指令將DPTR的內(nèi)容加1,結(jié)果保存在DPTR中。若DPTR的結(jié)果為0xFFFF時,將其內(nèi)容設(shè)置為0x0000。INCDPTRINCDPTR指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)INCDPTR(PC)←(PC)+1(DPTR)←(DPTR)+1N1010001111算術(shù)指令

--遞增指令【例】假設(shè)寄存器R0中的數(shù)據(jù)為7EH,內(nèi)部RAM地址為7EH和7FH單元的數(shù)據(jù)分別為FFH和40H,即:(7E)=FFH,(7F)=40H,則當執(zhí)行指令:

INC@R0;內(nèi)部RAM地址為7EH單元的內(nèi)容加1,變成0

INCR0;寄存器R0中的數(shù)據(jù)變?yōu)?FH

INC@R0;內(nèi)部RAM地址為7FH單元的內(nèi)容加1,變成41H

結(jié)果:(R0)=7FH,內(nèi)部RAM地址為7EH和7FH單元的數(shù)據(jù)變?yōu)?0H和41H。算術(shù)指令

--遞減指令DECA該指令將累加器A的內(nèi)容減1,結(jié)果保存在累加器A中。如果累加器A中的內(nèi)容為0,則變?yōu)?xFF。DECA指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)DECA(PC)←(PC)+1(A)←(A)–1N0001010011算術(shù)指令

--遞減指令該指令將寄存器Rn的內(nèi)容減1,結(jié)果保存在寄存器Rn中。如果Rn的內(nèi)容為0,則變?yōu)?xFF。DECRnDECRn指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)DECRn(PC)←(PC)+1(Rn)←(Rn)–1N00011rrr12注:rrr為寄存器的編號,因此機器碼范圍是18H~1FH。算術(shù)指令

--遞減指令該指令將直接尋址單元的內(nèi)容減1,結(jié)果保存在直接地址單元中。如果直接尋址單元的內(nèi)容為0,則變?yōu)?xFF。DECdirectDECdirect指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)DECdirect(PC)←(PC)+2(direct)←(direct)–1N0001010123注:在操作碼后面跟著一個字節(jié)的直接地址。算術(shù)指令

--遞減指令該指令將間接尋址單元的內(nèi)容減1,結(jié)果保存在間接地址單元中。如果間接尋址單元的內(nèi)容為0,則變?yōu)?xFF。DEC@RiDEC@Ri指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)DEC@Ri(PC)←(PC)+1((Ri))←((Ri))–1N0001011i13注:i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。算術(shù)指令

--遞減指令【例】假設(shè)寄存器R0中的數(shù)據(jù)為7FH,內(nèi)部RAM地址為7EH和7FH單元的數(shù)據(jù)分別為00H和40H,即:(7F)=00H,(7E)=40H,則當執(zhí)行指令:DEC@R0;內(nèi)部RAM地址為7FH單元的內(nèi)容減1,變成FFHDECR0;寄存器R0中的數(shù)據(jù)變?yōu)?EHDEC@R0;內(nèi)部RAM地址為7EH單元的內(nèi)容減1,變成3FH

結(jié)果:

(R0)=7EH,內(nèi)部RAM地址為7EH和7FH單元的數(shù)據(jù)變?yōu)镕FH和3FH。算術(shù)指令

--乘法指令MULAB該指令將累加器A和寄存器B中的兩個無符號8位二進制數(shù)相乘,所得的16位乘積的低8位結(jié)果保存在累加器A中,高8位結(jié)果保存在寄存器B中。如果乘積大于255,則溢出標志OV置1;否則OV清零。在執(zhí)行該命令時,總是清除進位標志CY。MULAB指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MULAB(PC)←(PC)+1(A)←(A)x(B)結(jié)果第7位到第0位(B)←(A)x(B)結(jié)果第15位到第8位CY,OV1010010012算術(shù)指令

--乘法指令【例】假設(shè)累加器A中的數(shù)據(jù)為(80)10=50H,寄存器B中的數(shù)據(jù)為(160)10=A0H,則執(zhí)行指令:MULAB結(jié)果:乘積為(12800)10=3200H,則(A)=00H,(B)=32H,(CY)=0,(OV)=1。

01010000×1010000000000000000000000000000000000000000000000101000000000000+010100000011001000000000算術(shù)指令

--除法指令DIVAB該指令用累加器A中的無符號整數(shù)除以寄存器B中無符號整數(shù)。所得的商保存在累加器A中,余數(shù)保存在寄存器B中。當除數(shù)(B寄存器的內(nèi)容)為0時,結(jié)果不定,溢出標志OV置1。在執(zhí)行該指令時,清除進位標志CY。DIV

AB指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)DIVAB(PC)←(PC)+1(A)15-8←(A)/(B)(B)7-0←(A)/(B)CY,OV1000010016算術(shù)指令

--除法指令【例】假設(shè)累加器A中的數(shù)據(jù)為(251)10=FBH,寄存器B中的數(shù)據(jù)為(18)10=12H,則執(zhí)行指令:

DIVAB結(jié)果:(A)=0DH,(B)=11H,(CY)=0,(OV)=0

算術(shù)指令

--BCD調(diào)整指令DAA該指令的功能是對BCD碼的加法結(jié)果進行調(diào)整。兩個壓縮型BCD碼按十進制數(shù)相加后,須經(jīng)此指令的調(diào)整才能得到壓縮型BCD碼的和。本指令是根據(jù)A的最初數(shù)值和程序狀態(tài)字PSW的狀態(tài),決定對A進行加06H、60H或66H操作的。DAA指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)DAA(PC)←(PC)+1如果[[(A3-0)>9]V[(AC)=1]]則:(A3-0)←(A3-0)+6如果[[(A7-4)>9]V[(C)=1]]則:(A7-4)←(A7-4)+6CY1101010013算術(shù)指令

--BCD調(diào)整指令【例】假設(shè)累加器A中的數(shù)據(jù)為56H,表示10進制數(shù)56的BCD碼。寄存器R3的內(nèi)容為67H,表示10進制數(shù)67的BCD碼。進位標志為1,則執(zhí)行指令:

ADDCA,R3;累加器A的結(jié)果為BEH,(AC)=0,(CY)=0

DAA;表示十進制數(shù)的124注:

因為在執(zhí)行完ADDC指令后,(A)=BEH,

(A)3-0>9,所以(A)3-0+6→(A)3-0=4H,向第4位有進位。

(A)7-4>9,所以(A)7-4+6+進位→(A)7-4=2H,最高位有進位。

邏輯指令

--邏輯與指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ANLA,Rn(PC)←(PC)+1(A)←(A)?(Rn)N01011rrr11ANLA,Rn該指令將累加器A的內(nèi)容和寄存器Rn的內(nèi)容做邏輯與操作,結(jié)果保存在累加器A中。

ANLA,Rn指令的內(nèi)容注:rrr為寄存器的編號,因此機器碼范圍是58H~5FH。邏輯指令

--邏輯與指令【例】假設(shè)累加器A中的數(shù)據(jù)為C3H,寄存器R0的內(nèi)容為55H,則執(zhí)行指令:

ANLA,R0結(jié)果:累加器A中的數(shù)據(jù)為41H。計算過程:

11000011

?01010101

01000001【例】執(zhí)行指令

ANLP1,#01110011B結(jié)果:將端口1的第7位、第3位和第2位清零。邏輯指令

--邏輯與指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ANLA,direct(PC)←(PC)+2(A)←

(A)?(direct)N0101010122ANLA,direct該指令將累加器A的內(nèi)容和直接尋址單元的內(nèi)容做邏輯與操作,結(jié)果保存在累加器A中。ANLA,direct指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的直接地址。邏輯指令

--邏輯與指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ANLA,@Ri(PC)←(PC)+1(A)←(A)?((Ri))N0101011i12ANLA,@Ri該指令將累加器A的內(nèi)容和間接尋址單元中的內(nèi)容做邏輯與操作,結(jié)果保存在累加器A中。

ANLA,@Ri指令的內(nèi)容注:i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。邏輯指令

--邏輯與指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ANLA,#data(PC)←(PC)+2(A)←(A)?dataN0101010022ANLA,#data該指令將累加器A的內(nèi)容和立即數(shù)做邏輯與操作,結(jié)果保存在累加器A中。ANLA,#data指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的立即數(shù)。邏輯指令

--邏輯與指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ANLdirect,A(PC)←(PC)+2(direct)←(direct)?(A)N0101001023ANLdirect,A該指令將累加器A的內(nèi)容和直接尋址單元的內(nèi)容做邏輯與操作,結(jié)果保存在直接尋址單元中。

ANLdirect,A指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的直接地址。邏輯指令

--邏輯與指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ANLdirect,#data(PC)←(PC)+3(direct)←(direct)?dataN0101001133ANLdirect,#data該指令對立即數(shù)和直接尋址單元的內(nèi)容做邏輯與操作,結(jié)果保存在直接尋址單元中。ANLdirect,#data指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的直接地址和一個字節(jié)的立即數(shù)。邏輯指令

--邏輯或指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ORLA,Rn(PC)←(PC)+1(A)←(A)?(Rn)N01001rrr11ORLA,Rn該指令將累加器A的內(nèi)容和寄存器Rn中內(nèi)容做邏輯或操作,結(jié)

果保存在累加器A中

ORLA,Rn指令的內(nèi)容注:rrr為寄存器的編號,因此機器碼范圍是48H~4FH。

邏輯指令

--邏輯或指令【例】假設(shè)累加器A中的數(shù)據(jù)為C3H,寄存器R0的內(nèi)容為55H,則執(zhí)行指令:

ORLA,R0結(jié)果:累加器A中的數(shù)據(jù)為D7H。計算過程:

11000011

∨01010101

11010111【例】執(zhí)行指令:

ORLP1,#00110010B結(jié)果:將端口1的第5位、第4位和第1位置1。邏輯指令

--邏輯或指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ORLA,direct(PC)←(PC)+2(A)←(A)?(direct)N0100010122ORLA,direct該指令將累加器A的內(nèi)容和直接尋址單元的內(nèi)容做邏輯或操作,結(jié)果保存在累加器A中。

ORLA,direct指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的直接地址邏輯指令

--邏輯或指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ORLA,@Ri(PC)←(PC)+1(A)←(A)?((Ri))N0100011i12ORLA,@Ri該指令將累加器A的內(nèi)容和間接尋址單元中內(nèi)容做邏輯或操作,結(jié)果保存在累加器A中。

ORLA,@Ri指令的內(nèi)容注:i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。邏輯指令

--邏輯或指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ORLA,#data(PC)←(PC)+2(A)←(A)?dataN0100010022ORLA,#data該指令將累加器A的內(nèi)容和立即數(shù)做邏輯或操作,結(jié)果保存在累加器A中。ORLA,#data指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的立即數(shù)。邏輯指令

--邏輯或指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ORLdirect,A(PC)←(PC)+2(direct)←(direct)?(A)N0100001023ORLdirect,A該指令將直接尋址單元的內(nèi)容和累加器A中內(nèi)容做邏輯或操作,結(jié)果保存在直接尋址單元中

ORLdirect,A指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的直接地址。邏輯指令

--邏輯或指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)ORL

direct,#data(PC)←(PC)+3(direct)←(direct)?dataN0100001133ORLdirect,#data該指令將直接尋址單元中內(nèi)容和立即數(shù)做邏輯或操作,結(jié)果保存在直接尋址單元中。ORLdirect,#data指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的直接地址和一個字節(jié)的立即數(shù)。邏輯指令

--邏輯異或指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)XRLA,Rn(PC)←(PC)+1(A)←(A)⊕(Rn)N01101rrr11XRLA,Rn該指令將累加器A的內(nèi)容和寄存器Rn的內(nèi)容做邏輯異或操作,結(jié)果保存在累加器A中。XRLA,Rn指令的內(nèi)容注:rrr為寄存器的編號,因此機器碼范圍是68H~6FH。邏輯指令

--邏輯異或指令【例】假設(shè)累加器A中的數(shù)據(jù)為C3H,寄存器R0的內(nèi)容為AAH,則執(zhí)行指令:

XRLA,R0結(jié)果:累加器A中的數(shù)據(jù)為69H。計算過程:

11000011

⊕10101010

01101001【例】執(zhí)行指令:

XRLP1,#00110001B結(jié)果:將端口1的第5位、第4位和第0位取反。邏輯指令

--邏輯異或指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)XRLA,direct(PC)←(PC)+2(A)←(A)⊕(direct)N0110010122

XRLA,direct該指令將累加器A的內(nèi)容和直接尋址單元的內(nèi)容做邏輯異或操作,結(jié)果保存在累加器A中

。XRLA,direct指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的直接地址。邏輯指令

--邏輯異或指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)XRLA,@Ri(PC)←(PC)+1(A)←(A)⊕((Ri))N0110011i12XRLA,@Ri該指令將累加器A的內(nèi)容和間接尋址單元的內(nèi)容做邏輯異或操作,結(jié)果保存在累加器A中。XRLA,@Ri指令的內(nèi)容注:i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。邏輯指令

--邏輯異或指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)XRLA,#data(PC)←(PC)+2(A)←(A)⊕dataN0110010022XRLA,#data該指令將累加器A的內(nèi)容和一個立即數(shù)做邏輯異或操作,結(jié)果保存在累加器A中。

XRLA,#data指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的立即數(shù)。邏輯指令

--邏輯異或指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)XRLdirect,A(PC)←(PC)+2(direct)←(direct)⊕(A)N0110001023XRLdirect,A該指令將直接尋址單元的內(nèi)容和累加器ACC的內(nèi)容做邏輯異或操作,結(jié)果保存在直接尋址的單元中

。

XRLdirect,A指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的直接地址。邏輯指令

--邏輯異或指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)XRL

direct,#data(PC)←(PC)+3(direct)←(direct)⊕dataN0110001133XRLdirect,#data該指令將直接尋址的內(nèi)容和一個立即數(shù)做邏輯異或操作,結(jié)果保存在直接尋址的單元中。XRLdirect,#data指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的直接地址和一個字節(jié)的立即數(shù)。邏輯指令

--清除指令CLRA該指令將累加器A中的各位清0,如下表所示。CLRA指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)CLRA(PC)←(PC)+1(A)←0N1110010011【例】假設(shè)累加器A中的數(shù)據(jù)為5CH,則執(zhí)行指令:

CLRA

結(jié)果:(A)=00H邏輯指令

--取反指令CPLA該指令將累加器A按位取反,即:將累加器A各位中,邏輯1變成邏輯0,邏輯0變成邏輯1。CPLA指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)CPLA(PC)←(PC)+1(A)←(A)N1111010011邏輯指令

--取反指令【例】假設(shè)P1端口的數(shù)據(jù)為5BH,則執(zhí)行指令:

CPLP1.1

CPLP1.2結(jié)果:將P1端口設(shè)置為5DH=01011101B邏輯指令

--移位指令RLA該指令將累加器A中的內(nèi)容循環(huán)左移。RLA指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)RLA(PC)←(PC)+1(An+1)←(An),n=0~6(A0)←(A7)N0010001111【例】假設(shè)累加器A的數(shù)據(jù)為C5H(11000101B),則執(zhí)行指令:

RLA結(jié)果:累加器A的內(nèi)容變成8BH=10001011B邏輯指令

--移位指令該指令將累加器A的內(nèi)容和進位標志CY一起循環(huán)左移。RLCARLCA指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)RLCA(PC)←(PC)+1(An+1)←(An),n=0~6(A0)←(CY)(CY)←(A7)CY0011001111【例】假設(shè)累加器A的數(shù)據(jù)為C5H(11000101B),進位標志(CY)=1,則執(zhí)行指令:

RLCA結(jié)果:累加器A的內(nèi)容變成8BH=10001011B,進位標志(CY)=1。邏輯指令

--移位指令該指令將累加器A的內(nèi)容循環(huán)右移。RRARRA指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)RRA(PC)←(PC)+1(An)←(An+1),n=0~6(A7)←(A0)N0000001111【例】假設(shè)累加器A的數(shù)據(jù)為C5H(11000101B),則執(zhí)行指令:

RRA結(jié)果:累加器A的內(nèi)容變成E2H=11100010B。邏輯指令

--移位指令該指令將累加器ACC的內(nèi)容和進位標志CY一起循環(huán)右移。RRCARRCA指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)RRCA(PC)←(PC)+1(An)←(An+1),n=0~6(A7)←(CY)(CY)←(A0)CY0001001111【例】假設(shè)累加器A的數(shù)據(jù)為C5H(11000101B),進位標志(CY)=0,則執(zhí)行指令:RRCA結(jié)果:累加器A的數(shù)據(jù)變成62H=01100010B,進位標志(CY)=1。邏輯指令

--半字節(jié)交換指令SWAPA該指令將累加器A中的半字節(jié)互換,即:將累加器A的高、低半字節(jié)互換。SWAPA指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)SWAPA(PC)←(PC)+1(A3-0)←(A7-4)(A7-4)←(A3-0)N1100010011【例】假設(shè)累加器A的數(shù)據(jù)為C5H(11000101B),則執(zhí)行指令:

SWAPA結(jié)果:累加器A的數(shù)據(jù)變成5CH=01011100B。該類型數(shù)據(jù)傳輸指令是在任何兩個內(nèi)部RAM或者SFR間實現(xiàn)數(shù)據(jù)傳輸。這些指令使用直接、間接、寄存器和立即數(shù)尋址。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVA,Rn(PC)←(PC)+1(A)←(Rn)N11101rrr11

MOVA,Rn該指令將寄存器Rn中的內(nèi)容復(fù)制到累加器A中,且Rn的內(nèi)容不發(fā)生變化

。MOVA,Rn指令的內(nèi)容注:rrr為寄存器的編號,因此機器碼范圍是E8H~EFH。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVA,direct(PC)←(PC)+2(A)←(direct)N1110010122MOVA,direct該指令將直接尋址單元的內(nèi)容復(fù)制到累加器A中,且直接尋址單元的內(nèi)容不發(fā)生變化。MOVA,direct指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的直接地址。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVA,@Ri(PC)←(PC)+1(A)←((Ri))N1110011i12MOVA,@Ri該指令將間接尋址單元中的內(nèi)容復(fù)制到累加器A中,且間接尋址單元的內(nèi)容不發(fā)生變化。MOVA,@Ri指令的內(nèi)容注:i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVA,#data(PC)←(PC)+2(A)←dataN0111010022MOVA,#data該指令將立即數(shù)復(fù)制到累加器A中,且立即數(shù)的內(nèi)容不發(fā)生變化。MOVA,#data指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的立即數(shù)。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVRn,A(PC)←(PC)+1(Rn)←(A)N11111rrr11MOVRn,A該指令將累加器A的內(nèi)容復(fù)制到寄存器Rn中,且累加器A的內(nèi)容不發(fā)生變化。MOVRn,A指令的內(nèi)容數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVRn,direct(PC)←(PC)+2(Rn)←(direct)N10101rrr23MOVRn,direct該指令將直接尋址單元的內(nèi)容復(fù)制到寄存器Rn中,且直接尋址單元的內(nèi)容不發(fā)生變化。MOVRn,direct指令的內(nèi)容注:rrr為寄存器的編號,因此機器碼范圍是A8H~AFH。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVRn,#data(PC)←(PC)+2(Rn)←dataN01111rrr22MOVRn,#data該指令將立即數(shù)復(fù)制到寄存器Rn中,且立即數(shù)的內(nèi)容不發(fā)生變化。MOVRn,#data指令的內(nèi)容注:(1)rrr為寄存器的編號,因此機器碼范圍是78H~7FH。(2)在操作碼后面跟著一個字節(jié)的立即數(shù)。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVdirect,A(PC)←(PC)+2(direct)←(A)N1111010122MOVdirect,A該指令將累加器A的內(nèi)容復(fù)制到直接尋址單元中,且累加器A的內(nèi)容不發(fā)生變化。MOVdirtect,A指令的內(nèi)容注:

(1)在操作碼后面跟著一個字節(jié)的直接地址。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVdirect,Rn(PC)←(PC)+2(direct)←(Rn)N10001rrr22MOVdirect,Rn該指令將寄存器Rn的內(nèi)容復(fù)制到直接尋址單元中,且Rn的內(nèi)容不發(fā)生變化。MOVdirtect,Rn指令的內(nèi)容注:

(1)rrr為寄存器的編號,因此機器碼范圍是88H~8FH。(2)在操作碼后面跟著一個字節(jié)的直接地址。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVdirect,direct(PC)←(PC)+3(direct)←(direct)N1000010133MOVdirect,direct該指令將直接尋址單元的內(nèi)容復(fù)制到另一個直接尋址單元中,且源直接尋址單元的內(nèi)容不發(fā)生變化。

MOVdirect,direct指令的內(nèi)容注:在操作碼后面跟著兩個字節(jié)的直接地址,一個是源操作數(shù)地址,另一個是目的操作數(shù)地址。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVdirect,@Ri(PC)←(PC)+2(direct)←((Ri))N1000011i23MOVdirect,@Ri該指令將間接尋址單元的內(nèi)容復(fù)制到直接尋址單元中,且間接尋址單元的內(nèi)容不發(fā)生變化。MOVdirect,@Ri指令的內(nèi)容注:(1)i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。(2)在操作碼后面跟著一個字節(jié)的直接地址。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVdirect,#data(PC)←(PC)+3(direct)←dataN0111010133MOVdirect,#data該指令將立即數(shù)復(fù)制到直接尋址單元中,且立即數(shù)的內(nèi)容不發(fā)生變化。MOVdirect,#data指令的內(nèi)容注:在操作碼后面跟著一個字節(jié)的直接地址和一個字節(jié)的立即數(shù)。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOV@Ri,A(PC)←(PC)+1((Ri))←(A)N1111011i12MOV@Ri,A該指令將累加器A的內(nèi)容復(fù)制到間接尋址的單元中,且累加器A的內(nèi)容不發(fā)生變化。MOV@Ri,A指令的內(nèi)容注:i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOV@Ri,direct(PC)←(PC)+2((Ri))←(direct)N1010011i23MOV@Ri,direct該指令將直接尋址單元的內(nèi)容復(fù)制到間接尋址的寄存器中,且直接尋址寄存器內(nèi)容不發(fā)生變化

。MOV@Ri,direct指令的內(nèi)容注:

(1)i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。

(2)在操作碼后面跟著一個字節(jié)的直接地址。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOV@Ri,#data(PC)←(PC)+2((Ri))←dataN0111011i22MOV@Ri,#data該指令將立即數(shù)內(nèi)容復(fù)制到間接尋址單元中,且立即數(shù)的內(nèi)容不發(fā)生變化。MOV@Ri,#data指令的內(nèi)容注:

(1)i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。

(2)在操作碼后面跟著一個字節(jié)的立即數(shù)。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVDPTR,#data16(PC)←(PC)+3DPH←data15-8DPL←data7-0N1001000033MOVDPTR,#data16該指令將一個16位的立即數(shù)復(fù)制到數(shù)據(jù)指針DPTR寄存器中,且16位立即數(shù)的內(nèi)容不發(fā)生變化。MOVDPTR,#data16指令的內(nèi)容注:在操作碼后面跟著兩個字節(jié)(16位)的立即數(shù)。數(shù)據(jù)傳輸指令

--內(nèi)部數(shù)據(jù)傳輸指令【例】假設(shè)內(nèi)部RAM地址為30H的單元的內(nèi)容為40H,而40H單元的內(nèi)容為10H。端口1的數(shù)據(jù)為CAH(11001010B)則執(zhí)行指令:

MOVR0,#30H;將立即數(shù)30H送到寄存器R0,(R0)=30HMOVA,@R0;將30H作為指向內(nèi)部RAM的地址,內(nèi)部RAM地址為30H

;單元的內(nèi)容40H送到累加器A中MOVR1,A;將累加器A的內(nèi)容40H,送到寄存器R1中,(R1)=40HMOVB,@R1;將40H作為指向內(nèi)部RAM的地址,內(nèi)部RAM地址為40H

;單元的內(nèi)容10H送到寄存器B中MOV@R1,P1;將P1端口的內(nèi)容,送到R1寄存器所指向的內(nèi)部RAM的;地址單元中,即內(nèi)部RAM地址為40H的單元的內(nèi)容變?yōu)椋籆AH。MOVP2,P1;將P1端口的內(nèi)容送到P2端口中,P2端口的內(nèi)容變?yōu)镃AH。數(shù)據(jù)傳輸指令

--外部數(shù)據(jù)傳輸指令該類型傳輸指令是在累加器和外部地址空間實現(xiàn)數(shù)據(jù)傳輸數(shù)據(jù),這種傳輸只能使用MOVX指令。數(shù)據(jù)傳輸指令

--外部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVXA,@Ri(PC)←(PC)+1(A)←((Ri))N1110001i13MOVXA,@Ri該指令將外部數(shù)據(jù)存儲區(qū)的一個字節(jié)的內(nèi)容復(fù)制到累加器A中。8位外部數(shù)據(jù)存儲區(qū)地址由R0或R1確定,且外部數(shù)據(jù)存儲器單元的內(nèi)容不發(fā)生變化。MOVXA,@Ri指令的內(nèi)容注:i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。數(shù)據(jù)傳輸指令

--外部數(shù)據(jù)傳輸指令【例】假設(shè)有一個時分復(fù)用地址/數(shù)據(jù)線的外部RAM存儲器,容量為256B,該存儲器連接到STC單片機的P0端口上,端口P3用于提供外部RAM所需要的控制信號。端口P1和P2用作通用輸入/輸出端口。R0和R1中的數(shù)據(jù)分別為12H和34H,外部RAM地址為34H的單元內(nèi)容為56H,執(zhí)行指令:

MOVXA,@R1;將外部RAM地址為34H單元的內(nèi)容56H送到累加器A

MOVX@R0,A;將累加器A的內(nèi)容56,送到外部RAM地址為12H的單元中。數(shù)據(jù)傳輸指令

--外部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVXA,@DPTR(PC)←(PC)+1(A)←(DPTR)N1110000012MOVXA,@DPTR該指令將外部數(shù)據(jù)存儲區(qū)的一個字節(jié)的內(nèi)容復(fù)制到累加器A中。16位外部數(shù)據(jù)存儲區(qū)單元的地址由DPTR寄存器確定,且外部數(shù)據(jù)存儲器單元的內(nèi)容不發(fā)生變化。MOVXA,@DPTR指令的內(nèi)容數(shù)據(jù)傳輸指令

--外部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVX@Ri,A(PC)←(PC)+1((Ri))←(A)N1111001i14MOVX@Ri,A該指令將累加器A的內(nèi)容復(fù)制到外部數(shù)據(jù)存儲單元中。8位外部數(shù)據(jù)存儲區(qū)地址由R0或R1確定,且累加器A中的內(nèi)容不發(fā)生變化。MOVX@Ri,A指令的內(nèi)容注:i表示R0或者R1。當i=0時,表示R0寄存器;當i=1時,表示R1寄存器。數(shù)據(jù)傳輸指令

--外部數(shù)據(jù)傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVX@DPTR,A(PC)←(PC)+1(DPTR)←(A)N1111000013MOVX@DPTR,A 該指令將累加器A的內(nèi)容復(fù)制到外部數(shù)據(jù)存儲單元中。16位外部數(shù)據(jù)存儲區(qū)單元的地址由DPTR寄存器確定,且累加器A中的內(nèi)容不發(fā)生變化

。MOVX@DPTR,A指令的內(nèi)容數(shù)據(jù)傳輸指令

--查找表傳輸指令只在累加器和程序存儲器之間實現(xiàn)數(shù)據(jù)傳輸,這種傳輸只能使用MOVC指令。數(shù)據(jù)傳輸指令

--查找表傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVA,@A+DPTR(PC)←(PC)+1(A)←((A)+(DPTR))N1001001115MOVCA,@A+DPTR該指令將數(shù)據(jù)指針寄存器DPTR和累加器A的內(nèi)容相加所得到的存儲器地址單元的內(nèi)容復(fù)制到累加器A中。MOVCA,@A+DPTR指令的內(nèi)容數(shù)據(jù)傳輸指令

--查找表傳輸指令【例】假設(shè)累加器A的值在0~4之間,下面的子程序?qū)⒗奂悠鰽中的值轉(zhuǎn)換為用DB偽指令定義的4個值之一

REL_PC:INCAMOVCA,@A+PCRETDB66HDB77HDB88HDB99H數(shù)據(jù)傳輸指令

--查找表傳輸指令助記符操作標志操作碼字節(jié)數(shù)周期數(shù)MOVCA,@A+PC(PC)←(PC)+1(A)←((A)+(PC))N1000001114MOVCA,@A+PC該指令將程序計數(shù)器PC和累加器A的內(nèi)容相加所得到的存儲器地址單元的內(nèi)容復(fù)制到累加器A中

。MOVCA,@A+PC指令的內(nèi)容數(shù)據(jù)傳輸指令

--堆棧操作指令POPdirect該指令將堆棧指針SP所指向棧頂?shù)膬?nèi)容保存到直接尋址單元中,然后執(zhí)行(SP)-1->(SP)的操作,此操作不影響標志位。POPdirect指令的內(nèi)容助記符操作標志操作碼字節(jié)數(shù)周期數(shù)POPdirect(PC)←(PC)+2(direct)←((SP))(SP)←(SP)–1N1101000022數(shù)據(jù)傳輸指令

--堆棧操作指令【例】假設(shè)堆棧指針的初值為32H,內(nèi)部RAM地址30H~32H單元的數(shù)據(jù)分別為20H、23H和01H,則執(zhí)行指令:

POPDPH

POPDPL結(jié)果:

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論