我需要运行这个简单的内联汇编代码:
int i, String T, int VP
它工作正常(打印次数= 10),直到我打开优化(gcc -O1),在这种情况下,它打印count = 0。我读到了" volatile"限定符将阻止优化器将代码置于循环之外。但这似乎没有影响。
答案 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;
}