On 01 Jun 2005 23:23:46 -0400, Ian Lance Taylor wrote > "Lin Chun-Zhi" <lcz90@xxxxxxxxxxxxx> writes: > > > I got a question about register constraint in kernel source. > > Here is the cut of bios32_service() > > > > 597 __asm__("lcall (%%edi); cld" > > 598 : "=a" (return_code), > > 599 "=b" (address), > > 600 "=c" (length), > > 601 "=d" (entry) > > 602 : "" (service), > > 603 "1" (0), > > 604 "D" (&bios32_indirect)); > > > > In line 602, its register constraint is a NULL string. I can't find how > > compiler arranges the registers in gcc.info. > > If there are no constraints, the compiler does not constrain the > operand. It could be anywhere. The statement will use "service", > though; assignments to it will not be deleted. > > By the way, in linux-2.6.8.1 that statement looks like this: > > __asm__("lcall *(%%edi); cld" > : "=a" (return_code), > "=b" (address), > "=c" (length), > "=d" (entry) > : "0" (service), > "1" (0), > "D" (&bios32_indirect)); > > Ian Thank you, Ian. I got it. But there is another wield thing. I can't pass the compiling stage use the code below. int main(void) { int __value, __port; asm volatile ( "movl %1,%0" : "=a" (__value), "=d" (__port) : "" (__value), "1" (__port) ); return 0; } The error message is [root@littleroach tmp]# gcc a.c a.c: In function `main': a.c:10: warning: asm operand 2 probably doesn't match constraints a.c:10: error: impossible constraint in `asm' But the same code in the kernel works very well. Do I miss something? Roach -- Open WebMail Project (http://openwebmail.org)