在宏内传递偏移差异或常量

时间:2016-09-16 13:19:49

标签: assembly emu8086

这是一项大学任务,因此必须使用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

因此。我不能以任何方式传递宏内部的字符串长度,除非传递一个单词中分配的长度。 但我很感兴趣,如果我能用等于常数做到这一点。

1 个答案:

答案 0 :(得分:3)

使用=来定义您的等同而不是equ

equ等同的值在使用时被评估,在您的情况下,$中的msglen1mov ax, msgLen1的地址替换}指令。

=等式的值在定义点被评估,在这种情况下应该为您提供所需的值。