51单片机指令表

单片机教程网 2011年10月02日

      此表主要是为了方便大家查阅每条指令的作用,写法以及字节数和周期数,建议大家保存为书签。

      助记符

      指令说明

      字节数

      周期数

      (数据传递类指令)

      MOV

      A,Rn

      寄存器传送到累加器

      1

      1

      MOV

      A,direct

      直接地址传送到累加器

      2

      1

      MOV

      A,@Ri

      累加器传送到外部RAM(8 地址)

      1

      1

      MOV

      A,#data

      立即数传送到累加器

      2

      1

      MOV

      Rn,A

      累加器传送到寄存器

      1

      1

      MOV

      Rn,direct

      直接地址传送到寄存器

      2

      2

      MOV

      Rn,#data

      累加器传送到直接地址

      2

      1

      MOV

      direct,Rn

      寄存器传送到直接地址

      2

      1

      MOV

      direct,direct

      直接地址传送到直接地址

      3

      2

      MOV

      direct,A

      累加器传送到直接地址

      2

      1

      MOV

      direct,@Ri

      间接RAM 传送到直接地址

      2

      2

      MOV

      direct,#data

      立即数传送到直接地址

      3

      2

      MOV

      @Ri,A

      直接地址传送到直接地址

      1

      2

      MOV

      @Ri,direct

      直接地址传送到间接RAM

      2

      1

      MOV

      @Ri,#data

      立即数传送到间接RAM

      2

      2

      MOV

      DPTR,#data16

      16 位常数加载到数据指针

      3

      1

      MOVC

      A,@A+DPTR

      代码字节传送到累加器

      1

      2

      MOVC

      A,@A+PC

      代码字节传送到累加器

      1

      2

      MOVX

      A,@Ri

      外部RAM(8 地址)传送到累加器

      1

      2

      MOVX

      A,@DPTR

      外部RAM(16 地址)传送到累加器

      1

      2

      MOVX

      @Ri,A

      累加器传送到外部RAM(8 地址)

      1

      2

      MOVX

      @DPTR,A

      累加器传送到外部RAM(16 地址)

      1

      2

      PUSH

      direct

      直接地址压入堆栈

      2

      2

      POP

      direct

      直接地址弹出堆栈

      2

      2

      XCH

      A,Rn

      寄存器和累加器交换

      1

      1

      XCH

      A, direct

      直接地址和累加器交换

      2

      1

      XCH

      A, @Ri

      间接RAM 和累加器交换

      1

      1

      XCHD

      A, @Ri

      间接RAM 和累加器交换低4 位字节

      1

      1

      (算术运算类指令)

      INC

      A

      累加器加1

      1

      1

      INC

      Rn

      寄存器加1

      1

      1

      INC

      direct

      直接地址加1

      2

      1

      INC

      @Ri

      间接RAM 加1

      1

      1

      INC

      DPTR

      数据指针加1

      1

      2

      DEC

      A

      累加器减1

      1

      1

      DEC

      Rn

      寄存器减1

      1

      1

      DEC

      direct

      直接地址减1

      2

      2

      DEC

      @Ri

      间接RAM 减1

      1

      1

      MUL

      AB

      累加器和B 寄存器相乘

      1

      4

      DIV

      AB

      累加器除以B 寄存器

      1

      4

      DA

      A

      累加器十进制调整

      1

      1

      ADD

      A,Rn

      寄存器与累加器求和

      1

      1

      ADD

      A,direct

      直接地址与累加器求和

      2

      1

      ADD

      A,@Ri

      间接RAM 与累加器求和

      1

      1

      ADD

      A,#data

      立即数与累加器求和

      2

      1

      ADDC

      A,Rn

      寄存器与累加器求和(带进位)

      1

      1

      ADDC

      A,direct

      直接地址与累加器求和(带进位)

      2

      1

      ADDC

      A,@Ri

      间接RAM 与累加器求和(带进位)

      1

      1

      ADDC

      A,#data

      立即数与累加器求和(带进位)

      2

      1

      SUBB

      A,Rn

      累加器减去寄存器(带借位)

      1

      1

      SUBB

      A,direct

      累加器减去直接地址(带借位)

      2

      1

      SUBB

      A,@Ri

      累加器减去间接RAM(带借位)

      1

      1

      SUBB

      A,#data

      累加器减去立即数(带借位)

      2

      1

      (逻辑运算类指令)

      ANL

      A,Rn

      寄存器“与”到累加器

      1

      1

      ANL

      A,direct

      直接地址“与”到累加器

      2

      1

      ANL

      A,@Ri

      间接RAM“与”到累加器

      1

      1

      ANL

      A,#data

      立即数“与”到累加器

      2

      1

      ANL

      direct,A

      累加器“与”到直接地址

      2

      1

      ANL

      direct, #data

      立即数“与”到直接地址

      3

      2

      ORL

      A,Rn

      寄存器“或”到累加器

      1

      2

      ORL

      A,direct

      直接地址“或”到累加器

      2

      1

      ORL

      A,@Ri

      间接RAM“或”到累加器

      1

      1

      ORL

      A,#data

      立即数“或”到累加器

      2

      1

      ORL

      direct,A

      累加器“或”到直接地址

      2

      1

      ORL

      direct, #data

      立即数“或”到直接地址

      3

      1

      XRL

      A,Rn

      寄存器“异或”到累加器

      1

      2

      XRL

      A,direct

      直接地址“异或”到累加器

      2

      1

      XRL

      A,@Ri

      间接RAM“异或”到累加器

      1

      1

      XRL

      A,#data

      立即数“异或”到累加器

      2

      1

      XRL

      direct,A

      累加器“异或”到直接地址

      2

      1

      XRL

      direct, #data

      立即数“异或”到直接地址

      3

      1

      CLR

      A

      累加器清零

      1

      2

      CPL

      A

      累加器求反

      1

      1

      RL

      A

      累加器循环左移

      1

      1

      RLC

      A

      带进位累加器循环左移

      1

      1

      RR

      A

      累加器循环右移

      1

      1

      RRC

      A

      带进位累加器循环右移

      1

      1

      SWAP

      A

      累加器高、低4 位交换

      1

      1

      (控制转移类指令)

      JMP

      @A+DPTR

      相对DPTR 的无条件间接转移

      1

      2

      JZ

      rel

      累加器为0 则转移

      2

      2

      JNZ

      rel

      累加器为1 则转移

      2

      2

      CJNE

      A,direct,rel

      比较直接地址和累加器,不相等转移

      3

      2

      CJNE

      A,#data,rel

      比较立即数和累加器,不相等转移

      3

      2

      CJNE

      Rn,#data,rel

      比较寄存器和立即数,不相等转移

      2

      2

      CJNE

      @Ri,#data,rel

      比较立即数和间接RAM,不相等转移

      3

      2

      DJNZ

      Rn,rel

      寄存器减1,不为0 则转移

      3

      2

      DJNZ

      direct,rel

      直接地址减1,不为0 则转移

      3

      2

      NOP

      空操作,用于短暂延时

      1

      1

      ACALL

      add11

      绝对调用子程序

      2

      2

      LCALL

      add16

      长调用子程序

      3

      2

      RET

      从子程序返回

      1

      2

      RETI

      从中断服务子程序返回

      1

      2

      AJMP

      add11

      无条件绝对转移

      2

      2

      LJMP

      add16

      无条件长转移

      3

      2

      SJMP

      rel

      无条件相对转移

      2

      2

      (布尔指令)

      CLR

      C

      清进位位

      1

      1

      CLR

      bit

      清直接寻址位

      2

      1

      SETB

      C

      置位进位位

      1

      1

      SETB

      bit

      置位直接寻址位

      2

      1

      CPL

      C

      取反进位位

      1

      1

      CPL

      bit

      取反直接寻址位

      2

      1

      ANL

      C,bit

      直接寻址位“与”到进位位

      2

      2

      ANL

      C,/bit

      直接寻址位的反码“与”到进位位

      2

      2

      ORL

      C,bit

      直接寻址位“或”到进位位

      2

      2

      ORL

      C,/bit

      直接寻址位的反码“或”到进位位

      2

      2

      MOV

      C,bit

      直接寻址位传送到进位位

      2

      1

      MOV

      bit, C

      进位位位传送到直接寻址

      2

      2

      JC

      rel

      如果进位位为1 则转移

      2

      2

      JNC

      rel

      如果进位位为0 则转移

      2

      2

      JB

      bit,rel

      如果直接寻址位为1 则转移

      3

      2

      JNB

      bit,rel

      如果直接寻址位为0 则转移

      3

      2

      JBC

      bit,rel

      直接寻址位为1 则转移并清除该位

      2

      2

      (伪指令)

      ORG

      指明程序的开始位置

      DB

      定义数据表

      DW

      定义16 位的地址表

      EQU

      给一个表达式或一个字符串起名

      DATA

      给一个8 位的内部RAM 起名

      XDATA

      给一个8 位的外部RAM 起名

      BIT

      给一个可位寻址的位单元起名

      END

      指出源程序到此为止

      (指令中的符号标识)

      Rn

      工作寄存器R0-R7

      Ri

      工作寄存器R0 和R1

      @Ri

      间接寻址的8 位RAM 单元地址(00H-FFH)

      #data8

      8 位常数

      #data16

      16 位常数

      addr16

      16 位目标地址,能转移或调用到64KROM 的任何地方

      addr11

      11 位目标地址,在下条指令的2K 范围内转移或调用

      Rel

      8 位偏移量,用于SJMP 和所有条件转移指令,范围-128~+127

      Bit

      片内RAM 中的可寻址位和SFR 的可寻址位

      Direct

      直接地址,范围片内RAM 单元(00H-7FH)和80H-FFH

      $

      指本条指令的起始位置