gcc 下使用汇编
2015-01-13
asm(code
: output operand list
: input operand list
: clobber list
);
Register name: Register的名称前面必须加上”%”
AT&T:%eax
Intel:eax
为了让GCC的asm能跨平台,所以可以用%0、%1…%n代表后面依序出现的register。
Source/Destination ordering: AT&T的source永远在左边而destination永远在右边
AT&T:movl %eax, %ebx
Intel:mov ebx, eax
您可以在Instruction后面会被加上b、w和l,用以区分operand的size,分別代表byte、word和long,在不加的情況下,gcc会自动判断,但有可能误判。
Constant value/immediate value format: Constant value/immediate value前面必须加上”$”
AT&T:movl $boo, %eax
Intel:mov eax, boo
将boo的address加载到eax中,boo必须是static变量。
参考
http://alpha-blog.wanglianghome.org/2011/04/07/gcc-inline-asm/ http://nano-chicken.blogspot.com/2010/12/inline-assembly.html