6502带标签的寻址模式

Dan*_*ega 3 assembly label 6502 addressing-mode

我正在查看此站点的一些代码示例:

http://www.6502asm.com/

看着它我看到他们有一些指令,而不是直接使用内存位置,他们使用标签,例如,在alive.asm中:

lda ypos,x
Run Code Online (Sandbox Code Playgroud)

而ypos是

ypos:
dcb $00,$02,$20,$02,$40,$02,$60,$02
dcb $80,$02,$a0,$02,$c0,$02,$e0,$02
dcb $00,$03,$20,$03,$40,$03,$60,$03
dcb $80,$03,$a0,$03,$c0,$03,$e0,$03
dcb $00,$04,$20,$04,$40,$04,$60,$04
dcb $80,$04,$a0,$04,$c0,$04,$e0,$04
dcb $00,$05,$20,$05,$40,$05,$60,$05
dcb $80,$05,$a0,$05,$c0,$05,$e0,$05
Run Code Online (Sandbox Code Playgroud)

我知道标签的不同取决于汇编程序,但我假设它正在通过该列表,但它的特殊性如何工作

Lau*_* H. 6

以下是有关说明的详细信息lda ypos,x:

  1. 如果ypos位于零页面之外(等于或大于0x0100):

    • 操作码是0xBD:它使用索引寄存器X 的索引绝对寻址模式,也称为绝对X模式
    • 它通过将X寄存器的内容添加到由标签表示的2字节地址ypos来计算地址,然后加载A寄存器(累加器),其中字节位于计算的地址
    • 它的大小是3个字节 ; 如果超过页面边界,则需要4个CPU周期 + 1个周期,即如果ypos高字节与计算地址的高字节不同ypos + X.
    • 它只更新状态标志N和Z(负数和零)

  2. 如果ypos位于零页面内(在0x00和0xFF之间),则它可能取决于您的汇编程序(检查操作码):它使用索引绝对寻址模式并且它如前所述工作,或者:
    • 操作码是0xB5:它使用索引寄存器X 的索引零页寻址模式,也称为zeropage,X模式
    • 它通过将X寄存器的内容添加到由标签表示的1字节地址来计算地址ypos,包含在0x00-0xFF范围内,然后它将A寄存器(累加器)加载到位于计算地址的字节.
      注意:要非常小心,因为如果ypos超出零页面定义的值,它可能不是预期的行为.汇编器中可能有一种特定的语法来强制使用绝对的X寻址模式.
    • 它的大小是2个字节 ; 它需要4个CPU周期
    • 它只更新状态标志N和Z(负数和零)