单片机指令详解

单片机指令详解

1、数据传送类指令

1.MOV:MOV(目的字节),(源字节);

2.MOVC:和MOV用法基本相同,主要用于ROM查表,也就是基址变址中。

3.MOVX:和MOV用法基本相同,主要读写片外RAM中,也就是间接寻址,如MOVXA,@Ri。

4.PUSH:主要用于堆栈操作中的压栈操作,例如:(SP)=07H,(40H)=88H,执行指令PUSH40H后,(SP)=08H)(08H)=88H。其中,SP为堆栈指针,压栈之后堆栈指针加一。

5.POP:主要用于堆栈操作中的弹栈操作,(SP)=5FH,(5FH)=90H,执行指令POP70H后,(70H)=90H,(SP)=5EH,弹栈后堆栈指针减一。

6.XCH:主要用于两个数据之间交换,例如:(R0)=80H,(A)=20H。执行指令XCHA,R0后,(A)=80H,(R0)=20H。

7.XCHD:这个指令的主要功能是间址操作数的低半字节与A的低半字节内容相互交换。例如:(A)=20H,(R0)=30H,(30H)=67H。执行XCHDA,@R0后(A)=27,(30H)=60H.

8.SWAP:这个指令的功能是累加器的高、低四位进行互换。例如:(A)=23H,执行SWAPA指令之后(A)=32H。


2、算术运算类指令

1)加法

a)不带进位加法

影响程序状态字标志位PSW中的CY(CY是进位标志位,即和的D7为有进位时(CY)=1,否则,(CY)=0)、AC(AC为辅助进位标志位,当D3为有进位时为1,否则为0)、OV(和的D7和D6为只有一个进位时为1,否则为0)和P(当累加器ACC中的1为奇数时为1,否则为0)

例如:(A)= 84H,(30H)= 8DH,执行指令 ADD A,30H 结果A=11H

b)带进位加法

影响的程序状态字标志位与不带进位的加法相同。表达形式为ADDC  A,Rn

c)增一

例如:INC A  A的数值自加一

d)十进制调整

当累加器A中的低4位数出现了非BCD码或第四位产生进位时,应在第四位加六调整,以产生第四位正确的BCD码结果。

当累加器A中的高4位数出现了非BCD码或第四位产生进位时,应在第四位加六调整,以产生第四位正确的BCD码结果。

例如:(A)= 0101 0110B (R2)= 0110 0111B

ADD A,R2     DAA结果为123

2)减法

a)带错位减法

要是想实现不带错位减法只需要在每次执行带错位减法之前给CY清零即可。

例如:(A)=C9H,(R2)=54H,CY=1。执行SUBBA,R2之后结果为A-CY-R2。

b)减一

例如:DECAA自减一。

3)乘法

乘法运算之后第八位放在累加器A中,高八位放在寄存器中。

例如:(A)=50H,(B)=A0H。执行指令MULAB后(A)=00H,(B)=32H

4)除法

该指令的功能是将累加器A中的无符号8位二进制数除以B中的无符号8位二进制数,商的整数部分放在累加器A中,余数部分放在寄存器B中。

例如:(A)=FBH,(B)=12H,执行指令DIVAB后,(A)=0DH,B=11H。


3、逻辑运算和循环类指令

1、逻辑与ANL:例如:(A)=C3H,(R0)=AAH,执行指令ANLA,R0后,(A)=82H。

2、逻辑或ORL例如:(A)=C3H,(R0)=55H,执行指令ORGA,R0后,(A)=D7H。

3、逻辑异或XRL:例如:(A)=C3H,(R0)=AAH,执行指令XRLA,R0后(A)=69H。

4、累加器清0:例如:执行指令CLRA,那么无论累加器A之前是什么值,执行这条指令后都为0。

5、累加器取反:例如:CPLA那么累加器A=A非。

6、循环移位:RR循环右移;RL循环左移;有时候循环移位可以很方便的把原来的数据乘以2。


4、控制转移类指令

a)无条件转移指令

1.短跳转指令:AJPM addr11;程序跳转到addr11指示的地址处。

2.长跳转指令:LJPMaddr16;程序跳转到addr16指示的地址处。

3.相对跳转指令:SJMPrel;程序跳转到rel相对地址处。

4.散转移跳转指令:JMP@A+DPTR;程序跳转到变址指出的地址处。

b)条件转移指令

1.判0跳转指令:JZ rel;A为0,程序跳转到rel的相对地址出;

JNZrel;A不为0,程序跳转到rel的相对地址出;

2.比较不等跳转指令:例如:CJNEA,#data;A的内容与data的内容不等则跳转。

3.减一不为0跳转指令:例如:DJNZRn;Rn内容减一不为零则跳转。

4.子程序跳转:ACALLaddr11;调用addr11处理子程序;
LCALLaddr16;调用addr16处理子程序;

5.返回:RET:子程序返回;RETI:中断返回

6.NOP:空操作,耗时一个机器周期。


5、位操作指令

首先,我们想要处理位操作,那么,我们必须知道两个关键字;1、bit代表一个位。2、C相当于A不过只能代表一个bit。

a)位传送:其实和MOV的普通用法没有什么区别,只是每次只传送一个bit。例如:C=1、(P3)=11000101B、(P1)=00110101B。执行一下指令:
MOVP1.3,C
MOVC,P3.3
MOVP1.2,C
结果为:C=0,P3内容不变,P1的内容变为0011001B。

b)位状态子设置:
1、位清零:CLRC或bit可以实现给累加器C和地址内容清零。
2、位置位:SETBC或bit可以实现给累加器C和地址内容设置为1。

c)位逻辑运算:
1、位逻辑“与”:ANLC,bit执行这条指令之后bit的值不发生改变,把与的结果送给累加器C。
2、为逻辑“或”:ORLC,bit执行这条指令之后bit的值不发生改变,把或的结果送给累加器C。
3、位取反:CPLC;

d)位跳转指令(条件转移)
1、判断C:JC C为0跳转
JNC C为0不跳转
2、判断bit:JB bit位为1跳转
JBC bit位为1跳转,同时把bit清零
JNB bit位不为1跳转

 
  • 10
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值