0%

51单片机汇编指令查询

1、寻址

寻址方式

寻找操作数的地址的各种方式。

1.立即寻址

直接使用操作数将操作数存入相关地址中

1
2
MOV R0,#26H
MOV DPTR,#2000H
  • 立即数可以是8位或16位
  • 立即数前必须加#

2.直接寻址

将操作数视为地址,并将该地址存储的数据转递到相关地址中。

1
MOV A,30H //相当于对30H进行解引用,将30H值传入A中

3.寄存器寻址

直接使用寄存器名字作为地址并对进行解引用

1
MOV A,R1 //*R1

4.寄存器间接寻址

指定寄存器的内容为操作数的地址,该地址存储的内容才是操作数

1
MOV A,@R0 // @R0相当于**R0
  • 需使用间址符@
  • 对外部RAM进行读取时必须采用该方式

5.变址寻址

通过对基地址进行偏移获得当前操作数地址

1
2
MOV A,#06H
MOVC A,@A+PC

由于这里(@A+PC)整体应为一个地址,所以这里要对A使用间址符取06H作为地址的偏移量,因此该两行指令的意思为:将(@A+PC)地址中存储的数据传入A中

6.相对寻址

直接以PC作为基地址,只写出相对偏移量,有两种方式:

无条件转移:

1
SJMP 08H //使PC转移至当前PC值+08H(当前PC为下一指令地址)

条件转移:

1
JZ LOP //仅当(A)=0时执行,LOP为标号

7.位寻址

2、指令系统

1.数据传送指令

  • 片内数据传送:MOV 访问内部RAM
  • 片外数据传送:MOVX 访问外部RAM
  • 程序存储器数据传送:MOVC 访问内外ROM

2.数据交换指令

  • 字节交换(全部):

    1
    2
    XCH A,Rn
    XCH A,@Ri //寄存器区只有R0和R1可用作间接寻址
  • 字节交换(低四位):XCHD

  • 字节交换(高低互换):SWAP

3.堆栈操作指令

  • 入栈:PUSH SP先变化再压栈
  • 出栈:POP 先出栈再变化SP

4.算术运算指令

  • 加法
    • 不带进位: ADD
    • 带进位(Cy):ADDC
    • 加一:INC
  • 减法
    • 不带进位:SUB
    • 带进位:SUBB
    • 减一:DEC
  • 乘法:MUL
  • 除法:DIV

5.逻辑运算指令

  • 逻辑与:ANL
  • 逻辑或:ORL
  • 逻辑异或:XRL
  • 取反:CPL
  • 清零:CLR
  • 移位
    • 不带进位:RL/RR 左移/右移1位
    • 带进位:RLC/RRC ~

6.位运算

该运算对象仅针对Cy和bit型对象

  • 位传送:MOV
  • 置1:SETB
  • 清0:CLR
  • 取非:CPL
  • 取与:ANL
  • 取或:ORL

7.控制转移类指令

  • 无条件转移:LJMP 3字节,直接转移至该16位地址

  • 相对转移:SJMP

  • 条件转移:(条件转移皆为相对PC的转移)

    • 累加器判0:JZ/JNZ

    • 进位Cy判断:JC/JNC

    • 任意位判断:JB/JNB/JBC

      1
      2
      JB bit,rel
      // bit: 判断位 rel:偏移量
    • 比较不相等判断(不相等为满足条件):CJNE

      1
      CJNE A,#data,rel
  • 减1不为0判断转移:DJNZ