具有输入和输出参数的嵌入汇编语句的基本格式为:
asm(
"汇编语句“
:输出寄存器列表
:输入寄存器列表
:会被修改的寄存器列表
);
asm是嵌入汇编的关键字,“汇编语句”是写汇编指令的地方,“输出寄存器”是指这段嵌入汇编执行完之后,哪些寄存器用于存放输出数据,这些寄存会会分别对应一C语言表达式值或一个内存地址;“输入寄存器”表示在开始执行汇编代码时,这里制定的一些寄存器中应存放的输入值,它们也分别对应一C变量或常数值。“会被修改的寄存器”表示已对其中列出的寄存器中的值进行了改动,编译器不能再依赖于它原先对这些寄存器加载的值。
以下的示例小程序会对每个输入的值加16后输出原值和结果。
#include<stdio.h>
int test(int x)
{
int o;
asm volatile("mov %1,%%eax \n"
"add $0x10,%%eax\n"
"mov %%eax,%0\n"
: "=r" (o)
: "r" (x)
: "%eax","%ebx"
);
printf("%d %d\n",x,o);
}
int main()
{
int d;
while(scanf("%d",&d))
{
test(d);
}
return 0;
}