Nel programma seguente, quando assemblo con MASM esce la scritta > Executing: C:\Arch-Lab\_Editor\ConTEXT\ConExec.exe "C:\Arch-Lab\Bin\Sys\AsmConText.bat" xxxx

Assembling: xxxx.asm

xxxx.asm(41) : error A2005: symbol redefinition : post_intro

pr_str(5): Macro Called From
xxxx.asm(41): Main Line Code

xxxx.asm(41) : error A2005: symbol redefinition : print

pr_str(9): Macro Called From
xxxx.asm(41): Main Line Code

xxxx.asm(41) : error A2005: symbol redefinition : continua

pr_str(13): Macro Called From
xxxx.asm(41): Main Line Code

Rilevati ERRORI di Compilazione: Correggi e riprova con F9 > Execution finished. Ho visto che su alcune versioni di Masm è presente questo bug http://support.microsoft.com/kb/120064/it: è questa la causa dell'errore o ho sbagliato qualcosa io? In ogni caso, come posso aggirarlo?
codice:
;INTESTAZIONE
PAGE 66,132
;MACRO UTILIZZATE DAL PROGRAMMA
          include  libreria.mac
;DEFINIZIONE DEL SEGMENTO DEL CODICE
_prog     SEGMENT ;BYTE PUBLIC 'CODE'
          ASSUME CS:_prog, DS:_prog
          ORG    100H
;AREA DESTINATA AI DATI DEL PROGRAMMA
          testo    db   'Scrivi due numeri (separati da "INVIO")','$'
          Nan      db   'Ho detto di scrivere un numero!','$'
          num1     db   0,'$'
;----------------------------------------------------------------------------
Main:
          pr_str   num1
intro:
          mov      ah,00H         ;chiede con funzioni BIOS un carattere
          int      16H
          cmp      al,27        ;se il tasto non è ESC...
          je       Fine           ;...passa alla fase di controllo
 
Control:
 
          sub      al,30h         ;sottraendo 30h(=48) al codice ASCII di un numero si ottiene il numero stesso
          cmp      al,9           ;se il risultato dellla sottrazione è maggiore di 9 significa che il codice ASCII del tasto era maggiore di 39h o anche minore di 30h, dato che 'ja' si usa per gli unsigned
          ja       isNaN          ;e considera come positivi i numeri negativi, per cui un numero come FFFF FFFF FFFF FFFF, che se considerato negativo sarebbe =-1, risulta comunque maggiore di 9.
          add      al,30h         ;riporta AL al valore originario
          mov      ah,0EH         ;stampa il carattere (solo se è un numero)
          int      10H
          mov      bx,seg num1
          mov      es,bx
          mov      di,offset num1
          mov      es:[di],al
          inc      di
          pr_str num1
          jmp      intro
Fine:
          mov ah,4ch
          int 16h
 
isNaN:
          jmp main
 
_prog     ENDS
          END   Main
Libreria.mac:
codice:
;                           pr_char
;STAMPA UN CARATTERE POSTO IN AL
pr_char  MACRO
         mov    ah,0EH                ;si limita ad eseguire l'interrupt 0EH di 21H
         int    10H
         ENDM   pr_char
;----------------------------------------------------------------------------------
;                           pr_str
;STAMPA UNA STRINGA TERMINANTE CON ",0"
pr_str   MACRO  string
         pushad
         mov    ax,seg string
         mov    es,ax
         mov    di, offset string
post_intro:
         mov    al,es:[di]           ;se si esegue l'istruzione "cmp es:[di],0"
         cmp    al,0                 ;il computer cerca di stampare tutto es (?)
         je     continua             ;while al!=0 ripete il ciclo
print:
         pr_char
         inc    di
         jmp    post_intro
continua:
         popad
         ENDM   pr_str
P.S.: la cosa più strana (almeno credo...) è che se a pr_str sostituisco il codice seguente non mi dà nessun messaggio di errore.
codice:
;                           pr_str_dos
;STAMPA UNA STRINGA PASSATA COME PARAMETRO USANDO FUNZIONI DOS
;N.B.: LA STRINGA DA STAMPARE DEVE TERMINARE CON IL CARATTERE '$' (Da aggiustare)
pr_str_dos MACRO  testo
          mov   ax, SEG testo         ;sposta in ax l'indirizzo del segmento dati...
          mov   ds, ax                ;...per poi spostarlo in ds
          lea   dx, testo             ;sposta in dx l'offset di 'testo'
          mov   ah,09H                ;chiama la funzione 09H
          int   21H                   ;di 21H
          ENDM pr_str_dos