带标签的6502寻址模式

时间:2018-06-23 20:43:36

标签: assembly label 6502 addressing-mode

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

http://www.6502asm.com/

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

lda ypos,x

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

我知道标签随汇编程序的不同而不同,但我假设它会遍历该列表,但是它的特异性如何工作

1 个答案:

答案 0 :(得分:5)

以下是有关指令lda ypos,x的详细信息:

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

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

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