-10 +

gcc 下使用汇编

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

关于我

85 后程序员, 比较熟悉 Java,JVM,Golang 相关技术栈, 关注 Liunx kernel,目前痴迷于分布式系统的设计和实践。 研究包括但不限于 Docker Kubernetes eBPF 等相关技术。

Blog

Code

Life

Archive