數(shù)據(jù)傳送指令共有29條,數(shù)據(jù)傳送指令一般的操作是把源操作數(shù)傳送到目的操作數(shù),指令執(zhí)行完成后,源操作數(shù)不變,目的操作數(shù)等于源操作數(shù)。如果要求在進行數(shù)據(jù)傳送時,目的操作數(shù)不丟失,則不能用直接傳送指令,而采用交換型的數(shù)據(jù)傳送指令,數(shù)據(jù)傳送指令不影響標志C,AC和OV,但可能會對奇偶標志P有影響。
????[1].?以累加器A為目的操作數(shù)類指令(4條)
????這4條指令的作用是把源操作數(shù)指向的內(nèi)容送到累加器A。有直接、立即數(shù)、寄存器和寄存器間接尋址方式:
????????MOV ?A,data ????;(data)→(A) 直接單元地址中的內(nèi)容送到累加器A
????????MOV ?A,#data ???;#data→(A) 立即數(shù)送到累加器A中
????????MOV ?A,Rn??????;(Rn)→(A) Rn中的內(nèi)容送到累加器A中
????????MOV ?A,@Ri ????;((Ri))→(A) Ri內(nèi)容指向的地址單元中的內(nèi)容送到累加器A
????[2].?以寄存器Rn為目的操作數(shù)的指令(3條)
????這3條指令的功能是把源操作數(shù)指定的內(nèi)容送到所選定的工作寄存器Rn中。有直接、立即和寄存器尋址方式:
????????MOV ?Rn,data? ???;(data)→(Rn) 直接尋址單元中的內(nèi)容送到寄存器Rn中
????????MOV ?Rn,#data? ??;#data→(Rn) 立即數(shù)直接送到寄存器Rn中
????????MOV ?Rn,A? ??????;(A)→(Rn) 累加器A中的內(nèi)容送到寄存器Rn中
????[3].?以直接地址為目的操作數(shù)的指令(5條)
????這組指令的功能是把源操作數(shù)指定的內(nèi)容送到由直接地址data所選定的片內(nèi)RAM中。有直接、立即、寄存器和寄存器間接4種尋址方式:
????????MOV ?data,data ??;(data)→(data) 直接地址單元中的內(nèi)容送到直接地址單元
????????MOV ?data,#data ;#data→(data) 立即數(shù)送到直接地址單元
????????MOV ?data,A ????;(A)→(data) 累加器A中的內(nèi)容送到直接地址單元
????????MOV ?data,Rn ???;(Rn)→(data) 寄存器Rn中的內(nèi)容送到直接地址單元
????????MOV ?data,@Ri ??;((Ri))→(data) 寄存器Ri中的內(nèi)容指定的地址單元中數(shù)據(jù)送到直接地址單元
????[4].?以間接地址為目的操作數(shù)的指令(3條)
????這組指令的功能是把源操作數(shù)指定的內(nèi)容送到以Ri中的內(nèi)容為地址的片內(nèi)RAM中。有直接、立即和寄存器3種尋址方式:
????????MOV ?@Ri,data ???;(data)→((Ri)) 直接地址單元中的內(nèi)容送到以Ri中的內(nèi)容為地址的RAM單元
????????MOV ?@Ri,#data ??;#data→((Ri)) 立即數(shù)送到以Ri中的內(nèi)容為地址的RAM單元
????????MOV ?@Ri,A ??????;(A)→((Ri)) 累加器A中的內(nèi)容送到以Ri中的內(nèi)容為地址的RAM單元
????[5].?查表指令(2條)
????這組指令的功能是對存放于程序存儲器中的數(shù)據(jù)表格進行查找傳送,使用變址尋址方式:
????????MOVC ?A,@A+DPTR ??;((A))+(DPTR)→(A) 表格地址單元中的內(nèi)容送到累加器A中
????????MOVC ?A,@A+PC ????;((PC))+1→(A),((A))+(PC)→(A) 表格地址單元中的內(nèi)容送到累加器A中
????[6].?累加器A與片外數(shù)據(jù)存儲器RAM傳送指令(4條)
????這4條指令的作用是累加器A與片外RAM間的數(shù)據(jù)傳送。使用寄存器尋址方式:
????????MOVX ?@DPTR,A ???;(A)→((DPTR)) 累加器中的內(nèi)容送到數(shù)據(jù)指針指向片外RAM地址中
????????MOVX ?A, @DPTR???;((DPTR))→(A) 數(shù)據(jù)指針指向片外RAM地址中的內(nèi)容送到累加器A中
????????MOVX ?A, @Ri?????;((Ri))→(A) 寄存器Ri指向片外RAM地址中的內(nèi)容送到累加器A中
????????MOVX ?@Ri,A ?????;(A)→((Ri)) 累加器中的內(nèi)容送到寄存器Ri指向片外RAM地址中
????[7].?堆棧操作類指令(2條)
????這4類指令的作用是把直接尋址單元的內(nèi)容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內(nèi)容送到直接尋址單元中。這類指令只有兩條,下述的第一條常稱為入棧操作指令,第二條稱為出棧操作指令。需要指出的是,單片機開機復位后,(SP)默認為07H,但一般都需要重新賦值,設置新的SP首址。入棧的第一個數(shù)據(jù)必須存放于SP+1所指存儲單元,故實際的堆棧底為SP+1所指的存儲單元。
????????PUSH ?data???;(SP)+1→(SP),(data)→(SP) 堆棧指針首先加1,直接尋址單元中的數(shù)據(jù)送到堆棧指針SP所指的單元中
????????POP ?data????;(SP)→(data)(SP)-1→(SP), 堆棧指針SP所指的單元數(shù)據(jù)送到直接尋址單元中,堆棧指針SP再進行減1操作
????[8].?交換指令(5條)
????這5條指令的功能是把累加器A中的內(nèi)容與源操作數(shù)所指的數(shù)據(jù)相互交換。
????????XCH ?A,Rn????;(A)←→(Rn)累加器與工作寄存器Rn中的內(nèi)容互換
????????XCH ?A,@Ri???;(A)←→((Ri))累加器與工作寄存器Ri所指的存儲單元中的內(nèi)容互換
????????XCH ?A,data??;(A)←→(data)累加器與直接地址單元中的內(nèi)容互換
????????XCHD ?A,@Ri??;(A3-0)←→((Ri)3-0)累加器與工作寄存器Ri所指的存儲單元中的內(nèi)容低半字節(jié)互換
????????SWAP ?A??????;(A3-0)←→(A7-4)累加器中的內(nèi)容高低半字節(jié)互換
????[9].?16位數(shù)據(jù)傳送指令(1條)
????這條指令的功能是把16位常數(shù)送入數(shù)據(jù)指針寄存器。
????????MOV ?DPTR,#data16??;#dataH→(DPH),#dataL→(DPL)16位常數(shù)的高8位送到DPH,低8位送到DPL
????[1].?以累加器A為目的操作數(shù)類指令(4條)
????這4條指令的作用是把源操作數(shù)指向的內(nèi)容送到累加器A。有直接、立即數(shù)、寄存器和寄存器間接尋址方式:
????????MOV ?A,data ????;(data)→(A) 直接單元地址中的內(nèi)容送到累加器A
????????MOV ?A,#data ???;#data→(A) 立即數(shù)送到累加器A中
????????MOV ?A,Rn??????;(Rn)→(A) Rn中的內(nèi)容送到累加器A中
????????MOV ?A,@Ri ????;((Ri))→(A) Ri內(nèi)容指向的地址單元中的內(nèi)容送到累加器A
????[2].?以寄存器Rn為目的操作數(shù)的指令(3條)
????這3條指令的功能是把源操作數(shù)指定的內(nèi)容送到所選定的工作寄存器Rn中。有直接、立即和寄存器尋址方式:
????????MOV ?Rn,data? ???;(data)→(Rn) 直接尋址單元中的內(nèi)容送到寄存器Rn中
????????MOV ?Rn,#data? ??;#data→(Rn) 立即數(shù)直接送到寄存器Rn中
????????MOV ?Rn,A? ??????;(A)→(Rn) 累加器A中的內(nèi)容送到寄存器Rn中
????[3].?以直接地址為目的操作數(shù)的指令(5條)
????這組指令的功能是把源操作數(shù)指定的內(nèi)容送到由直接地址data所選定的片內(nèi)RAM中。有直接、立即、寄存器和寄存器間接4種尋址方式:
????????MOV ?data,data ??;(data)→(data) 直接地址單元中的內(nèi)容送到直接地址單元
????????MOV ?data,#data ;#data→(data) 立即數(shù)送到直接地址單元
????????MOV ?data,A ????;(A)→(data) 累加器A中的內(nèi)容送到直接地址單元
????????MOV ?data,Rn ???;(Rn)→(data) 寄存器Rn中的內(nèi)容送到直接地址單元
????????MOV ?data,@Ri ??;((Ri))→(data) 寄存器Ri中的內(nèi)容指定的地址單元中數(shù)據(jù)送到直接地址單元
????[4].?以間接地址為目的操作數(shù)的指令(3條)
????這組指令的功能是把源操作數(shù)指定的內(nèi)容送到以Ri中的內(nèi)容為地址的片內(nèi)RAM中。有直接、立即和寄存器3種尋址方式:
????????MOV ?@Ri,data ???;(data)→((Ri)) 直接地址單元中的內(nèi)容送到以Ri中的內(nèi)容為地址的RAM單元
????????MOV ?@Ri,#data ??;#data→((Ri)) 立即數(shù)送到以Ri中的內(nèi)容為地址的RAM單元
????????MOV ?@Ri,A ??????;(A)→((Ri)) 累加器A中的內(nèi)容送到以Ri中的內(nèi)容為地址的RAM單元
????[5].?查表指令(2條)
????這組指令的功能是對存放于程序存儲器中的數(shù)據(jù)表格進行查找傳送,使用變址尋址方式:
????????MOVC ?A,@A+DPTR ??;((A))+(DPTR)→(A) 表格地址單元中的內(nèi)容送到累加器A中
????????MOVC ?A,@A+PC ????;((PC))+1→(A),((A))+(PC)→(A) 表格地址單元中的內(nèi)容送到累加器A中
????[6].?累加器A與片外數(shù)據(jù)存儲器RAM傳送指令(4條)
????這4條指令的作用是累加器A與片外RAM間的數(shù)據(jù)傳送。使用寄存器尋址方式:
????????MOVX ?@DPTR,A ???;(A)→((DPTR)) 累加器中的內(nèi)容送到數(shù)據(jù)指針指向片外RAM地址中
????????MOVX ?A, @DPTR???;((DPTR))→(A) 數(shù)據(jù)指針指向片外RAM地址中的內(nèi)容送到累加器A中
????????MOVX ?A, @Ri?????;((Ri))→(A) 寄存器Ri指向片外RAM地址中的內(nèi)容送到累加器A中
????????MOVX ?@Ri,A ?????;(A)→((Ri)) 累加器中的內(nèi)容送到寄存器Ri指向片外RAM地址中
????[7].?堆棧操作類指令(2條)
????這4類指令的作用是把直接尋址單元的內(nèi)容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內(nèi)容送到直接尋址單元中。這類指令只有兩條,下述的第一條常稱為入棧操作指令,第二條稱為出棧操作指令。需要指出的是,單片機開機復位后,(SP)默認為07H,但一般都需要重新賦值,設置新的SP首址。入棧的第一個數(shù)據(jù)必須存放于SP+1所指存儲單元,故實際的堆棧底為SP+1所指的存儲單元。
????????PUSH ?data???;(SP)+1→(SP),(data)→(SP) 堆棧指針首先加1,直接尋址單元中的數(shù)據(jù)送到堆棧指針SP所指的單元中
????????POP ?data????;(SP)→(data)(SP)-1→(SP), 堆棧指針SP所指的單元數(shù)據(jù)送到直接尋址單元中,堆棧指針SP再進行減1操作
????[8].?交換指令(5條)
????這5條指令的功能是把累加器A中的內(nèi)容與源操作數(shù)所指的數(shù)據(jù)相互交換。
????????XCH ?A,Rn????;(A)←→(Rn)累加器與工作寄存器Rn中的內(nèi)容互換
????????XCH ?A,@Ri???;(A)←→((Ri))累加器與工作寄存器Ri所指的存儲單元中的內(nèi)容互換
????????XCH ?A,data??;(A)←→(data)累加器與直接地址單元中的內(nèi)容互換
????????XCHD ?A,@Ri??;(A3-0)←→((Ri)3-0)累加器與工作寄存器Ri所指的存儲單元中的內(nèi)容低半字節(jié)互換
????????SWAP ?A??????;(A3-0)←→(A7-4)累加器中的內(nèi)容高低半字節(jié)互換
????[9].?16位數(shù)據(jù)傳送指令(1條)
????這條指令的功能是把16位常數(shù)送入數(shù)據(jù)指針寄存器。
????????MOV ?DPTR,#data16??;#dataH→(DPH),#dataL→(DPL)16位常數(shù)的高8位送到DPH,低8位送到DPL
評論
查看更多