第60部分- Linux x86 64位汇编内联汇编处理跳转
内联汇编语言代码也可以包含定义其中位置的标签。
内联汇编代码中使用标签时有两个限制,第一个限制是只能跳转到相同的asm段内的标签,不能从一个asm段跳转到另一个asm段中的标签。
第二个限制是汇编后的代码清单不能使用相同的标签。
跳转示例
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int result;
asm("cmp %1, %2\n\t"
"jge greater\n\t"
"movl %1, %0\n\t"
"jmp end\n"
"greater:\n\t"
"movl %2, %0\n"
"end:"
:"=r"(result)
:"r"(a), "r"(b));
printf("The larger value is %d\n", result);
return 0;
}
gcc -o jmptest jmptest.c
数字标签示例
条件分支和无条件分支都允许指定一个数字加上方向标志作为标签,方向标志指出处理器应该向哪个方向查找数字型标签。
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int result;
asm("cmp %1, %2\n\t"
"jge 0f\n\t"
"movl %1, %0\n\t"
"jmp 1f\n"
"0:\n\t"
"movl %2, %0\n"
"1:"
:"=r"(result)
:"r"(a), "r"(b));
printf("The larger value is %d\n", result);
return 0;
}
gcc -o jmptest jmptest2.c