Sayman wrote:думаю лучше сохранять стилистику Orgasm`а и делать локальные метки через точку.
а какие-то другие ассемблеры это поддерживают?
P.S. сейчас локальные метки в OrgAsm используются так:
Code: Select all
Работа с локальными метками. Имена локальных меток
должны начинаться с точки ".". Область "видимости" локальных меток распрост-
раняется до следующей обычной (не локальной) метки.
Пример 1:
~~~~~~~~~
	ld	hl,Mess1.Text
	ld	c,5Ch
	rst	10h
	;
	ld	hl,Mess2.Text
	ld	c,5Ch
	rst	10h
	;
	ld	bc,0041h
	rst	10h
	ret
Mess1:	db	"Text 1 ..."
.Text:	db	"Hello world !",0Dh,0Ah,0
Mess2:	db	"Text 2 ..."
.Text:	db	"Hello world ! ;)",0Dh,0Ah,0
  В данном примере показан доступ к локальным меткам по их полным именам.
Пример 2:
~~~~~~~~~
Test1:	ld	b,16
.loc1:	ld	a,(hl)
	or	a
	ret	z
	inc	hl
	djnz	.loc1
	ret
Test2:	ld	b,32
.loc1:	ld	a,(hl)
	or	a
	ret	z
	inc	hl
	djnz	.loc1
	ret
  Локальные метки .loc1 подпрограмм Test1 и Test2 не будут конфликтовать
между собой, поскольку их разделяет обычная (не локальная) метка Test2.
видимо внутри к имени локальной метки добавляется имя предыдущей обычной метки - при подстановке макросов такой предыдущей метки может не оказаться - придётся генерировать фейковые метки для каждого инстанса макроса, но наверное таки да - ты прав, такая реализация была бы логичнее и проще
P.P.S. Выглядеть это будет примерно так:
Code: Select all
m macro a1, a2, a3
  something a1
.l1:
  something a2
.l2:
  something a3
endm
  m 1,2,3
  m 4,5,6
  m 7,8,9
превратится в:
Code: Select all
m001 ; generated label for 1st instance of macro m
  something 1
.l1
  something 2
.l2
  something 3
m002 ; generated label for 2nd instance of macro m
  something 4
.l1
  something 5
.l2
  something 6
m003 ; generated label for 3rd instance of macro m
  something 7
.l1
  something 8
.l2
  something 9
P.P.P.S. В zmac локальные метки в макросах должны начинаться с ? и должны быть перечислены после аргументов в объявлении макроса - вот код, который только что попробовал:
Code: Select all
  18:                   test    macro   a1, a2, ?l1
  19:                           ld      hl,a1
  20:                   ?l1     ld      c,a2
  21:                           rst     10h
  22:                           jr c,?l1
  23:                           endm
  24:                   
  25:                   ;code of program
  26:                   
  27:   8100            START:
  28:                   
  29:   8100                    test    msg,5ch
  29:   8100  211D81            ld      hl,msg
  29:   8103  0E5C      ?c0000  ld      c,5ch
  29:   8105  D7                rst     10h
  29:   8106  38FB              jr c,?c0000
  29:   8108                    endm
  29:                   
  30:   8108                    test    msg+10,5ch
  30:   8108  212781            ld      hl,msg+10
  30:   810B  0E5C      ?c0001  ld      c,5ch
  30:   810D  D7                rst     10h
  30:   810E  38FB              jr c,?c0001
  30:   8110                    endm
надо будет отменить обязательное указание локальных меток в строке с аргументами и поддержать локальные метки начинающиеся с точки (в данный момент zmac разрешает метки начинающиеся с точки, но они считаются обычными)