数据传输指令
一.片内RAM数据传输指令
1.以累加器A为目的操作数的指令: MOV A , Rn MOV A , direct MOV A , @Ri MOV A , #data
2.以寄存器Rn为目的操作数的指令: MOV Rn , A MOV Rn ,direct MOV Rn , data
3.以直接地址为目的操作数的指令: MOV direct , A MOV direct , Rn MOV direct1 ,derect2 MOV direct , @Ri MOV direct , #data
4.间接地址为目的操作数的指令: MOV @Ri ,A MOV @Ri ,direct MOV @Ri , #data 5.十六位数据传送指令: MOV DPTR , #data16
二.累加器A与片外RAM数据传送指令: MOVX A , @Ri MOVX A , @DPTR MOVX @Ri , A MOVX @DPTR , A 三.查表寻址: MOVC A , @A+DPTR (先PC←(PC)+1,后A←((A)+(DPTR)))+ MOVC A , @A+PC (先PC←(PC)+1,后A←((A)+(PC))) 四.交换指令:
1.字节交换指令:
XCH A ,Rn XCH A ,direct XCH A , @Ri
2.半字节交换指令: XCHD A , @Ri 3.累加器半字节交换指令: SWAP A 五.栈操作指令: 1.PUSH(入栈指令) PUSH direct
2.POP(出栈指令) POP direct
算术运算指令:
一. 加法减法指令:
1.加法指令:
ADD A , Rn ADD A ,direct ADD A , @Ri ADD A , #data 2.带进位加法指令:
ADDC A ,Rn A←(A)+(Rn)+CY ADDC A ,direct A←(A)+(direct)+CY ADDC A , @Ri A←(A)+((Ri))+CY ADDC A , #data A←(A)+(data)+CY 3.带借位减法指令:
SUBB A , Rn A← (A)-CY-(Rn) SUBB A , direct A←(A)-CY-(direct) SUBB A , @Ri A←(A)-CY-((Ri)) SUBB A , #data A←(A)-CY-#data 二. 乘法除法指令:
1. 乘法指令:
MUL AB BA←(A) ×(B)高字节放在B中,低字节放在A中 2. 除法指令:
DIV AB A←(A) ÷(B)的商,(B) ←(A) ÷(B)的余数 三. 加1减1指令:
1. 加1指令:
INC A A←(A)+1 INC Rn Rn←(Rn)+1
INC direct direct←(direct)+1 INC @Ri (Ri) ←((Ri))+1 INC DPTR DPTR←(DPTR)+1 2. 减1指令: DEC A DEC Rn DEC direct DEC @Ri 四. 十进制调制指令:
DA A 调整累加器A的内容为BCD码
逻辑操作指令:
一.逻辑与、或、异或指令: 1.逻辑与指令: ANL A ,Rn ANL A , direct
ANL A , @Ri ANL A , #data 2.逻辑或这令: ORL A , Rn ORL A , direct ORL A , @Ri ORL A , #data ORL direct , A ORL direct , #data 3.逻辑异或指令: XRL A , Rn XRL A , direct XRL A , @Ri XRL A , #data XRL direct ,A XRL direct ,#data 二.清零、取反指令: 1.累加器A清零指令: CRL A 2.累加器A取反指令: CPL A
三.循环位移指令: 1.累加器A循环左移指令: RL A 2.累加器A循环右移指令: RR A 3.累加器A连同进位位循环左移指令: RLC A 4. 累加器A连同进位位循环右移指令: RRC A 控制转移指令:
一. 无条件转移指令:
1.绝对转移指令:
AJMP addr11 (先PC+2,然后将addr11的低十位传给PC,PC的高六位不变)
2.长转移指令:
LJMP addr16 (用addr16的值替换PC的值) 3.相对转移(短转移)指令:
SJMP rel(带符号的偏移字节数) (PC+2,再加rel赋值给PC) 4.间接转移指令:
JMP @A+DPTR (A)+(DPTR) →(PC)
二.条件转移指令:
1.累加器判零转移指令:
JZ rel 先PC+2;后判断,A为0时转移,PC+rel赋值给PC;否则顺序
执行
JNZ rel 先PC+2,后判断,A不为0时转移,PC+rel赋值给PC;否则顺序执
行
2.比较转移指令: CJNE 目的操作数,源操作数,rel CJNE A,direct,rel 先PC+3传回PC,再比较目的操作数和原操作数 CJNE A,#data,rel 目>源时,程序转移,PC+rel传回PC且CY=0 CJNE Rn,#data,rel 目=源时,程序顺序执行 CJNE @Ri,#data,rel 目<源时,程序转移,PC+rel传回PC且CY=1 3.减一非0指令:
DJNZ Rn,rel 先PC\\+2,Rn-1,当Rn为0时程序顺序执行,否则PC+rel传回PC DJNZ direct,rel 先PC+3,direct-1,direct为0时程序顺序执行,否则PC+rel传回PC
二. 子程序调用、返回指令:
1. 绝对调用指令ACALL:
ACALL addr11 先PC+2,SP+1将PC的低八位存入SP;SP+1,将PC的高八
位存入SP。将addr的低十一位传给PC的底十一位,PC的高五位不变
2. 长调用指令LCALL:
LCALL addr16 先PC+|3,SP+1将PC的低八位存入SP,SP+1,将PC的高八
位存入SP。将addr的十六位全部传给PC
3. 返回指令:
RET PC的8到十五位←((SP)),弹出断点的高8位,然后SP减1赋给SP,PC
的0到七位←((PC)),弹出断点的低八位;然后PC减1赋给PC
RETI PC的8到十五位←((SP)),弹出断点的高8位,然后SP减1赋给SP,PC的0到七位←((PC)),弹出断点的低八位;然后PC减1赋给PC 注意:RET是从子程序返回指令,当程序执行到此指令时,表示结束子程序的执行,返回调用指令(ACALL或LCALL)的下一条指令处(断点)继续往下执行。因此它的主要操作是将栈顶的断点地址送给PC。RETI是中断返回指令,除了具有RET的功能外,还具有开放低优先级中断、回复中断逻辑等功能。编程时不能混用这两种返回指令,中断指令一定安排在中断服务程序的最后 三. 空操作指令:
NOP PC←(PC)+1 这是一条单字节指令,除了PC+1指向下一条指令外不执行其他的操作,不影响其他寄存器和标志位。用来编写软件延时程序。 位操作指令:
一. 位数据传送指令:
MOV C,bit MOV bit,C 二. 位逻辑运算指令: 1.位逻辑与指令: ANL C,bit ANL C,/bit
2.位逻辑或指令:
ORL C,bit ORL C,bit
三. 位清零、置一、取反指令:
1. 位清零指令:
CLR C CLR bit 2. 位置一指令:
SETB C STEB bi 3. 位取反指令:
CPL C CPL bit
这类指令的功能执行的结果不影响标志位,当直接寻址位地址为端口P0~P3中的某一位时,具有“读-改-写”的功能。
四. 位条件转移指令:
1. 位累加器C判断转移指令
JC rel 先pc+2后判断,(C)=1时,则PC+rel赋值给PC,反之顺序执行 JNC rel 先pc+2后判断,(C)=0时,则PC+rel赋值给PC,反之顺序执行 2. 判位变量转移指令:
JB bit,rel 先PC+3,判断,若(bit)=1,PC+rel赋值给PC,反之顺序
往下执行
JNB bit,rel 先PC+3,判断,若(bit)=0,PC+rel赋值给PC,反之顺
序往下执行
3. 判位变量转移指令:
JBC bit,rel 先PC+3,判断,若(bit)=0,PC+rel赋值给PC,且bit
←0,反之顺序往下执行