第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