ключевое слово volatile не работает для встроенной сборки gcc - PullRequest
0 голосов
/ 08 мая 2018

Мне нужно запустить этот простой встроенный код сборки:

#include <stdio.h>

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;
}

Он работает нормально (количество печати = 10), пока я не включу оптимизацию (gcc -O1), и в этом случае он печатает число = 0. Я читал, что квалификатор volatile не позволит оптимизатору вывести код из цикла. Но это, кажется, не имеет никакого эффекта здесь.

1 Ответ

0 голосов
/ 08 мая 2018

Проблема найдена. Я должен был определить глобальную переменную "count" как volatile. Проблема была не в том, чтобы вывести блок asm из цикла. Компилятор просто заменил счетчик на 0 в printf.

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;
}
...