title: Why adding 3 BYTEs fails, but DWORDs succeeds
body: <p>I am just beginning with <code>ASM</code>, so this question may show my lack of understanding.</p>
  
  <p>I was trying to add 3 numbers to one another, the code below with <code>DWORD</code>s work as intended:</p>
  
  <pre><code>.data
  
  val1 DWORD 25
  val2 DWORD 23
  val3 DWORD 20
  sum  DWORD 0
  
  .code
  main proc
      mov eax,val1                
      add eax,val2        
      add eax,val3
      mov sum,eax
  
      invoke ExitProcess,0
  </code></pre>
  
  <p>However, as soon as I switch from <code>DWORD</code> to <code>BYTE</code>, like viz:</p>
  
  <pre><code>.data
  
  val1 BYTE 25
  val2 BYTE 23
  val3 BYTE 20
  sum  BYTE 0
  </code></pre>
  
  <p>My execution fails with <code>error A2022: instruction operands must be the same size</code>. </p>
  
  <p>Now, my understanding is that a <code>BYTE</code> may contain any 8-bit unsigned integer from 0 - 255. Even using <code>DB</code> fails. Why is that? Thanks.</p>