了解Z80美元符号和标签

时间:2016-02-14 19:54:37

标签: assembly z80

我正在研究Brandon W"假的"应用ti-84来了解它是如何工作的。 (http://brandonw.net/calculators/fake/)在查看代码时,我注意到许多我不理解的标签和跳转指令。我想了解他是如何使用这些美元符号和跳跃的。我的问题在以下代码片段中提出:(所有代码均来自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

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

1 个答案:

答案 0 :(得分:2)

$符号有多种用途。大多数Z80汇编器使用$作为十六进制数的前缀,如下例所示:

jr z, $2A

这些汇编程序还使用$来表示当前位置的代码行将在二进制文件中。这对于创建表示代码位置的常量非常有用,例如:

value_to_jump = $+1
jr $10

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

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

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

跳转指令意味着"最接近前进"或者"最接近向后",指的是匿名标签。