1、在jmp,jge等跳转语句的跳转标签处加上f和b,f为向前,b为向后。
2、用数字0、1等表示中转的标签
.....
....
asm(
"cmp %1,%2\n\t"
"jge 0f\n\t"
"addl %1,%2\n\t"
"jmp 1f\n\t"
"0:\n\t"
"addl %1,%2\n\t"
"1:\n\t"
)
3、使用define定义内联宏函数
deepfuture@deepfuture-laptop:~/private/mytest$ gcc -o x x.c
deepfuture@deepfuture-laptop:~/private/mytest$ ./x
8
deepfuture@deepfuture-laptop:~/private/mytest$
#include <stdio.h>
#define addnums(a,b,result) ({\
asm(\
"addl %1,%2\n\t"\
"movl %2,%0\n\t"\
:"=r"(result)\
:"r"(a),"r"(b));})
int main(int argc,char *argv[]){
int x,y,res;
x=2;y=6;
addnums(x,y,res);
printf("%d\n",res);
return (0);
}
本文介绍如何在C语言中使用内联汇编及宏定义实现特定功能,包括条件跳转、变量相加等操作,并展示了具体的GCC编译与运行实例。
520

被折叠的 条评论
为什么被折叠?



