volatile关键字不适用于gcc内联汇编

时间:2018-05-08 16:05:51

标签: gcc assembly optimization inline volatile

我需要运行这个简单的内联汇编代码:

int i, String T, int VP

它工作正常(打印次数= 10),直到我打开优化(gcc -O1),在这种情况下,它打印count = 0。我读到了" volatile"限定符将阻止优化器将代码置于循环之外。但这似乎没有影响。

1 个答案:

答案 0 :(得分:-2)

发现问题。我不得不将全局变量“count”定义为volatile。问题不是把asm块放在循环之外。编译器在printf中简单地将count替换为0。

volatile int count;

int main() {

  count = 0;
  for (int i = 0; i < 10; i++) {
    asm volatile ("incl count");  // count++
  }

  printf("count=%d\n", count); 

  return 0;
}