Off by "one level"... or used to Masm syntax...
An unadorned symbol, in Nasm syntax, means an "immediate". In Masm terms, "offset". You want the square brackets:
mov [byte_83db7], al
In asm, there is no "look up the contents of the address and use that as an address" ("dereferencing a pointer"). We have to do that explicitly:
foo db 42
fooptr dd foo ; (dw for 16-bit code)
...
mov eax, [fooptr]
mov al, [eax]
In Masm, either:
mov myvar, al
or:
mov [myvar], al
are acceptable - and generate exactly the same code. In Nasm, only the second is acceptable. If we see:
mov eax, something
we need to know if it's Masm or Nasm - and if it's Masm, how "something" is declared:
something equ 42
would move the immediate number 42 into eax. If it's:
something dd 0
it moves the *contents" of "something" (0) into eax. To get the address, you'd need "offset something".
In Nasm, "mov eax, something" is always an immediate - address/offset or other. "Contents" always wants "[]". And *all* of the address goes inside the brackets. Your disassembler may produce something like "es:[foo]" or "es:foo[8]" - in Nasmese, "[es:foo + 8]"...
Hope that helps...
Best,
Frank