In NASM, $numA is the same as numA. A leading $ stops the assembler from considering it as a register name. Thus you can write mov eax, [$eax] to load the eax register from a symbol called eax. (So you could link with C which used int eax = 123;)
So mov [$numA], al looks weird, but it's really just mov [numA], al and isn't the source of the error.
You're getting the error from mov dl,$numA which does a mov dl, imm8 of the low byte of the address.
The linker warns you because the address of numA doesn't fit in 1 byte, so the r_386_8 relocation would have had to truncate the address.
The _8 tells you it's a relocation that asks the linker to fill in 8 bits (1 byte) as an absolute address. (8-bit relative branch displacements have a different relocation type, although normally you'd use a 32-bit displacement for jumping to a symbol in another file.)
The r_386 tells you it's an i386 relocation as opposed to some type of r_x86_64 relocation (which could be absolute or RIP-relative), or a MIPS jump-target relocation (which would need to right-shift the offset by 2). Possibly related: Relocations in the System V gABI (generic ABI, for which the i386 SysV psABI is a "processor supplement").
.asmfile intold? I don't think that can work, did you meant.o? Then show also thenasmcommand, how you assemble the.asminto.o. You are probably compiling the asm into 64b object file. To get full 32b nasm->ld->binary chain I'm using on *buntu:nasm -w+all test.asm -l test.lst -f elf32ld -m elf_i386 test.o -o test(fortest.asm) (if that is the case, this is duplicate of one of many "how to compiler 32b asm in 64b linux" questions) - Ped7g$numA, why the dollar sign there? I didn't see that in NASM source yet, the stand-alone dollar is current address of instruction, so something like$-numAwould mean something to me, but$numAis unknown to me. - Ped7g