80C51单片机的指令系统

指令寻址方式

  1. 寄存器寻址

  1. 寄存器间接寻址

  1. 直接寻址

  1. 立即数寻址

  1. 相对寻址:主要为解决程序转移

  1. 变址寻址:主要针对程序存储器的寻址方式

MOVC A,@DPTR+A 前两个为程序存储器读指令
MOVC A,@PC+A
JMP @A+DPTR 无条件转移指令
  1. 位寻址:对数据位进行操作的指令

指令分类

  1. 数据传送类指令

属于复制性质而非搬移,常用助记符MOV
  1. 内部RAM数据传送指令:MOV

  1. 外部RAM数据传送指令

助记符为MOVX,X表示外部,只能通过累加器A使用间接寻址
  1. 程序存储器读指令

助记符为MOVC,C表示代码,只能通过A进行访问
  1. 数据交换指令

整字节交换指令

XCH A, Rn A和寄存器Rn内数据交换

半字节交换指令

XCHD A,Rn 只交换低半字节数据

累加器交换指令

SWAP A 将A的高低半字节数据交换

  1. 堆栈操作指令

SP作为间址寄存器,有PUSH和POP指令

  1. 算术运算类指令

  1. 加法指令

目的操作数是A

带进位

ADD A, Rn

不带进位

ADDC A,Rn

  1. 减法指令(同加法)

  1. 加1指令与减一指令

  1. 乘法指令

MUL AB 结果影响标志位,CY清0,OV=1则低字节送A,高字节送B否则只送A
  1. 除法指令

DIV AB 结果影响标志位,CY清0,OV=1则除数为0,不能进行,负责商存于A,余数存于B
  1. 十进制调整指令

  1. 逻辑运算及移位指令

  1. 逻辑与:ANL

  1. 逻辑或:ORL

  1. 逻辑异或:XRL

  1. 累加器清0和取反

CLR A 累加器清0
CPL A 累加器取反
  1. 移位指令

RL

循环左移

RR

循环右移

RLC

带进位的循环左移

RRC

带进位的循环右移

  1. 控制转移类指令

  1. 无条件转移
  1. LJMP addr16(无条件长转移指令64KB)

  1. AJMP addr11(无条件绝对转移指令2KB)

  1. SJMP rel(无条件短转移指令256B)

rel是带符号的补码数
向前转移 rel = 地址差 -2
向后转移 rel = FEH -地址差
  1. JMP @A+DPTR(无条件间接转移指令64KB)

  1. 有条件转移
  1. 累加器判0

JZ 若(A)= 0 / JNZ若(A) != 0 则pc = (pc)+2+rel
  1. 数值比较

CJNE A ,#data,rel
若(A)= data,pc = (pc)+3
若(A) > data,pc =(pc)+3+rel ,CY = 0
若(A) < data,pc =(pc)+3+rel ,CY = 1
  1. 减1条件转移指令

DJNZ Rn,rel
Rn = (Rn)-1
若(Rn )!=0,pc =(pc)+3 +rel

  1. 子程序调用和返回
  1. 绝对调用指令

ACALL addr11 和AJMP相类似,将(PC+2)低11位替换addr11
  1. 长调用指令:LCALL

  1. 返回指令:RET,RETI

  1. 空操作指令

NOP 消耗一个机器周期,PC+1,CPU不进行任何操作

  1. 位操作指令

  1. 位传送指令:MOV

  1. 位置位复位指令

SETB C 指定位置1
CLR C 指定位清0
  1. 位逻辑运算:ANL,ORL,CPL

  1. 位控制转移

JC rel

(CY)=1 , PC = (PC)+2+rel

JB bit,rel

(bit) =1 ,PC = (PC)+3+rel

JBC bit,rel

(bit) =1 ,PC = (PC)+3+rel, bit = 0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值