GCC 程序集 "+t"

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案1】:

+

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

t

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

【讨论】:

【参考方案2】:

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

 

参考资料:

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

【讨论】:

以上是关于GCC 程序集 "+t"的主要内容,如果未能解决你的问题,请参考以下文章

C#关于反射创建泛型类

获取另一个项目的程序集版本 (.exe)

未能加载文件或程序集“FredCK.FCKeditorV2

我可以将 x86 程序集的 Intel 语法与 GCC 一起使用吗?

通过阅读 gcc 输出来学习汇编

微信小程序实战--集阅读与电影于一体的小程序项目