关于内嵌汇编的一些理解
核心函数: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);
}