美文网首页
6502芯片:寻址方式(一)(Addressing Modes)

6502芯片:寻址方式(一)(Addressing Modes)

作者: 苹果王子刘泽庆 | 来源:发表于2021-05-15 22:49 被阅读0次

隐式指令(Implicit)

对于6502芯片的很多指令来讲,需要操作信息的来源和目标位置是由操作指令隐式指定的,不需要我们人为的设置操作数。例如, 清除进位标志指令(CLC)和从子程序返回指令(RTS)就是隐式的。

累加器(Accumulator)

有些指令有一个选项可以直接操作累加器。程序员使用一个特定的操作字符A来实现这个个操作。

LSR  A   ;对累加器逻辑右移一位(Logical shift right one bit)
ROR  A   ; 向右循环移动一位(Rotate right one bit)

直接寻址(Immediate)

直接寻址允许我们直接在指令中指定一个8位常量。这个常量以一个特殊字符#开头,后面跟着数字表达式。例如:

 LDA  #10         ;将数字10($0A)加载到累加器中(Load 10 ($0A) into the accumulator)
 LDX  #LO LABEL   ;Load the LSB of a 16 bit address into X
 LDY  #HI LABEL   ;Load the MSB of a 16 bit address into Y

零页(Zero Page)

使用零页寻址模式的指令只有一个8位地址操作数。这限制了它只能寻址前256字节的内存(例如0000到00FF),其中地址的最有效字节总是0。在零页模式下,只有地址的最低有效字节被保存在指令中,使其缩短一个字节(对于节省空间很重要),并在执行期间减少一个内存获取(对于速度很重要)。

如果操作数求值为零页地址且指令支持这种模式(并非所有指令都支持),汇编程序将自动选择零页寻址模式。

LDA  $00         ;Load accumulator from $00
ASL  ANSWER      ;Shift labelled location ANSWER left

零页,X寄存器(Zero Page,X)

使用零页,X寄存器寻址时,指令将8位零页地址和X寄存器中加载的值进行累加运算,得到的数据就是直接寻址的地址。例如,如果X寄存器中加载的数据为$0F,则指令LDA $80,X首先进行$80 + $0F => $8F的运算。然后累加器将从$008F这个地址开始加载。

注意:
如果基址和寄存器的总和超过$FF,最终计算得到的地址计会抛掉最高位。例如:我们将上面例子中X寄存器中的数据改为$FF,计算则变为$80 + $FF => $7F(抛出最高位),累加器将从$007F加载,而不是$017F

 STY   $10,X       ;Save the Y register at location on zero page
 AND   TEMP,X      ;Logical AND accumulator with a zero page value

零页,Y寄存器(Zero Page, Y)

使用零页,Y寄存器寻址时,指令将8位零页地址和Y寄存器中加载的值进行累加运算,得到的数据就是直接寻址的地址。需要注意的是,这一模式只能用于LDX和STX指令。

LDX   $10,Y       ;Load the X register from a location on zero page
STX   TEMP,Y      ;Store the X register in a location on zero page

相关文章

网友评论

      本文标题:6502芯片:寻址方式(一)(Addressing Modes)

      本文链接:https://www.haomeiwen.com/subject/lodhjltx.html