一小段代码,从intel转换到at&t出现的有关问题

一小段代码,从intel转换到at&t出现的问题
C/C++ code

  unsigned char str[0x1000]
  int pStr=(int)str;
  pDllFile = fopen(FILENAME, "wb");
  if ( pDllFile )
  {
      _asm
      {
          pushad
          mov ecx,0x1000
          mov edi,pStr
          mov esi,0x401000
          rep movsb
          popad
      }


这点代码我用VC6编译是正常的。现在我要将它移植到GCC下,用的是CODEBLOCKS,转换如下:
C/C++ code
__asm__("pushal
movl $0x1000,%ecx
movl pStr,%edi
movl $0x401000,%esi
rep movsb
popal");

问题是这段代码压根就不起作用,问题似乎出在“__asm__”上面。

------解决方案--------------------
asm volatile("rep movsb"::"D"(pStr),"S"(0x401000),"c"(0x1000));