Это общеизвестный и распространённый приём. Он экономит ОЗУ и удобен, т.к при наборе не надо искать место где-бы втиснуть текстовую строчку. Я так делаю уже более 20 лет. Только я использую RST 18H. Заимствовал из ROM-BIOS ГДР-овских компьютеров (а также и другие RST). Эти RST встроены во все мои ДОС (блок RST кидается на адрес 8 при WARM BOOT DOS), т.к в большинстве ДОС на КР580/Z80 ZERO-page именно для этого и резервирована. Также встречал этот приём при дизассемблировании многих известных CP/M-программ. Этот приём также использован в многих программах известного программиста для ОРИОНА В.Сугоняко. Привожу вариант, как это встречается во многих фирменных CP/M-программах в варианте для CP/M уже не просто в дизассемблированном виде, а в том виде как это было в исходниках (т.е реконструкция). Хотя RST гораздо выгоднее. Использование макро порождает иногда довольно глупый код, например CALL, а затем RET. Хотя (т.к мы не на 80x86) на 8-ми разрядках просто ставят JMP вместо CALL и последующего RET.
Код:
.
fmssg EQU 9
CPM MACRO PARAM
LD C,PARAM
CALL 5
ENDM
MSSG MACRO PARAM
LOCAL M1
CALL M1
defb PARAM
defb '$'
M1: POP DE
CPM fmssg
ENDM
CRMSSG MACRO PARAM
LOCAL M1
CALL M1
defb 13,10
defb PARAM
defb '$'
M1: POP DE
CPM fmssg
ENDM
Пример использования в тексте:
CRMSSG 'Здравствуйте Denn !'
Если используется вариант CALL, то это затрудняет дизассемблирование не только неопытным, а всем (я так понимаю, что мерзкое слово нуб означает неопытный). Если использовать RST 18H, то это по крайней мере сразу обнаруживается (а если дизассемблер позволяет, то это можно даже автоматизировать).
файл RST.INC
Код:
.
; портит ячейки 8...40H
BEGRST:
;INPUT:
PUSH HL ; RST 8 ;1
PUSH DE ;1
PUSH BC ;1
CALL CONST ;3
JR @INPUT ;2
;SCOUTA:
JP SCOUTA ; RST 10H ; 3
TXTOU1: CALL SCOUTA ; 3
JR TXLOOP ; 2
;TXTOUT:
EX (SP),HL ; RST 18H ; 1
TXLOOP: LD A,(HL) ; 1
INC HL ; 1
OR A ; 1
JR NZ,TXTOU1 ; 2
EX (SP),HL ; 1
RET ; 1
;STATUS:
PUSH HL ; RST 20H ; 1
PUSH DE ; 1
PUSH BC ; 1
CALL CONST ; 3
JR POP_RG ; 2
;RDKBRD:
JP YF81B ; RST 28H ; 3
DS 1 ; 1
POP_RG: POP BC ; 1
POP DE ; 1
POP HL ; 1
RET ; 1
;CONIN:
PUSH HL ; RST 30H ; 1
PUSH DE ; 1
PUSH BC ; 1
CALL CONIN ; 3
JR POP_RG ; 2
JP CCP ; RST 38H
@INPUT: OR A
CALL NZ,CONIN
JR POP_RG
RSTLEN EQU $-BEGRST
@ENRST EQU 8+RSTLEN
[свернуть]
Этот файл кидается командой LDIR на адрес 8 в DOS, а также вообще в любых программах. После чего доступны вызовы по RST. Я RST не придумывал (не конкретно код, а назначание конкретных RST), а заимствовал, отчего получил совместимость. Есть вариант блока RST и для КР580 (но он более громоздкий, менее удобен для иллюстрации). Здесь посмотрите на RST 18H.
Думаю, что такой приём передачи параметров удобен для передачи параметров в ЯВУ для процессоров у которых хреново со стеком (в частности, 6502 и 6800, про другие подобные CPU просто не знаю). Отчего, наверное, трудно делать компиляторы ЯВУ в которых данные передаются через стек.