使用C宏
源码
try8.c
#include <stdio.h>
#define ADD(a, b, result) (result = a + b)
int main(){
int res;
printf("23 + 37 = %d\n", ADD(23, 37, res));
return 0;
}
编译执行
使用汇编宏
源码
try9.c
#include <stdio.h>
#define ADD(a, b, result)({ \
asm("imull %1, %2 \n\t" \
"movl %2, %0 \n\t" \
:"=r"(result) \
:"r"(a), "r"(b) \
: );})
int main(){
int data1=1, data2=2, res;
ADD(data1, data2, res);
printf("%d * %d = %d\n",data1, data2, res);
return 0;
}
编译执行
总结
1、使用宏汇编时,同样是内联汇编的语法,但内联汇编语句需要包括在"{}“中
2、使用宏汇编时,其中的语法需要写在一行,所以换行时使用续行符号”"表示前后两行为同一行
3、宏会在引用位置展开,而非是函数调用,可通过查看预编译结果进行验证