Понимание знаков доллара и ярлыков Z80

Я исследовал "фальшивое" приложение Брэндона В. для Ти-84, чтобы посмотреть, как оно работает. ( http://brandonw.net/calculators/fake/) Просматривая код, я заметил много меток и инструкций перехода, которые я не понял. Я хотел бы узнать, как он использует эти знаки доллара и прыжки. Мои вопросы задаются в следующем фрагменте кода: (Весь код взят из поддельного приложения Брэндона В.!)

    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 ответ

Решение

Знак $ имеет несколько применений. Большинство ассемблеров Z80 используют $ в качестве префикса для шестнадцатеричных чисел, как в этом случае:

jr z, $2A

Эти ассемблеры также используют $ для представления местоположения, где будет присутствовать строка кода в двоичном файле. Это полезно для создания констант для представления местоположений кода, как в этом случае:

value_to_jump = $+1
jr $10

В этом случае 'value_to_jump' является константой, которая будет содержать адрес, где хранится $10 (jr $10 имеет длину 2 байта, поэтому $+1 указывает на второй из этих байтов).

Наконец, некоторые ассемблеры позволяют вам создавать анонимные метки, такие как $$ или @@. Это тот случай, который вы видите здесь. В этом коде:

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

Инструкции перехода означают "ближайший вперед" или "ближайший назад", ссылаясь на анонимные метки.

Другие вопросы по тегам