多定义符号 masm 5.0

Multi Defined symbol masm 5.0

抱歉,我会有一个probelam。 在实践中,MASM 汇编程序无法识别我的宏标签,或者更确切地说,即使我将它们定义为本地的,以下 returns 对我来说:

ERROR A2005 Multidefined Symbol

....

This for more and more time

我会post这里的宏代码:

input_int MACRO register

    LOCAL input, stop_input

    push    ax
    push    cx

    xor     register, register

    mov     cx, 5

    input:  mov   ah, 01h
            int   21h
            xor   ah, ah

            cmp   al, 13
            je   stop_input

            cmp   al, 48
            jb    stop
    
            cmp   al, 57
            ja    stop

            sub   al, 48
            mov   store_in, ax
            mov   ax, 10
            mul   register
            add   store_in, ax
            mov   register, store_in

            loop  input
            pop   cx
            pop   ax
    
    stop_input: mov  ah, 02h
                mov  dl, 13
                int  21h
                mov  dl, 10
                int  21h
       ENDM

这里扩展那里

code SEGMENT PARA PUBLIC        

    ASSUME ss: stack, ds: data, cs: code

_start:
    ;load the DS
    mov     ax, data
    mov     ds, ax

    ;ouput msg1
    mov     ah, 09h
    mov     dx, OFFSET msg1
    int     21h

    ;input1
    input_int bx

    ;output msg2
    mov   ah, 09h
    mov   dx, OFFSET msg2
    int   21h 
    
    ;input msg2
    input_int dx

    stop: mov   ah, 04ch
          mov   al, 1
          int   21h

 code ENDS       
    END _start

我没有错误,但是有。 在我看来,汇编器已经疯了,你推荐另一个版本的 MASM 来生成没有这个错误的 16 位可执行文件。 我目前使用的是 MASM 5.0。

编辑: 我写了一个新程序两次调用同一个宏,结果是:

同样的错误。 代码:

abMacro MACRO

    LOCAL jump, doNothing

    mov     cx, 5

    jump: add   ax,10

           cmp   ax, 30
           je    doNothing

           loop  jump

     doNothing: nop

ENDM

stack SEGMENT PARA STACK

    db      ?

stack ENDS


data SEGMENT PARA PUBLIC

     db      ?

data ENDS

code SEGMENT PARA PUBLIC

     ASSUME ss: stack, ds: data, cs: code

_start:

     mov     ax, data
     mov     ds, ax

     abMacro

     abMacro

     mov     ah, 04ch
     mov     al, 1
     int     21h

code ENDS
     END _start

在我看来,汇编程序已经疯了。 对我来说,它给了我一个写得不好的汇编器,或者我触摸了一些文件,这不太可能,因为我什至不知道源在哪里。

超级奇怪,但是在删除宏定义和 LOCALs 之间的空行后它开始工作了。

所以如果你的宏声明是

abMacro MACRO

    LOCAL jump, doNothing

它将 return 一堆重定义错误,如您的 post

但是如果你去掉那个空行,就会变成这样

abMacro MACRO
    LOCAL jump, doNothing