重置gcc的asm内联输入

时间:2013-04-19 08:03:20

标签: c gcc assembly inline-assembly

如何让gcc重置asm内联输入值?在第一个循环之后,以下示例中的%0未重置为42。因此,当i = 1时,%0值仍为0

for (int i = 0; i < N; ++i)
  asm("label: substract_immediate_value %0,%0,1;"
      "compare_immediate_value %0,0;"
      "branch_not_equal label"
      : /* no outputs */
      : /* input */ "r" (42));

1 个答案:

答案 0 :(得分:1)

我没试过这个,但看起来不错:

for (int i = 0; i < N; ++i)
  {
    int n = 42;
    asm("label: substract_immediate_value %0,%0,1;"
        "compare_immediate_value %0,0;"
        "branch_not_equal label"
        :  "+r" (n));
  }

我认为这是一个简化的例子,因为我无法想象为什么你不会只用C编码。的确,这是一个无操作。