이것은 대학 과제이므로 emu8086을 사용해야합니다.매크로 내 오프셋 차이 또는 상수 전달
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
겠어요 - : 없음 emu8086.inc으로
이의 내가 그런
msg db "Hello"
msgend:
msglen1 equ $ - msg
msglen2 db $ - msg
있다고 가정 해 봅시다 한 단어에 할당 된 길이를 전달하는 것 외에는 어떤 식 으로든 매크로 내부에서 문자열의 길이를 전달할 수 없습니다. 하지만 나는 상수와 함께 할 수 있다면 흥미 롭습니다.
'mov ax, msglen2'는'db'에서 단어를로드합니다. 이후 바이트가 0이되기 때문에 작동합니다. 당신이 옳다는 것이 맞습니다. 그리고 길이가 메모리에 저장되고로드되지 않고 즉각적인 상수가되도록 정렬해야합니다. –