GCC內聯彙編實踐分享
阿新 • • 發佈:2018-12-20
#include <stdio.h> 2 3 int inc_var(int *var) 4 { 5 int *tmp = var; 6 int x; 7 __asm__ __volatile__( 8 "ldr\t %1, [%0]\n\t" 9 "add\t %1, %1, %2\n\t" 10 "str\t %1,[%0]\n\t" 11 :"=&r" (tmp) ,"+r" (x) 12 :"I" (1) 13 :"cc" 14 ); 15 16 return *tmp; 17 } 18 19 int main(int argc, char *argv[]) 20 { 21 int x = 1; 22 inc_var(&x); 23 printf("x:%d\n",x); 24 } 25 26
注意點:
1、彙編指令加“\t”,防止文字編輯器的不同導致指令和運算元粘連在一起,無法編譯通過;
2、add指令運算元有三個;