
Сообщение от
Dart Alver
Кавычки в параметрах макроса по лексике не подходили.
Ну вот я как раз и говорю о том, что у автора вопроса проблемы с формулированием целей и задачи. Чтобы его понять, приходится какое-то время вникать в его макрос, пытаться понять, что он там настроил, да и вообще, что у него в голове за поток сознания, а не просто прочитать комментарий, написанный нормальным языком, мол стоит задача такая-то такая-то, проблема такая-то такая-то.
Посмотрел, что там у Интела с макросами, попробовал написать так же и тут, и это почти заработало, но, поскольку таких имен ни переменных, ни лейблов не существует, там специальный синтаксис для получения значений для сравнения таких вот псевдопеременных из имен регистров, и специальная директива для получения типа входящей переменной, чего в sjasm вроде бы нет. Не помешало бы добавить. Я немного взломал систему, если можно так выразиться, получилось вот так:
Код:
macro load8 l8, h8
display $h8
display $l8
ld l8, h8
endm
macro load16 l16, h16
display $h16
display $l16
if $h16 == $AF
display "h16=AF"
endif
if $l16 == $BC
display "l16=BC"
endif
push h16
pop l16
endm
load8 B,C
load16 DE,AF
Это почти работает, что-то можно сравнивать, но, понятное дело, только с теми регистрами и регистровыми парами, которые умещаются в 16-чную систему счисления. HL, SP, IX, IY, штрихи всякие в пролете. Но это чисто поржать, я не рекомендую так это использовать, т.к. явно тут вылезли какие-то недоработки в компиляторе, которые нужно устранить.
Ну не знаю, может Ped7g прокомментирует, может быть там есть возможности, о которых мы не знаем.
Upd: Хотя вот так все работает:
Код:
B equ 0
C equ 1
D equ 2
E equ 3
H equ 4
L equ 5
A equ 7
b equ 0
c equ 1
d equ 2
e equ 3
h equ 4
l equ 5
a equ 7
BC equ 0
DE equ 1
HL equ 2
SP equ 3
AF equ 3
bc equ 0
de equ 1
hl equ 2
sp equ 3
af equ 3
macro ld8 dst, src
display "LD8"
display src
display dst
if dst == H
display "dst = reg H"
endif
ld dst,src
ld a,b ; это проставит инструкцию с реальными регистрами A и B
endm
ld8 B,C
ld8 H,E
Код:
SjASMPlus Z80 Cross-Assembler v1.21.0 (https://github.com/z00m128/sjasmplus)
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
> LD8
> 0x0001
> 0x0000
> LD8
> 0x0003
> 0x0004
> dst = reg H
Pass 3 complete
Errors: 0, warnings: 0, compiled: 208 lines, work time: 0.000 seconds
И никаких костылей, или байтов в памяти.