MCS-51單片機的指令集
1、數據傳送類指令
助記符 功能說明 字節數 振蕩周期
MOVA,Rn 寄存器內容送入累加器 1 12
MOVA,direct 直接地址單元中的數據送入累加器 2 12
MOVA,@Ri 間接RAM中的數據送入累加器 1 12
MOVA,#data8 8位立即數送入累加器 2 12
MOVRn,A 累加器內容送入寄存器 1 12
MOVRn,direct 直接地址單元中的數據送入寄存器 2 24
MOVRn,#data8 8位立即數送入寄存器 2 12
MOVdirect,A 累加器內容送入直接地址單元 2 12
MOVdirect,Rn 寄存器內容送入直接地址單元 2 24
MOVdirect,direct 直接地址單元中的數據送入直接地址單元 3 24
MOVdirect,@Ri 間接RAM中的數據送入直接地址單元 2 24
MOVdirect,#data8 8位立即數送入直接地址單元 3 24
MOV@Ri,A 累加器內容送入間接RAM單元 1 12
MOV@Ri,direct 直接地址單元中的數據送入間接RAM單元 2 24
MOV@Ri,#data8 8位立即數送入間接RAM單元 2 12
MOVDPTR,#data16 16位立即數地址送入地址寄存器 3 24
MOVCA,@A+DPTR 以DPTR為基地址變址尋址單元中的數據送入累加器1 24
MOVCA,@A+PC 以PC為基地址變址尋址單元中的數據送入累加器1 24
MOVXA,@Ri 外部RAM(8位地址)送入累加器 1 24
MOVXA,@DPTR 外部RAM(16位地址)送入累加器 1 24
MOVX@Ri,A 累加器送入外部RAM(8位地址) 1 24
MOVX@DPTR,A 累加器送入外部RAM(16位地址) 1 24
PUSHdirect 直接地址單元中的數據壓入堆棧 2 24
POPDIRECT 堆棧中的數據彈出到直接地址單元 2 24
XCHA,Rn 寄存器與累加器交換 1 12
XCHA,direct 直接地址單元與累加器交換 2 12
XCHA,@Ri 間接RAM與累加器交換 1 12
XCHDA,@Ri 間接RAM與累加器進行低半字節交換 1 12
2、算術操作類指令
助記符 功能說明 字節數 振蕩周期
ADDA,Rn 寄存器內容加到累加器 1 12
ADDA,direct 直接地址單元加到累加器 2 12
ADDA,@Ri 間接RAM內容加到累加器 1 12
ADDA,#data8 8位立即數加到累加器 2 12
ADDCA,Rn 寄存器內容帶進位加到累加器 1 12
ADDCA,dirct 直接地址單元帶進位加到累加器 2 12
ADDCA,@Ri 間接RAM內容帶進位加到累加器 1 12
ADDCA,#data8 8位立即數帶進位加到累加器 2 12
SUBBA,Rn 累加器帶借位減寄存器內容 1 12
SUBBA,dirct 累加器帶借位減直接地址單元 2 12
SUBBA,@Ri 累加器帶借位減間接RAM內容 1 12
SUBBA,#data8 累加器帶借位減8位立即數 2 12
INCA 累加器加1 1 12
INCRn 寄存器加1 1 12
INCdirect 直接地址單元內容加1 2 12
INC@Ri 間接RAM內容加1 1 12
INCDPTR DPTR加1 1 24
DECA 累加器減1 1 12
DECRn 寄存器減1 1 12
DECdirect 直接地址單元內容減1 2 12
DEC@Ri 間接RAM內容減1 1 12
MULA,B A乘以B 1 48
DIVA,B A除以B 1 48
DAA 累加器進行十進製轉換 1 12
3、邏輯操作類指令
助記符 功能說明 字節數 振蕩周期
ANLA,Rn 累加器與寄存器相“與” 1 12
ANLA,direct 累加器與直接地址單元相“與” 2 12
ANLA,@Ri 累加器與間接RAM內容相“與” 1 12
ANLA,#data8 累加器與8位立即數相“與” 2 12
ANLdirect,A 直接地址單元與累加器相“與” 2 12
ANLdirect,#data8 直接地址單元與8位立即數相“與” 3 24
ORLA,Rn 累加器與寄存器相“或” 1 12
ORLA,direct 累加器與直接地址單元相“或” 2 12
ORLA,@Ri 累加器與間接RAM內容相“或” 1 12
ORLA,#data8 累加器與8位立即數相“或” 2 12
ORLdirect,A 直接地址單元與累加器相“或” 2 12
ORLdirect,#data8 直接地址單元與8位立即數相“或” 3 24
XRLA,Rn 累加器與寄存器相“異或” 1 12
XRLA,direct 累加器與直接地址單元相“異或” 2 12
XRLA,@Ri 累加器與間接RAM內容相“異或” 1 12
XRLA,#data8 累加器與8位立即數相“異或” 2 12
XRLdirect,A 直接地址單元與累加器相“異或” 2 12
XRLdirect,#data8 直接地址單元與8位立即數相“異或” 3 24
CLRA 累加器清0 1 12
CPLA 累加器求反 1 12
RLA 累加器循環左移 1 12
RLCA 累加器帶進位循環左移 1 12
RRA 累加器循環右移 1 12
RRCA 累加器帶進位循環右移 1 12
SWAPA 累加器半字節交換 1 12
4、控製轉移類指令
助記符 功能說明 字節數 振蕩周期
ACALLaddr11 絕對短調用子程序 2 24
LACLLaddr16 長調用子程序 3 24
RET 子程序返回 1 24
RETI 中斷返回 1 24
AJMPaddr11 絕對短轉移 2 24
LJMPaddr16 長轉移 3 24
SJMPrel 相對轉移 2 24
JMP@A+DPTR 相對於DPTR的間接轉移 1 24
JZrel 累加器為零轉移 2 24
JNZrel 累加器非零轉移 2 24
CJNEA,direct,rel 累加器與直接地址單元比較,不等則轉移 3 24
CJNEA,#data8,rel 累加器與8位立即數比較,不等則轉移 3 24
CJNERn,#data8,rel 寄存器與8位立即數比較,不等則轉移 3 24
(相等則執行本指令的下一條)
CJNE@Ri,#data8,rel 間接RAM單元,不等則轉移 3 24
(但有時還想得知兩數比較之後哪個大,哪個小,
本條指令也具有這樣的功能,如果兩數不相等,
則CPU還會反映出哪個數大,哪個數小,
這是用CY(進位標誌位)來實現的。
如果左邊的數(A,Rn,@Ri)大或者等於右邊的數(direct,#date8),則CY=0;否則CY=1)
DJNZRn,rel 寄存器減1,非零轉移 3 24
DJNZdirect,rel 直接地址單元減1,非零轉移 3 24
NOP 空操作 1 12
控製轉移指令共有17條,可分為“無條件轉移指令” “有條件轉移指令” “子程序調用指令” 及 “返回指令”。
5、布爾變量操作類指令
助記符 功能說明 字節數 振蕩周期
CLRC 清進位位 1 12
CLRbit 清直接地址位 2 12
SETBC 置進位位 1 12
SETBbit 置直接地址位 2 12
CPLC 進位位求反 1 12
CPLbit 直接地址位求反 2 12
ANLC,bit 進位位和直接地址位相“與” 2 24
ANLC,/bit 進位位和直接地址位的反碼相“與” 2 24
ORLC,bit 進位位和直接地址位相“或” 2 24
ORLC,/bit 進位位和直接地址位的反碼相“或” 2 24
MOVC,bit 直接地址位送入進位位 2 12
MOVbit,C 進位位送入直接地址位 2 24
JCrel 進位位為1則轉移(CY=O不轉移,=1轉移) 2 24
JNCrel 進位位為0則轉移(和上麵相反) 2 24
JBbit,rel 直接地址位為1則轉移 3 24
JNBbit,rel 直接地址位為0則轉移 3 24
JBCbit,rel 直接地址位為1則轉移,該位清零 3 24
偽指令
助記符 功能說明
ORG 設置程序起始地址
END 標誌源代碼結束
EQU 定義常數
SET 定義整型數
DATA 給字節類型符號定值
BYTE 給字節類型符號定值
WROD 給字類型符號定值
BIT 給位地址取名
ALTNAME 用自定義名取代保留字
DB 給一塊連續的存儲區裝載字節型數據
DW 給一塊連續的存儲區裝載字型數據
DS 預留一個連續的存儲區或裝入指定字節。
INCLUDE 將一個源文件插入程序中
TITLE 列表文件中加入標題行
NOLIST 彙編時不產生列表文件
NOCODE 條件彙編時,條件為假的不產生清單