6502的全部寻址方式

6502

一、6502的寻址方式

1、立即寻址

在这种寻址方式中,指令的操作对象部分直接给出了操作数本身,该操作数就称为立即数。

LDA #$FF

其中,$是CEC-I机中十六进制数的标志。

解释:将立即数$FF送累加器A。

2、绝对寻址

这种寻址方式中,指令的操作对象不是操作数自身,而是操作数所在地址的地址码(称为绝对地址或者直接地址)。

例如:

LDA $0c00

解释:吧绝对地址为$0c00单元的内容提取出来送到累加器A。

3、零页寻址

零页寻址与绝对寻址类似。

相同点:都是在操作对象部分直接给出操作数所在地址

不同点:零页寻址的方式的寻址范围只能在零页的256个单元中,即只能在$0000~$00FF中。

所以零页寻址的地址只许给操作数的低八位,其高八位都约定为零$00。

例如:

LDA $0C

解释:给出了操作数所在地址的低八位0C,表面操作数所在地址为$000C单元。此功能是把$000C单元中的内容提取出来送累加器A。

4、累加器寻址

这种寻址方式的操作数在累加器中。

例如:

ROL A

解释:把累加器A中的操作数连同进位位C循环左移一位。

5、隐含寻址

操作数所在地址隐含于操作码之中,故采用隐含寻址的指令均为一字节指令。

例如:

INX        (IN 的机器码为 E8)
DEY        (DE 的机器码为 CA)

解释:X+1->X,Y-1->Y。

6、绝对变址寻址

包含使用X寄存器的绝对变址和使用Y寄存器的绝对变址。

1)绝对X变址寻址(ABS,X)

是使用X变址寄存器进行变址的一种寻址方式。

在这种寻址中,是把指令中给出的16地址作为基地址与偏移量(即X变址寄存器中的内容)相加后所得的地址,再把这个地址作为操作数实际存放的地址。

例如:(设X寄存器中的内容为$0B)

LDA  $0340+X

解释:就是将$034B单元中的内容提取出来送累加器A。

STA $0340,X

解释:其功能是把累加器A中的内容取出来放到储存器($0340+x)单元中去。

2)绝对Y变址寻址(ABS,Y)

与X变址寻址类似,只是使用的是Y寄存器。

7、零页变址寻址

包含零页X变址(Z.PAGE,X)和零页Y变址(Z.PAGE,Y)。

区别在于零页变址寻址中只给出了一个8位地址,即零页地址的低八位,其高八位约定为$00。

例如:

LDA $0A,X
LDA $0A,Y

解释:把储存器($000A+X)地址中的数据放到累加器A中,把储存器($000A+Y)地址中的数据放到累加器A中。

8、间接寻址

在这种寻址方式中,指令的操作对象部分给出的是操作数所在地址的地址,称为间接地址。

例如:

JMP ($100A)

解释:
从间接地址$100A单元中取出操作数有效地址的低八位(假设为$A5),
再从间接地址加1单元($100A+1单元)中取出操作数有效地址的高八位(假设为$20),
则 $20A5 即为操作数的实际地址;然后将$20A5送程序计数器PC,CPU随即就转向PC内容所指的单元($20A5单元)去执行命令。

9、先变址(X)间接寻址(IND,X)

它是零页X变址和间接寻址两种方式的结合。分如下几步:

  • 以X作为变址寄存器,将零页中的基地址IND和X中的内容相加得到(IND+X)
  • 以(IND+X)作为间接地址,从(IND+X)单元和(IND+X+1单元)中取出操作数的有效地址

例如:(假设X为$02)

LDA ($0A,X)

解释:

  • 找到间接地址:$0A+$02->$0C
  • 从$0C 和 $0D($0C+1得到的)中分别取出有效地址,作为实际存放数据的低八位($EE)和高八位($0F)
  • 将操作数实际存放地址$0FEE中的内容取出来送累加器A中。

10、后变址(Y)间接寻址((IND),Y)

这是间接寻址和绝对Y变址方法相结合的一种寻址方式。又称为:先间接寻址后绝对Y变址。

例如:

LDA ($08),Y

解释:

  • 假设$08单元中内容为 $35,$09单元中内容为$0F,Y的内容为$02
  • 先间接寻址,首先存指定的零页地址$08和$08+1单元中分别取出他们的内容合并为一个16地址 $0F35.
  • 再绝对Y变址,获取$0F35+$02->$0F37,即此操作数存放的有效地址。
  • 最后从有效地址中取出送累加器A中。

11、相对寻址

哦吼,没看懂。。。。

二、总结

这么多的寻址方式只是为了让程序执行速度更快,内存少的目的。

  • 一般来说,累加器寻址和隐含寻址是最快的,因为操作数是在CPU的内部寄存器中,取操作数不必要范围存储器,所以执行速度快。
  • 零页寻址占用内存少,执行速度快。所以监控程序、BASIC解释程序以及DOS都大量使用零页寻址。
  • 变址寻址方式常用语处理数据块。
  • 间接寻址常用来存放专用程序的入口地址。
  • 立即寻址常用语设置初始数据。
posted @ 2021-12-07 00:02  Abraverman  阅读(669)  评论(0编辑  收藏  举报