Dear Colleagues, Is there a problem with using macros in relocatable code? I'm using MPASM. I've got a file called "pushpop.asm", which assembles fine and contains the following: push macro movwf wcopy ; save w register swapf reg_status, w ; save status register movwf scopy ; without altering status bits endm pop macro swapf scopy, w ; swapf status nibbles again and place in w movwf reg_status ; restores status reg (including bank reg) swapf wcopy, f ; swap nibbles in wcopy, keeping result in wcopy swapf wcopy, w ; swap again and place in w (status unaffected) endm end In my "main" program I have the following: extern push, pop, ... reset: code 0x000 goto start main: code 0x004 ; Interrupt service routine push ... pop retfie ; Main program starts here start: ... The problem is that the assembler throws it out with the following: Warning[207] ...: Found label after column 1. (push) Error[115] ...: Duplicate label ("push" or redefining symbol that cannot be redefined) It then goes on to report the same thing for all my other macro "calls". Why does MPASM think it's a label rather than a macro? The file pushpop.asm is above the "main" program in the Edit Project box, and definitely gets assembled (successfully) first. I did wonder if I should put a "global push, pop" just before the "end" statement in "pushpop.asm" but then the assembler says: Error[156] ...: Operand must be an address label (push) Error[156] ...: Operand must be an address label (pop) I'm completely flummoxed! Could anyone possibly help? Many thanks, Steve Steve Thackery Suffolk, England. Web Site: http://www.btinternet.com/~stevethack/