Цитата(_Алексей_ @ Mar 2 2009, 13:17)

...
Иногда возникает необходимость вставить посередине новую директиву или расширить массив. Из-за этого возникают проблемы, что нужно менять адресацию. Приходиться много править.
......
Если не хочется чего - не то делать - надо подумать, как этого не делать.
Код
.dseg
.org ... (если очень хочется, но мне не разу не понадобилось. Опять потом искать и менять)
dRcvdBuf:;начало буфера (например, приема)
dRcvdLen: .byte 1
dRcvdAdr: .byte 2
dRcvdTime: .byte 4
dRcvdName: .byte 20
dRcvdErrors: .byte 1
dRcvdVolts: .byte 2
dRcvdBufEnd:;это что бы следить за концом буфера
;И вставляй, что хочешь, само настроиться
;что бы привязать к началу буфера (для использоввания указателей и поддержания
одинакового смещения в разных программах) можно посчитать смещения от начала буфера
Код
.equ shRcvdLen=dRcvdLen-dRcvdBuf
.equ shRcvdAdr=dRcvdAdr-dRcvdBuf
;....................................................
.equ cRcvdBufLen=dRcvdBufE-dRcvdBuf;длина буфера
ldd rTmp,z+shRcvdLen
;Можно макрос написать:
Код
.macro mac_BufSet
@0: .byte @2
.equ @1=@0-BufStart
.endm
;-------------------------------
.dseg
dRcvdBuf:
.set BufStart=dRcvdBuf
mac_BufSet dRcvdLen,shRcvdLen,1
mac_BufSet dRcvdAdr,shRcvdAdr,2
mac_BufSet dRcvdTime,shRcvdTime,4
mac_BufSet dRcvdName,shRcvdName,20
...................
dRcvdBufEnd:
Как и на зеркало, не стоит на ассемблер пенять раньше времени.
Там еще препроцессор есть. Весьма удобная вещь, если научиться.
P.S.
Пришла по дороге идея, но прямо сейчас не на чем проверить:
Код
macro mac_BufSet
d@0: .byte @1
.equ sh@0=d@0-BufStart
.endm
mac_BufSet RcvdLen,1
mac_BufSet RcvdAdr,2
Еще меньше писанины