表示当前寄存器区的8个工作寄存器R0~R7
Ri: 表示当前寄存器区的R0或R1,可作地址指针即间址寄存器(i=0或1)
@: 为间接寄存器或基址寄存器的前缀.
Direct: 表示8位内部数据存储单元的地址.它可以是内部RAM的单元地址0~127.特殊功能
寄存器SFR的地址(128~255)或名称,
A: 累加器ACC.
B: .特殊功能寄存器B,用于MUL和DIV指令中.
C: 进位位Cy.
#data: 表示包含在指令中的单字节(8位)立即数.如果用16位进制表示,后缀字母为”H”,数据范围00~0FFH,不得一字母开头;如果用16进制表示无须任何后缀,但必须在0~255之间.
#data16: 表示包含在指令中的双字节(16位)立即数.
Adda16: 表示16位的目的地址.用于LCALL和LJMP指令中,目的地址范围是从0000H~FFFFH的整个64KB存储地址空间.
Adda11: 表示11位的目的地址.用于ACALL和AJMP的指令中,目的地址必须和下一条指令第一个字节同处一页.
Rel: 表示8位带符号的相对偏移量.用语SJMP和所有的条件转移指令中.偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值.
DPTR: 为数据指针,可用作16位的地址寄存器.
/: 加在位操作的前面,表示对该位进行非运算.
bit: 表示内部可寻址位或特殊功能寄存器中的直接寻址位.
“(x): 寄存器或地址单元中的内容.
((x)): 有x见解寻址的单元中的内容.
表示将箭头右边的内容传送至箭头的左边.
$: 当前指令的地址.
单片机指令系统
(一) 内部数据传送指令
(1) 以累加器A为目的的传送指令:
MOV A, #data ;(A)
MOV A, direct ;(A)
MOV A, Rn ;(A)
MOV A, @Ri ;(A)
(2) 以通用寄存器Rn为目的的传送指令:
MOV Rn, A ;(Rn)
MOV Rn, direct ; (Rn)
MOV Rn, #data: ; (Rn)
(3) 以直接地址为目的的传送指令:
MOV direct, A ;(direct)
MOV direct, Rn ; (direct)
MOV direct, direct2 ; (direct)
MOV direct, @Ri ; (direct)
MOV direct, #data ; (direct)
(4) 以寄存器间接地址为目的的传送指令:
MOV @Ri, A ;((Ri))
MOV @Ri, direct ;((Ri))
MOV @Ri, #data ;((Ri))
(二) 数据指针赋值指令(16位数据传送指令)
MOV DPTR, #data16;
(三) 片外数据传送指令
MOVX A, @Ri ;(A)
MOVX A, @DPTR ;(A)
MOVX @Ri, A ;((Ri))片外
MOVX @DPTR, A ;((DPTR))片外
(四) ROM数据访问指令(查表指令)
MOVC A, @A+DPTR ;(A)
MOVC A, @A+PC ;(PC)
(五) 堆栈操作指令
PUSH direct ;(SP)
堆栈指针先加1,将数据压入栈顶
POP direct ;(direct)
将数据从栈顶弹出存入direct,SP再减1
(六) 数据交换指令
(1)整字节(8位)交换指令:
XCH A, Rn ;A和Rn中的数互换
XCH A, direct ;A和direct单元中的数互换
XCH A, @Ri ;A和Ri间址单元中的数互换
(2)半字节交换指令:
XCHD A, @Ri ;A的低4位Ri间接单元的低4位互换,高4位不动
(3)累加器高低半字节交换指令:
SWAP A, ;A的高4位(D7~D4)和低4位(D3~D0)互换
(七) 加法指令
(1)不带Cy加法指令:
ADD A, Rn ;(A)
ADD A, direct ; (A)
ADD A, @Ri ; (A)
ADD A, #data ; (A)
(2)带进位加法指令:
ADDC A, Rn ;(A)
ADDC A, direct ; (A)
ADDC A, @Ri ; (A)
ADDC A, #data ; (A)
(3)加1指令:
INC A, ;(A)
INC Rn ;(Rn)
INC @Ri ;((Ri))
INC direct ;(direct)
INC DPTR ;(FPTR)
(八) 减法指令
(1)带进位减法指令:
SUBB A, Rn ;(A)
SUBB A, direct ; (A)
SUBB A, @Ri ; (A)
SUBB A, #data ; (A)
(2)减1指令:
DEC A ;(A)
DEC direct ;(direct)
DEC Rn ;(Rn)
DEC @Ri ;((Ri))
(九) 乘除指令
(1)乘法指令
MUL AB ;(B)(A)
指令功能是把累加器A和特殊功能寄存器B中两个8位无符号整数相乘,并把积的高8位字节存入B寄存器,低8位字节存入累加器A.
(2)除法指令
DIV AB ;A/B,商存入A,余数存入B
指令的功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数商的整数部分存入累加器A中,余数保留在B中.
(十) 十进制调整指令
DA A
(十一) 逻辑运算指令
(1) 逻辑与运算指令:
ANL A, Rn ;(A)
ANL A, direct ; (A)
ANL A, @Ri ; (A)
ANL A, #data ; (A)
ANL direct, A ;(direct)
ANL direct, #data;(direct
(2) 逻辑或运算指令:
ORL A, Rn ;(A)
ORL A, direct ; (A)
ORL A, @Ri ; (A)
ORL A, #data ; (A)
ORL direct, A ;(direct)
ORL direct, #data; (direct)
(3) 逻辑异或运算指令:
XRL A, Rn ;(A)
XRL A, direct ; (A)
XRL A, @Ri ; (A)
XRL A, #data ; (A)
XRL direct, A ;(direct)
XRL direct, #data; (direct)
(4) 累加器清0和去反指令
CLR A ;(A) (累加器清0指令)
CLR A ;(A)
(5) 累加器移位指令:
不带进位Cy循环左移: RL A ;Dn+1
不带进位Cy循环右移: RR A :Dn+1->Dn,D0
带进位Cy循环左移: RLC A ;Cy
D7
D6
D5
D4
D3
D2
D1
D0
带进位Cy循环右移: RRC A ;Cy->D7,Dn+1->Dn,D0->Cy
(十二) 控制转移指令
[1] 无条件转移指令:
(1) 长转移指令 LJMP addr16 ;(PC)
(2) 绝对转移指令AJMP addr11 ;(PC)
(3) 短转移指令 SJMP rel ;(PC)
(4) 变址寻址转移指令JMP @A+DPTR ;(PC)
[2] 条件转移指令:
(1) 累加器判0转移指令:
JZ rel ;如果(A)=0,跳转到目标语句,否则顺序执行
JNZ rel ;如果(A)≠0,跳转到目标语句,否则顺序执行
(2) 比较转移指令:
CJNZ A, #data, rel ;如果(A)≠data,则跳转到目标语句,否则程序顺序执行
CJNZ A direct, rel ; 如果(A)≠(direct),则跳转到目标语句,否则程序顺序执行
CJNZ Rn #data, rel ; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行
CJNZ @Ri #data, rel ; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行
(3) 循环控制转移指令:
DJNZ Rn, rel ;(Rn)先减1,如减1后(Rn)≠0,则跳转到目标语句;否则顺序执行
DJNZ firect, rel ; (direct)先减1,如减1后(direct)≠0,则跳转到目标语句;否则顺序执行
(十三) 子程序调用和返回指令
(1) 绝对调用指令:
ACALL addr11
(2) 长调用指令:
LCALL addr16
(3) 返回指令:
RET 子程序返回
RETI 中断服务程序返回
(十四) 空操作指令
NOP 空操作指令是一条特殊指令,单片机在执行该指令时不进行任何操作,只是消耗1个机器周期的时间,所以该指令长用于延时程序.软件陷阱程序等
(十五) 位操作类指令
(1) 位传送指令:
MOV C,bit ;(Cy)
MOV bit,C ; (bit)
(2) 位置位和复位指令:
SETB C ;(Cy)
SETB bit ;(bit)
CLR C ;(Cy)
CLR bit ;(bit)
(3) 位运算指令:
ANL C,bit ;(Cy)
ANL C,/bit ;(Cy)
ORL C,bit ;(Cy)
ORL C,/bit ;(Cy)
CPL C ; (Cy)
CPL bit ;(bit)
(4) 位测试转移指令:
(1) 以Cy位状态为条件的转移指令
JC rel ;如果Cy位=1,跳转到目标语句,否则顺序执行
JNC rel ;如果Cy位=0,跳转到目标语句,否则顺序执行
(2) 以指定位状态为条件的转移指令:
JB bit, rel ;如果bit=1,跳转到目标语句,否则顺序执行
JNB bit, rel ;如果bit=0,跳转到目标语句,否则顺序执行
JBC bit, rel ;如果bit=1,跳转到目标语句,同时将bit位清0;否则顺序执行