title: x86 Assembly: movsd instruction issue
body: <p>This is my problem:<br>
  I trying to use <code>scanf</code> (in <code>msvcrt.dll</code>) to input a single floating point value in <code>flat assembler</code> then I write a simple "scanf program" like this (in <code>C</code>):</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  
  int main() {
      float a;
  
      scanf("%f", &amp;a);
      printf("Just input: %f", a);
      return 0;
  }
  </code></pre>
  
  <p>then using <code>cl.exe</code> to compile with <code>/FA</code> parameter to generate assembly file like this:</p>
  
  <pre><code>    lea eax, DWORD PTR _a$[ebp]
      push    eax
      push    OFFSET $SG2935
      call    _scanf
      add esp, 8
  ; Line 8
      cvtss2sd xmm0, DWORD PTR _a$[ebp]
      sub esp, 8
      movsd   QWORD PTR [esp], xmm0
      push    OFFSET $SG2936
      call    _printf
      add esp, 12                 ; 0000000cH
  </code></pre>
  
  <p>What I missunderstand is <code>movsd</code> instruction. According here: <a href="http://faydoc.tripod.com/cpu/movsb.htm" rel="nofollow">http://faydoc.tripod.com/cpu/movsb.htm</a> it <code>Move doubleword at address DS:(E)SI to address  ES:(E)DI</code> but I don't see any setting <code>esi</code>, <code>edi</code> up here and the <code>movsd</code> in generated source file have two parameters but in document in the link is it should not. Can someone explain me here?</p>