【问题标题】:Understanding Z80 dollar signs and labels了解 Z80 美元符号和标签
【发布时间】:2016-05-25 15:32:22
【问题描述】:

我正在研究 Brandon W 为 ti-84 设计的“假”应用程序,以了解它是如何工作的。 (http://brandonw.net/calculators/fake/) 在查看代码时,我注意到许多我不理解的标签和跳转指令。我想了解他是如何使用这些美元符号和跳跃的。我的问题在以下代码 sn-p 中提出:(所有代码均来自 Brandon W 的开源假应用程序!)

    resetKeys:
        xor a
        ld (de),a
$$:     ld a,(MenuCurrent) ;How is this label two dollar signs? What does this mean?
        cp 02h
        jr nz,$F           ;Are we jumping to the instruction at 0xF or to one of these dollar sign labels?
        ld hl,sFakeAppVar
        rst 20h
        B_CALL ChkFindSym
        jr c,$F            ;If we are jumping to 0xF, what are the dollar signs used for?
        ld a,b
        or a
        jr nz,$F
        inc de
        inc de
        ld a,(de)
        cp 25h
        jr z,ignoreAppsKeys
        cp 26h
        jr z,ignoreAppsKeys
        cp 27h
        jr z,ignoreAppsKeys
$$:     pop af              ;Here's another
        ld b,a
        ld a,(cxCurApp)
        cp 45h
        jr nz,$F
        ld a,b
        cp kCapS
        jr nz,$F

根据我的研究,美元符号用于表示十六进制或当前位置计数器。如果我错了,请纠正我。任何帮助将不胜感激!

【问题讨论】:

  • 如果我冒险猜测$F 意味着找到下一个(Forward)$$ 标签并分支/jmp 到它。我认为$$ 充当临时标签。 $B 很有可能会转到 Backward 到之前的 $$ 标签。这只是基于其他一些汇编器语法的猜测。
  • @MichaelPetch 非常感谢!
  • jr c,$F 如果进位标志为 1,则为相对跳转。所以如果carry flag == 1 那么PC = PC + 0x0F。不要忘记 PC 已经指向下一条指令,所以要明确的是 PC = address_of_next_instruction + 0x0F

标签: assembly z80


【解决方案1】:

$ 符号有多种用途。大多数 Z80 汇编器使用 $ 作为十六进制数字的前缀,就像在这种情况下:

jr z, $2A

这些汇编器还使用 $ 来表示当前代码行将在二进制文件中的位置。这对于创建常量来表示代码位置很有用,就像在这种情况下:

value_to_jump = $+1
jr $10

在这种情况下,'value_to_jump' 是一个常量,它将保存 $10 的存储地址(jr $10 是 2 字节长,因此 $+1 指向这些字节中的第二个)。

最后,一些汇编程序允许您创建匿名标签,例如 $$ 或 @@。这就是您在此处看到的情况。在这段代码中:

jr $f
....
$$:
....
jr $b

跳转指令的意思是“最近的向前”或“最近的向后”,指的是匿名标签。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 2021-07-11
    • 2017-03-10
    • 1970-01-01
    • 2012-03-26
    • 2016-11-04
    • 2021-08-13
    相关资源
    最近更新 更多