Rn:表示当前寄存器区的8个工作寄存器R0~R7Ri:表示当前寄存器区的R0或R1,可作地址指针即间址寄存器(i=0或1)
本文引用地址:https://www.eepw.com.cn/article/201611/320554.htm@:为间接寄存器或基址寄存器的前缀.
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为目的的传送指令:
MOVA,#data;(A)<-data
MOVA,direct;(A)<-(direct)
MOVA,Rn;(A)<-(Rn)
MOVA,@Ri;(A)<- ((Ri))
(2) 以通用寄存器Rn为目的的传送指令:
MOVRn,A;(Rn)<-(A)
MOVRn, direct; (Rn)<(direct)-
MOVRn,#data:; (Rn)<-(data)
(3) 以直接地址为目的的传送指令:
MOVdirect,A;(direct)<-(A)
MOVdirect,Rn; (direct)<-(Rn)
MOVdirect,direct2; (direct)<-(direct2)
MOVdirect,@Ri; (direct)<-((Rn))
MOVdirect,#data; (direct)<-data
(4) 以寄存器间接地址为目的的传送指令:
MOV@Ri,A;((Ri))<-(A)
MOV@Ri,direct;((Ri))<-(direct)
MOV@Ri,#data;((Ri))<-data
(二) 数据指针赋值指令(16位数据传送指令)
MOVDPTR,#data16;
(三) 片外数据传送指令
MOVXA,@Ri;(A)<-((Ri))片外
MOVXA,@DPTR;(A)<-((DPTR))片外
MOVX@Ri,A;((Ri))片外<-(A)
MOVX@DPTR, A;((DPTR))片外<-(A)
(四) ROM数据访问指令(查表指令)
MOVCA,@A+DPTR;(A)<-((A)+(DPTR))rom
MOVCA,@A+PC;(PC)<-(PC)+1,(A)<-((A)+(PC))rom
(五) 堆栈操作指令
PUSHdirect;(SP)<-(SP)+1,(SP)<-(direct)
堆栈指针先加1,将数据压入栈顶
POPdirect;(direct)<-(SP),(SP)<-(SP)-1
将数据从栈顶弹出存入direct,SP再减1
(六) 数据交换指令
(1)整字节(8位)交换指令:
XCHA,Rn;A和Rn中的数互换
XCHA,direct;A和direct单元中的数互换
XCHA,@Ri;A和Ri间址单元中的数互换
(2)半字节交换指令:
XCHDA,@Ri;A的低4位Ri间接单元的低4位互换,高4位不动
(3)累加器高低半字节交换指令:
SWAPA,;A的高4位(D7~D4)和低4位(D3~D0)互换
(七) 加法指令
(1)不带Cy加法指令:
ADDA,Rn;(A)<-(A)+(Rn)
ADDA,direct; (A)<-(A)+(direct)
ADDA,@Ri; (A)<-(A)+((Ri))
ADDA,#data; (A)<-(A)+data
(2)带进位加法指令:
ADDCA,Rn;(A)<-(A) +Cy+(Rn)
ADDCA,direct; (A)<-(A) +Cy+(direct)
ADDCA,@Ri; (A)<-(A) +Cy+((Ri))
ADDCA,#data; (A)<-(A) +Cy+data
(3)加1指令:
INCA,;(A)<-(A)+1
INCRn;(Rn)<-(Rn)+1
INC@Ri;((Ri))<-((Ri))+1
INCdirect;(direct)<-(direct)+1
INCDPTR;(FPTR)<-(DPTR)+1
(八) 减法指令
(1)带进位减法指令:
SUBBA,Rn;(A)<-(A) -Cy-(Rn)
SUBBA,direct; (A)<-(A) -Cy-(direct)
SUBBA,@Ri; (A)<-(A) -Cy-((Ri))
SUBBA,#data; (A)<-(A) -Cy-data
(2)减1指令:
DECA;(A)<-(A)-1
DECdirect;(direct)<-(durect)-1
DECRn;(Rn)<-(Rn)-1
DEC@Ri;((Ri))<-((Ri))-1
(九) 乘除指令
(1)乘法指令
MULAB;(B)(A)<-(A)*(B)
指令功能是把累加器A和特殊功能寄存器B中两个8位无符号整数相乘,并把积的高8位字节存入B寄存器,低8位字节存入累加器A.
(2)除法指令
DIVAB;A/B,商存入A,余数存入B
指令的功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数商的整数部分存入累加器A中,余数保留在B中.
(十) 十进制调整指令
DAA
(十一) 逻辑运算指令
(1)逻辑与运算指令:
ANLA,Rn;(A)<-(A)∧(Rn)
ANLA,direct; (A)<-(A)∧(direct)
ANLA,@Ri; (A)<-(A)∧((Ri))
ANLA,#data; (A)<-(A)∧data
ANLdirect,A;(direct)<-(A)∧(direct)
ANLdirect,#data;(direct<-(direct)∧data
(2)逻辑或运算指令:
ORLA,Rn;(A)<-(A)∨(Rn)
ORLA,direct; (A)<-(A)∨(direct)
ORLA,@Ri; (A)<-(A)∨((Ri))
ORLA,#data; (A)<-(A)∨data
ORLdirect,A;(direct)<-(A)∨(direct)
ORLdirect,#data; (direct)<-(direct)∨data
(3)逻辑异或运算指令:
XRLA,Rn;(A)<-(A)⊙(Rn)
XRLA,direct; (A)<-(A)⊙(direct)
XRLA,@Ri; (A)<-(A)⊙((Ri))
XRLA,#data; (A)<-(A)⊙data
XRLdirect,A;(direct)<-(A)⊙(direct)
XRLdirect,#data; (direct)<-(direct)⊙data
(4)累加器清0和去反指令
CLRA;(A)<-0(累加器清0指令)
CLRA;(A)<-(A) (累加器取反指令)
(5)累加器移位指令:
不带进位Cy循环左移:RLA;Dn+1<-Dn,D0<-D7
不带进位Cy循环右移:RRA:Dn+1->Dn,D0<-D7
带进位Cy循环左移:RLCA;Cy<-D7,Dn+1<-Dn,D0<-Cy
D7
D6
D5
D4
D3
D2
D1
D0
带进位Cy循环右移:RRCA;Cy->D7,Dn+1->Dn,D0->Cy
(十二) 控制转移指令
[1] 无条件转移指令:
(1) 长转移指令LJMPaddr16;(PC)<-addr16
(2) 绝对转移指令AJMPaddr11;(PC)<-(PC)+2,(PC)10~0<-addr11
(3) 短转移指令SJMPrel;(PC)<-(PC)+2+rel
(4) 变址寻址转移指令JMP@A+DPTR;(PC)<-(A)+(DPTR)
[2] 条件转移指令:
(1) 累加器判0转移指令:
JZrel;如果(A)=0,跳转到目标语句,否则顺序执行
JNZrel;如果(A)≠0,跳转到目标语句,否则顺序执行
(2) 比较转移指令:
CJNZA,#data,rel;如果(A)≠data,则跳转到目标语句,否则程序顺序执行
CJNZAdirect,rel; 如果(A)≠(direct),则跳转到目标语句,否则程序顺序执行
CJNZRn#data,rel; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行
CJNZ@Ri#data,rel; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行
(3) 循环控制转移指令:
DJNZRn,rel;(Rn)先减1,如减1后(Rn)≠0,则跳转到目标语句;否则顺序执行
DJNZfirect,rel; (direct)先减1,如减1后(direct)≠0,则跳转到目标语句;否则顺序执行
(十三) 子程序调用和返回指令
(1) 绝对调用指令:
ACALLaddr11
(2) 长调用指令:
LCALLaddr16
(3) 返回指令:
RET子程序返回
RETI中断服务程序返回
(十四) 空操作指令
NOP空操作指令是一条特殊指令,单片机在执行该指令时不进行任何操作,只是消耗1个机器周期的时间,所以该指令长用于延时程序.软件陷阱程序等
(十五) 位操作类指令
(1) 位传送指令:
MOVC,bit;(Cy)<-(bit),bit位的状态不变
MOVbit,C; (bit) <- (Cy),Cy位的状态不变
(2) 位置位和复位指令:
SETBC;(Cy)<-1
SETBbit;(bit)<-1
CLRC;(Cy)<-0
CLRbit;(bit)<-0
(3) 位运算指令:
ANLC,bit;(Cy)<-(Cy)∧(bit),Cy位和bit位相与,结果赋给Cy
ANLC,/bit;(Cy)<-(Cy)∧(bit),Cy位和bit位相与,结果赋给Cy
ORLC,bit;(Cy)<-(Cy)∨(bit),Cy位和bit位相或,结果赋给Cy
ORLC,/bit;(Cy)<-(Cy) ∨(bit),Cy位和bit位相或,结果赋给Cy
CPLC; (Cy)<-(Cy),Cy位取反
CPLbit;(bit)<-(bit),bit位取反
(4) 位测试转移指令:
(1) 以Cy位状态为条件的转移指令
JCrel;如果Cy位=1,跳转到目标语句,否则顺序执行
JNCrel;如果Cy位=0,跳转到目标语句,否则顺序执行
(2) 以指定位状态为条件的转移指令:
JBbit,rel;如果bit=1,跳转到目标语句,否则顺序执行
JNBbit,rel;如果bit=0,跳转到目标语句,否则顺序执行
JBCbit,rel;如果bit=1,跳转到目标语句,同时将bit位清0;否则顺序执行
评论