单片机几种不同的寻址方法

  1. 立即寻址
  例: MOV A , #10H ;将立即数 10H 送给 A 累加器,即 (A) ← 10H

  注意:立即数的前面必有 “#” 标志。


  2.
直接寻址
  例: MOV A , 36H ;将内部 RAM 中 36H 单元内的数据

  送到累加器 A 中,即 A ← (36H)

  在上面这条指令中,带下划线的操作数是所在存储单元的地址,这种寻址方式称为直接寻址。直接寻址方式中操作数所在存储器的空间有板有 3 种 :

  (1) 内部数据存储器的 128 个字节单元 ( 内部数据存储器地址 00H~7FH)

  (2) 位地址空间 .

  (3) 特殊功能寄存器 , 特殊功能寄存器只能用直接寻址方式进行访问 .


  3.
寄存器寻址 (Rn)
  例: MOV A, R3 ;将通用寄存器 R3 中的数据送给 A ,即 A ← (R3)

  在上面这条指令中,带下划线的操作数 ( 源操作数 ) 是当前工作寄存器区

  的某个寄存器,这种寻址方式称为寄存器寻址。

  比如:

  XCH A, R1 ;累加器 A 和寄存器 R1 中的数互换

  ADD A, R2 ; 累加器 A 和寄存器 R2 中的数相加


  4.
间接寻址
  例: MOV R0, #30H

  MOV A , @R0 ;以 R0 中的内容作为操作数的地址 .A ← ((R0)). 在上面的指令中,带下划线的不是 R0 ,而是以( R0 )为地址,间接找到内部 RAM 中的 30H 单元,将 (30H) 送给 A ,这种寻址方式称为寄存器间接寻址。

可用 R0、R1 和 DPTR 作间址寄存器,访问片内 RAM 或片外 64KB 的 RAM 地址空间。

  比如:

  MOV DPTR, #0CFA0H ;将十六位地址 CFA0H 赋给数据指针 DPTR

  MOVX A, @DPTR ;将片外 RAM ( CFA0H )单元内的数送给 A

  5.基址加变址寻址
  例:
  MOVC A, @A+DPTR ;将地址为 (A) + (DPTR) 的 ROM  ;单元中的数送给 A
  在上面这条指令中,带下划线的操作数是以( DPTR )为基址,( A )为变址,将两者之和作为地址,找出该地址对应的 ROM 单元,再将该单元的数送给 A ,这种寻址方式称为基址加变址寻址方式。 MCS-51 中还有两条变址寻址指令:
  MOVC A, @A+PC
  MOVC A, @A+DPTR

  6.相对寻址
  例:
  CJNE A , #80H , BUDENG ;如 (A) ≠ 80H ,跳转到 BUDENG
  JNC DAYU ;如 (A) > 80H ,跳转到 DAYU
  ……
  BUDENG: SETB FLAG0 ;置位标志位 FLAG0
  ……
  DAYU: SETB FLAG1 ;置位标志位 FLAG1
  ……
  在上面这个程序片段中,带下划线的操作数指明了程序跳转的目的位置,这个目的位置的 PC 相对于下一条程序语句的 PC 不得超出 -128 ~ +127 字节的范围。

  7.特定寄存器寻址
  例:INC A ; 累加器内容加 1.
  INC DPTR ; 数据指针 DPTR 的内容加 1.
  累加器 A 和数据指针 DPTR 这两个使用最频繁的寄存器又称为特定寄存器 ,
  故称特定寄存器寻址 .

,  1. 立即寻址
  例: MOV A , #10H ;将立即数 10H 送给 A 累加器,即 (A) ← 10H

  注意:立即数的前面必有 “#” 标志。


  2.
直接寻址
  例: MOV A , 36H ;将内部 RAM 中 36H 单元内的数据

  送到累加器 A 中,即 A ← (36H)

  在上面这条指令中,带下划线的操作数是所在存储单元的地址,这种寻址方式称为直接寻址。直接寻址方式中操作数所在存储器的空间有板有 3 种 :

  (1) 内部数据存储器的 128 个字节单元 ( 内部数据存储器地址 00H~7FH)

  (2) 位地址空间 .

  (3) 特殊功能寄存器 , 特殊功能寄存器只能用直接寻址方式进行访问 .


  3.
寄存器寻址 (Rn)
  例: MOV A, R3 ;将通用寄存器 R3 中的数据送给 A ,即 A ← (R3)

  在上面这条指令中,带下划线的操作数 ( 源操作数 ) 是当前工作寄存器区

  的某个寄存器,这种寻址方式称为寄存器寻址。

  比如:

  XCH A, R1 ;累加器 A 和寄存器 R1 中的数互换

  ADD A, R2 ; 累加器 A 和寄存器 R2 中的数相加


  4.
间接寻址
  例: MOV R0, #30H

  MOV A , @R0 ;以 R0 中的内容作为操作数的地址 .A ← ((R0)). 在上面的指令中,带下划线的不是 R0 ,而是以( R0 )为地址,间接找到内部 RAM 中的 30H 单元,将 (30H) 送给 A ,这种寻址方式称为寄存器间接寻址。

可用 R0、R1 和 DPTR 作间址寄存器,访问片内 RAM 或片外 64KB 的 RAM 地址空间。

  比如:

  MOV DPTR, #0CFA0H ;将十六位地址 CFA0H 赋给数据指针 DPTR

  MOVX A, @DPTR ;将片外 RAM ( CFA0H )单元内的数送给 A

  5.基址加变址寻址
  例:
  MOVC A, @A+DPTR ;将地址为 (A) + (DPTR) 的 ROM  ;单元中的数送给 A
  在上面这条指令中,带下划线的操作数是以( DPTR )为基址,( A )为变址,将两者之和作为地址,找出该地址对应的 ROM 单元,再将该单元的数送给 A ,这种寻址方式称为基址加变址寻址方式。 MCS-51 中还有两条变址寻址指令:
  MOVC A, @A+PC
  MOVC A, @A+DPTR

  6.相对寻址
  例:
  CJNE A , #80H , BUDENG ;如 (A) ≠ 80H ,跳转到 BUDENG
  JNC DAYU ;如 (A) > 80H ,跳转到 DAYU
  ……
  BUDENG: SETB FLAG0 ;置位标志位 FLAG0
  ……
  DAYU: SETB FLAG1 ;置位标志位 FLAG1
  ……
  在上面这个程序片段中,带下划线的操作数指明了程序跳转的目的位置,这个目的位置的 PC 相对于下一条程序语句的 PC 不得超出 -128 ~ +127 字节的范围。

  7.特定寄存器寻址
  例:INC A ; 累加器内容加 1.
  INC DPTR ; 数据指针 DPTR 的内容加 1.
  累加器 A 和数据指针 DPTR 这两个使用最频繁的寄存器又称为特定寄存器 ,
  故称特定寄存器寻址 .

单片机几种不同的寻址方法

相关文章:

你感兴趣的文章:

标签云: