内嵌汇编

Posted on 2020-10-30 22:10  Choimoe  阅读(20)  评论(0编辑  收藏  举报

关于内嵌汇编的一些理解

核心函数:asm("汇编语句",输出端,输入端,寄存器回收)

asm中分配了10个寄存器,用于提供输入输出,例如下面交换两个数的程序:

#include <cstdio>

int main(){
	int a=3,b=2;
	asm(
		"movl	%2,%%eax\n"
		"movl	%3,%%ebx\n"
		"movl	%%ebx,%0\n"
		"movl	%%eax,%1\n"
		:"=r"(a),"=r"(b)	// %0 %1
		:"r"(a),"r"(b)		// %2 %3
		:"%eax","%ebx"		// 回收eax与ebx
	);
	printf("%d %d",a,b);
}

再例如两个数求和:

#include <cstdio>

int main(){
	int a=3,b=2;
	asm(
		"movl	%1,%%eax\n"
		"movl	%2,%%ebx\n"
		"addl	%%eax,%%ebx\n"
		"movl	%%ebx,%0\n"
		:"=r"(a) // %0
		:"r"(a),"r"(b)   // %1 %2
		:"%eax","%ebx"
	);
	printf("%d",a);
}