Понимание знаков доллара и ярлыков 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
Инструкции перехода означают "ближайший вперед" или "ближайший назад", ссылаясь на анонимные метки.