1. 程式人生 > >GCC內聯彙編實踐分享

GCC內聯彙編實踐分享

#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指令運算元有三個;