Search code examples
assemblynasm32-bitintel-syntax

Assembly (Intel syntax + NASM) Error: attempt to define a local label before any non-local labels


I am quite new regarding the assembly and I am trying to work with a program. So whenever I try to compile it, I get the error for the line, as listed under the comments in the code.

I am wondering if anyone has any ideas why NASM detects this errors when I am defining some things for the rest of the assembly code?

Maybe it has to do something with how the main is defined?

P.S. I listed just the first part of the code, since the program is quite long.

Thank you for the help

.xlist               ;attempt to define a local label before any non-local labels
include  stdlib.a     ;  parser: instruction expected
includelib stdlib.lib    ; parser: instruction expected
.list
.286

dseg            segment para public 'data' 
;  Unknown section attribute 'public' ignored on declaration of section `para'
h               word    ?
i               word    ?

cseg            segment para public 'code'
                assume  cs:cseg, ds:dseg

Main

Solution

  • In NASM a label starting with dot is called a local label. It is appended to the last global label, for example,

    L:
    .l2: ; it is really L.l2
    

    So you cannot have a local label before any global ones