目录
内部 RAM 传送指令
指令名称 | 指令格式 | 功能 | 字节数 | 周期 |
以 A 为目的操作 数 | MOV A,RN | A <- RN | 1 | 1 |
MOV A,direct | A <- (direct) | 2 | 1 | |
MOV A,@Ri | A <- (Ri) | 1 | 1 | |
MOV A,#data | A <- #data | 2 | 1 | |
以 RN 为止目的 操作数 | MOV RN,A | RN <- A | 1 | 1 |
MOV RN,direct | RN <- (direct) | 2 | 2 | |
MOV RN,#data | RN <- #data | 2 | 1 | |
以直接地址为目 的操作数 | MOV direct,A | (direct) <- A | 2 | 1 |
MOV direct,RN | (direct) <- RN | 2 | 2 | |
MOV direct, direct | (direct) <- (direct) | 2 | 2 | |
MOV direct, @Ri | (direct) <- (Ri) | 3 | 2 | |
MOV direct, #data | (direct) <- #data | 2 | 2 | |
以寄存储间接地 址为目的操作数 | MOV @Ri, A | (Ri) <- A | 2 | 2 |
MOV @Ri, direct | (Ri) <- (direct) | 2 | 2 | |
MOV @Ri, #data | (Ri) <- #data | 1 | 1 | |
16 位数据传输 | MOV DPTR,#data16 | DPH <- #data(15-8) DPL <- #data(7-0) | 3 | 2 |
外部传送指令
指令格式 | 功能 | 字节数 | 周期 |
MOVX A,@RI | A <- (Ri) | 1 | 2 |
MOVX A,@DPTR | A <- ( DPTR) | 2 | 2 |
MOVX @RI,A | (Ri) <- A | 1 | 2 |
MOVX @DPTR,A | ( DPTR) <- A | 2 | 2 |
程序存储器数据传送指令
指令格式 | 功能 | 字节数 | 周期 |
MOVC A,@A+DPTR | A <- ( A+DPTR) | 1 | 2 |
MOVC A,@A+PC | A <- ( A+PC) | 1 | 2 |
功能 | 字节数 | 周期 | |
PUSH direct | SP <- SP+1,(SP) <- (direct) | 2 | 2 |
POP direct | (direct) <- (SP), SP <- SP-1 | 2 | 2 |
字节交换指令
指令格式 | 功能 | 字节数 | 周期 |
XCH A,RN | A <--> RN | 1 | 1 |
XCH A, direct | A <--> ( direct) | 1 | 1 |
XCH A,@RI | A <--> ( RI) | 1 | 1 |
SWAP A | A(0-3) <--> A(4-7) | 1 | 1 |
XCHD A,@RI | A(0-3) <--> (RI)(0-3) | 1 | 1 |
算术运算指令-加法
指令名称 | 指令格式 | 功能 | 字节数 | 周期 |
不带进位加法 | ADD A,RN | A <- A+RN | 1 | 1 |
ADD A,@RI | A <- A+(RI) | 1 | 1 | |
ADD A, direct | A <- A+( direct) | 2 | 1 | |
ADD A, #data | A <- A+data | 2 | 1 | |
带进位加法 | ADDC A, RN | A <- A+RN+CY | 1 | 1 |
ADDC A, @RI | A <- A+(RI) +CY | 1 | 1 | |
ADDC A, direct | A <- A+( direct) +CY | 2 | 1 | |
ADDC A, #data | A <- A+data+CY | 2 | 1 |
算术运算指令-减法
指令格式 | 功能 | 字节数 | 周期 |
SUBB A,RN | A <- A-RN-CY | 1 | 1 |
SUBB A,@RI | A <- A-(RI) -CY | 2 | 1 |
SUBB A, direct | A <- A-( direct) -CY | 1 | 1 |
SUBB A, #data | A <- A-data-CY | 2 | 1 |
指令格式 | 功能 | 字节数 | 周期 | |
加 1 指令 | INC A | A <- A+1 | 1 | 1 |
INC RN | RN <- RN +1 | 1 | 1 | |
INC @RI | (RI) <- (RI)+1 | 1 | 1 | |
INC direct | (direct) <- ( direct)+1 | 2 | 1 | |
INC DPTR | DPTR <- DPTR +1 | 1 | 2 | |
减 1 指令 | DEC A | A <- A-1 | 1 | 1 |
DEC RN | RN <- RN -1 | 1 | 1 | |
DEC @RI | (RI) <- (RI)-1 | 1 | 1 | |
DEC direct | (direct) <- ( direct)-1 | 2 | 1 |
算术运算指令-十进制调整指令
指令格式 | 功能 | 字节数 | 周期 |
DA A | 将 A 中内容转换为 BCD 码 | 1 | 1 |
方法:将累加器 A 中的低半字节的值大于 9 或 AC=1 时低半字节加 6,当高半字节大于 9 或
C=1 时,高半字节加 6,
算术运算指令-乘除法指令
指令格式 | 功能 | 字节数 | 周期 |
MUL AB | B A <- A*B | 1 | 4 |
DIV AB | A <- A/B,(B 放余数) | 1 | 4 |
逻辑运算类指令
指令名称 | 指令格式 | 功能 | 字节数 | 周期 |
逻辑与指令 | ANL A,RN | A <- A^RN | 1 | 1 |
ANL A,@RI | A <- A^(RI) | 1 | 1 | |
ANL A, direct | A <- A^( direct) | 2 | 1 | |
ANL A,# data | A <- A^ data | 2 | 1 | |
ANL direct, # data | ( direct) <- ( direct)^RN | 2 | 1 |
| ANL direct,A | ( direct) <- ( direct)^A | 3 | 2 |
逻辑或指令 | ORL A,RN | A <- AVRN | 1 | 1 |
ORL A,@RI | A <- AV(RI) | 1 | 1 | |
ORL A, direct | A <- AV ( direct) | 2 | 1 | |
ORL A,# data | A <- AV data | 2 | 1 | |
ORL direct, # data | ( direct) <- ( direct)VRN | 2 | 1 | |
ORL direct,A | ( direct) <- ( direct)VA | 3 | 2 | |
逻辑异或指令 | XOR A,RN | A <- A※RN | 1 | 1 |
XOR A,@RI | A <- AV※(RI) | 1 | 1 | |
XOR A, direct | A <- A※( direct) | 2 | 1 | |
XOR A,# data | A <- A※ data | 2 | 1 | |
XOR direct, # data | ( direct) <- ( direct) ※RN | 2 | 1 | |
XOR direct,A | ( direct) <- ( direct) ※A | 3 | 2 | |
累加器 A 清 0 与 取反 | CPL A | A <- ~A | 1 | 1 |
CLR A | A <- 0 | 1 | 1 | |
空操作 | NOP | 空操作 | 1 | 1 |
不带进位循环移 位指令 | RL A | An+1 <- An(n=0--6),A0 <- A7 | 1 | 1 |
RR A | An <- An+1 (n=0--6), A7 <- A0 | 1 | 1 | |
带进位循环移位 指令 | RLC A | An+1 <- An(n=0--6), CY <- A7, A0 <- CY | 1 | 1 |
RRC A | An <- An+1 (n=0--6), A7 <- CY, CY <- A0 | 1 | 1 |
控制转移类指令
指令名称 | 指令格式 | 功能 | 字节数 | 周期 |
无条件转移类指 <- | LJMP addr16 | PC <- PC+3,PC <- addr16 | 3 | 2 |
AJMP addr11 | PC <- PC+3,PC <- addr11 | 2 | 2 | |
SJMP rel | PC <- PC+2+ rel | 2 | 2 | |
JMP @A+DPTR | PC <- (A+DPTR) | 1 | 2 | |
累加器判 0 转发 指令 | JZ rel | 若 A=0 则 PC <- PC+2+ rel 若 A≠0 则 PC <- PC+2 | 2 | 2 |
JNZ rel | 若 A≠0 则 PC <- PC+2+ rel 若 A=0 则 PC <- PC+2 | 2 | 2 | |
比较转移指令 | CJNE A,direct, rel | 若 A ≠ (direct) 则 PC <- PC+3+ rel 若 A=(direct) 则 PC <- PC+3 若 A ≥ (direct), 则 CY <- 0 | 3 | 2 |
CJNE A,#data, rel | 若 A≠data 则 PC <- PC+3+ rel | 3 | 2 |
|
| 若 A= data 则 PC <- PC+3 若 A≥data,则 CY <- 0 |
|
|
CJNE RN,#data, rel | 若 RN ≠ data 则 PC <- PC+3+ rel 若 RN = data 则 PC <- PC+3 若 RN≥data,则 CY <- 0 | 3 | 2 | |
CJNE @Ri,#data, rel | 若 (Ri) ≠ data 则 PC <- PC+3+ rel 若(Ri)= data 则 PC <- PC+3 若(Ri)≥data,则 CY <- 0 | 3 | 2 | |
减 1 不为 0 转移 指令 | DJNZ RN,rel | 若 RN-1 ≠ 0 , 则 PC <- PC+2+ rel 若 RN-1=0,则 PC <- PC+2 | 3 | 2 |
DJNZ direct,rel | 若 (direct)-1 ≠ 0 ,则 PC <- PC+2+ rel 若 (direct)-1=0 , 则 PC <- PC+2 | 3 | 2 | |
子程序调用和返 回指令 | LCALL addr16 | PC <- PC+3,PC 值大压栈, PC <- addr16 | 3 | 2 |
ACALL addr11 | PC <- PC+1,PC 值大压栈, PC10--0 <- addr11 | 2 | 2 | |
RET | 程序返回 | 1 | 2 | |
RETI | 中断返回 | 1 | 2 |
布尔操作类指令
指令名称 | 指令格式 | 功能 | 字节数 | 周期 |
位数据传送指令 | MOV C,bit | CY <- bit | 2 | 1 |
MOV bit,c | bit <- CY | 2 | 1 | |
位状态控制指令 | CLR C | CY <- 0 | 1 | 1 |
CLR bit | bit <- 0 | 2 | 1 | |
SETB C | CY <- 1 | 1 | 1 | |
SETB bit | bit <- 1 | 2 | 1 | |
位逻辑操作指令 | ANL C,bit | CY <- CY∧bit | 2 | 2 |
ANL C,/bit | CY <- CY∧~bit | 2 | 2 | |
ORL C,bit | CY <- CY∨bit | 2 | 2 | |
ORL C,/bit | CY <- CY∨~bit | 2 | 2 | |
CPL C | CY <- ~CY | 1 | 2 | |
CPL bit | bit <- ~ bit | 2 | 2 | |
位条件转移指令 | JC rel | 若 CY=0,则转移 PC <- PC+2+ rel 否则 PC <- PC+2 | 2 | 2 |
JNC rel | 若 CY≠0,则转移 PC <- PC+2+ rel | 2 | 2 |
|
| 否则 PC <- PC+2 |
|
|
JB bit, rel | 若 bit =1,则转移 PC <- PC+2+ rel 否则 PC <- PC+2 | 3 | 2 | |
JNB bit, rel | 若 bit≠1,则转移 PC <- PC+2+ rel 否则 PC <- PC+2 | 3 | 2 | |
JNC bit, rel | 若 bit =1,则转移 PC <- PC+2+ rel, 且 bit <- 0, 否则 PC <- PC+2 | 3 | 2 |
伪指令
指令格式 | 功能 |
ORG XXXXH | 指定本条指令下面的程序或表格数据的起始地址 |
END | 指示源程序到此结束 |
EQU | 把“项”赋给“字符名称” |
DATA | 数据地址赋值命 <- |
DB XXH,XXH.. | 定义字节指令 |
DW XXXXH,XXXXH,.. | 定义字指令 |
DS | 预留存储空间指令 |
BIT | 位地址符指令 |