【问题标题】:6502 Addressing mode with labels6502 带标签的寻址模式
【发布时间】:2018-12-02 22:22:42
【问题描述】:

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

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

我知道标签因汇编程序而异,但我假设它正在通过该列表,但它的特异性如何工作

【问题讨论】:

  • 机器指令将一个字节从地址ypos+X加载到A中。这是一种寄存器+立即位移寻址模式。它不会修改X,您必须单独进行。
  • 我的答案适合你吗?如果是,请接受,否则请指出缺少的内容。

标签: assembly label 6502 addressing-mode


【解决方案1】:

这里是关于指令lda ypos,x的详细信息:

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

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

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

【讨论】:

  • "如果 ypos 定义的值超出了零页..." 除了地址换行之外,您还有更多问题。您的数据可能会被堆栈破坏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 2014-11-10
  • 2012-05-11
  • 2023-02-07
相关资源
最近更新 更多