title: Assembly multiplication of 16-bit x 32-bit => 48-bit
body: <p>Assume I want to multiply a large number by another (maybe small) number in assembly. The big number (multiplicand) is saved in <code>DX:AX</code> and the multiplier is saved in <code>BX</code>. The <code>MUL</code> instruction only operates on <code>AX</code>. So what to do with <code>DX</code>?</p>
  
  <p>For example, the number is <code>0001:0000H</code> (65536) and I want to multiply it by 2. </p>
  
  <pre><code>number     dw   0000h, 0001h
  ...
  mov    ax, [number]
  mov    dx, [number+2]
  mov    bx, 2
  mul    bx   ; it is ax*2 or 0000*2
  </code></pre>
  
  <p>Therefore the result is zero! Any idea on that?</p>