c - 重置 gcc 的 asm 内联输入

标签 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));

最佳答案

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

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 编写代码。实际上,这是一个空操作。

关于c - 重置 gcc 的 asm 内联输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16100044/

相关文章:

c++ - c中的非阻塞输入

c - ‘mc’ 在单词 'mcmodel=medium' 中意味着什么?

c - 使用 GCC 驱动程序时,什么使静态库成为 "incompatible"?

组装 - 独立标签有什么作用?

c - 扫描两个不同的字符,以及整数,需要一次全部打印

CUDA编译器不编译同一项目中的C文件

c++ - AIX 5.3 上的跨共享库问题异常

c - 如何模拟头文件中的函数?

objective-c - 程序集 Objective-C 类分配错误

assembly - 为什么编译器在除以 2 时会产生 31 位的右移?