是否可以使用由内部宏使用的外部宏参数?

问题描述

data segment
    str db "hello$" 
    str2 db "world$" 
data ends  
 
adds macro a,b
    lea si,a
    lea di,b
endm
    
subs macro x,y
    adds x,y
endm  

code segment
assume cs:code,ds:data
start:  mov ax,data
        mov ds,ax
        
        subs str,str2
        
        mov ah,4ch
        int 21h
        
        end start
        code ends

以上仅是示例,在整数工作正常的情况下,但是在这种情况下使用字符串时,为什么它不将str替换为str,str2? 请快速帮助我,我需要为该项目进行工作。 它生成错误是:

enter image description here

解决方法

缺少嵌套宏是EMU8086的局限性,我认为这是不可能的。如果您使用的是MASM / TASM / JWASM,则应正确处理。

在较新版本的MASM str上是386上的一条指令,为避免将MASM出错,将str重命名为其他名称是个好主意。

代码的最后两行是相反的,应该是:

code ends
end start

在用ends结束程序之前,您必须以end结束当前段。