单片机指令详解

单片机指令详解  

1、 数据传送类指令

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

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

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

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

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

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

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

8. SWAP:这个指令的功能是累加器的高、低四位进行互换。例如:(A)= 23H,执行SWAP     A指令之后 (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     DA  A           结果为123

2) 减法

a) 带错位减法

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

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

b) 减一

例如:DEC A  A自减一。

3) 乘法

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

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

4) 除法

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

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


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

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

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

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

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

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

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


4、控制转移类指令

a) 无条件转移指令

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

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

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

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

b) 条件转移指令

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

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

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

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

4. 子程序跳转:ACALL   addr11;调用addr11 处理子程序;
            LCALL   addr16;调用addr16处理子程序;

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

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


5、位操作指令

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

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

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值