title: Gcc inline assembly what does "'asm' operand has impossible constraints" mean?
body: <p>I have this below code within function:</p>
  
  <pre><code>void makeSystemCall(uint32_t num, uint32_t param1, uint32_t param2, uint32_t param3){
      asm volatile (
          "mov %0, %%eax\n\t"//Move num to eax
          "mov %1, %%ebx\n\t"//Move param1 to ebx
          "mov %2, %%ecx\n\t"//Move param2 to ecx
          "mov %3, %%edx\n\t"//Move param3 to edx
          "int $0x80"//Call interrupt. Data in eax, ebx, ecx and edx
          : //No output params
          : "r" (num), "r" (param1), "r" (param2), "r" (param3)//Input params
          : "%eax", "%ebx", "%ecx", "%edx" //This handles register state pushing and popping?
      );
  }
  </code></pre>
  
  <p>Now I have no idea why this doesn't work. Gcc says: "error: 'asm' operand has impossible constraints" I have been following gcc inline assembly tutorials and I though that this would be correct way to take parameters from c code to inline assembly block.</p>
  
  <p>Also I use gcc cross compiler built for 32 bit x86.</p>