内联汇编如下:
#include <stdio.h>
int add(int i, int j) {
int res = 0;
asm (
"ADD %w[result], %w[input_i], %w[input_j]"
: [result] "=r" (res)
: [input_i] "r" (i), [input_j] "r" (j) );
return res;
}
int main(void) {
int a = 1; int b = 2; int c = 0;
c = add(a,b) ;
printf("Result of %d + %d = %d\n", a, b, c);
}
语法是:
asm(code [: output_operand_list [: input_operand_list [: clobber_list]]]);
示例中,code是“ ADD%[result],%[input_i],%[input_j]”。
output_operand_list是输出操作数的可选列表,以逗号分隔。 每个操作数均由方括号中的符号名称,约束字符串和括号中的C表达式组成。 在此示例中,有一个输出操作数:[result]“ = r”(res)。
input_operand_list是输入操作数的可选列表,以逗号分隔。 输入操作数使用与输出操作数相同的语法。 在此示例中,有两个输入操作数:[input_i]“ r”(i)和[input_j]“ r”(j)。
clobber_list是破坏寄存器或其他值的可选列表。 在示例中,其省略。
在C / C ++和汇编代码之间调用函数时,必须遵循AAPCS64规则。