【问题标题】:GCC Assembly "+t"GCC 程序集 "+t"
【发布时间】:2017-04-12 00:04:36
【问题描述】:

我目前正在旧编译器(大约 2004 年的 GCC)上测试 C++ 中的一些内联汇编,我想对浮点数执行平方根函数。在尝试并搜索成功的方法后,我遇到了以下代码

float r3(float n){
    __asm__("fsqrt" : "+t" (n));
    return n;
};

这很有效。问题是,即使我了解所使用的汇编指令,我也无法找到任何特定文档来说明"+t" 标志在n 变量上的含义。我的真正想法是,这似乎是将变量 n 视为输入和输出变量的一种方式,但我无法找到有关它的任何信息。那么,"t" 标志到底是什么?它是如何在这里工作的?

【问题讨论】:

    标签: c++ c gcc assembly x86


    【解决方案1】:

    +

    表示该操作数既可以被指令读取也可以被指令写入。 (来自here

    t

    80387 浮点堆栈的顶部 (%st(0))。 (来自here

    【讨论】:

      【解决方案2】:

      + 表示您正在读取和写入寄存器。
      t 表示该值在 80387 浮点堆栈的顶部。

       

      参考资料:

      • GCC 手册,Extended Asm 包含有关约束的一般信息 - 搜索“约束”
      • GCC 手册,Machine Constraints 包含有关每种架构支持的特定约束的信息 - 搜索“x86 系列”

      【讨论】:

        猜你喜欢
        • 2014-01-07
        • 2017-04-29
        • 2020-02-14
        • 2011-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-23
        • 2011-04-09
        相关资源
        最近更新 更多