title: First assembly program error "too many references for mov"
body: <p>In the following assembly code I am trying to implement a multiplication method using bitwise shifts etc but I am getting two errors over and over, "too many memory references for 'mov'" as well as "ambiguous operand size for 'cmp/and/mov/shl/shr'". Any ideas?</p>
  
  <p>Thanks guys. The associated errors are below, as requested.</p>
  
  <pre><code>    .intel_syntax
      .data
  
      .globl x
  x:  .long 0
  
      .globl y
  y:  .long 0
      .text
  
      .globl multiply
  multiply:
      push    ebp #These two statements are necessary
      mov ebp,esp
  
      mov eax,0
      mov ebx,x
      mov edx,y
  
  LOOP:
      cmp ebx,0
      je  DONE
  
      mov ecx,ebx
      and ecx,1
      cmp ecx,1
      jne LOOPC   #jump to continued loop if low_bit(x) not 1
  
      add eax,edx
  
  LOOPC:
      shr ebx,1
      shl edx,1
      jmp LOOP
  
  DONE:
      pop ebp #Necessary statement
      ret     #return
  </code></pre>
  
  <p>Error messages:</p>
  
  <pre><code>multiply.s: Assembler messages:
  multiply.s:0: Warning: end of file in comment; newline inserted
  multiply.s:15: Error: too many memory references for `mov'
  multiply.s:17: Error: ambiguous operand size for `mov'
  multiply.s:18: Error: too many memory references for `mov'
  multiply.s:19: Error: too many memory references for `mov'
  multiply.s:22: Error: ambiguous operand size for `cmp'
  multiply.s:25: Error: too many memory references for `mov'
  multiply.s:26: Error: ambiguous operand size for `and'
  multiply.s:27: Error: ambiguous operand size for `cmp'
  multiply.s:30: Error: too many memory references for `add'
  multiply.s:33: Error: ambiguous operand size for `shr'
  multiply.s:34: Error: ambiguous operand size for `shl'
  </code></pre>