Это университетское задание, поэтому необходимо использовать emu8086. При отсутствии emu8086.incПеремещение смещения или константы внутри макроса
Скажем, у меня есть
msg db "Hello"
msgend:
msglen1 equ $ - msg
msglen2 db $ - msg
Тогда:
mov ax, msgend - offset msg ; ax gets the correct length
mov ax, msglen1 ; correct length
mov ax, msglen2 ; correct length
; same names as offsets to make it clear,
; how which parameters would be passed.
; But not the same in real code.
TESTMACRO macro msg msgend msglen1 msglen2
mov ax, msg ; correct offset
mov ax, msgend ; correct offset
mov ax, msgend - offset msg ; zero length
mov ax, msglen1 ; again zero length
mov ax, msglen2 ; correct length, but it used up a word
endm
Зв Я не могу передать длину строки внутри макроса каким-либо образом, за исключением пропуска длины, выделенной словом. Но мне интересно, если я могу сделать это с постоянной константы.
'mov ax, msglen2' загружает слово из' db'. Он работает только потому, что байт после этого равен нулю. Вы правы, что это плохо, и вы должны организовать, чтобы длина была постоянной константой, не хранилась в памяти и не загружалась. –