title: A86 - definition conflicts with forward reference
body: <p>I'm trying to use A86 to assemble some code for 8086.  I narrowed my problem down to 4 lines of code. </p>
  
  <pre><code>MOV BX, testz
  ADD AL, [testz]
  
  INT 20h
  testz:
  ~     ^
  #ERROR 16: Definition Conflicts With Forward Reference                    @@@@#
  db ?
  </code></pre>
  
  <p>What do you think is wrong with this code? I am moving the address itself to BX register and adding the byte-value in the testz address to AL.</p>
  
  <p>In a bigger program I also get <code>#ERROR 13: Byte/Word Combination Not Allowed</code>.</p>
  
  <p>But <code>label</code> is a word where <code>[label]</code> is a byte. Why can't my compiler differentiate between those? </p>
  
  <pre><code>ADD BL, [second]
  MOV BX, second
  ~             ^
  #ERROR 13: Byte/Word Combination Not Allowed   
  second:
  ~      ^
  #ERROR 16: Definition Conflicts With Forward Reference                    @@@@#
  db ?
  </code></pre>
  
  <p>Because I can't see any Byte/Word conflict.</p>
  
  <hr>
  
  <p>My compiler interprets offset testz and testz equally.
  I looked at the bytecodes and couldn't see any difference.</p>
  
  <pre><code>MOV BX, testz
  ADD AL, [BX]
  </code></pre>
  
  <p>The code above works, but is there any other way that I can do this in one line like</p>
  
  <pre><code>ADD AL, [testz]
  </code></pre>
  
  <p>Whenever I put a label name in [], it is just not acceptable according to my compiler a86. But I feel they are allowed in the language.</p>