Imagine you wrote this 10 years ago (before Intel MPX and the bnd0..bnd3 registers were even on a roadmap):
section .data
; define
NASM lets you prefix a symbol with a dollar sign $ so that it's interpreted as symbol rather than register or other reserved word. From the NASM documentation:
3.1 Layout of a NASM Source Line
[...] An identifier may also be prefixed with a
$to indicate that it is intended to be read as an identifier and not a reserved word; thus, if some other module you are linking with defines a symbol calledeax, you can refer to$eaxin NASM code to distinguish the symbol from the register. [...]
MASM is normally only used in environments where C compilers prefix identifiers with underscores _, so this isn't as big of an issue with that assembler. However it does have a solution this problem, but it's basically the opposite of NASM's. You can use the OPTION NOKEYWORD directive to disable reserved words of your choice. For example you can use OPTION NOKEYWORD:<eax> so that you can use a symbol named eax. Of course that prevents you from using the register named EAX, so it's not as general solution as NASM's.