c++ - 在Linux环境中运行内联汇编(使用GCC/G++)

标签 c++ c linux gcc assembly

因此,我有一个非常基本的程序,用C(.c文件)编写,带有嵌入式汇编代码部分。我想将.c文件转换为我知道但不知道如何为Linux环境编译该代码的程序集输出。

对.cpp文件使用gcc或g++时,出现无法识别asm指令的错误。

现在,除了将我的asm代码的括号更改为括号之外,此代码还可以在Visual Studio中按预期工作。但是我仍然会出错。一堆 undefined variable 引用。

我在工作代码中所做的更改是将括号更改为括号,将汇编指令放在引号中(可在网上找到,可能是错误的)。

简而言之,我希望下面的代码能够在Linux环境中使用命令gcc成功编译。我不知道语法,但是代码有效,但不适用于linux /。

#include <stdio.h>
int main()

{

float num1, num2, sum, product;
float sum, product;
float f1, f2, f3, fsum, fmul;

printf("Enter two floating point numbers: \n");
scanf("%f %f", &num1, &num2);


__asm__ 
(
    "FLD num1;"
    "FADD num2;"
    "FST fsum;"
);

printf("The sum of %f and %f " "is" " %f\n", num1, num2, fsum);
printf("The hex equivalent of the numbers and sum is %x + %x = %x\n", num1, num2, fsum);

return 0;
}

最佳答案

GCC中的嵌入式程序集按字面意义转换为生成的程序集源。由于变量不存在于程序集中,因此您编写的内容无法正常工作。

使其工作的方法是使用extended assembly,它使用在编译源时GCC将用于翻译程序集的修饰符对程序集进行注释。

__asm__
(
  "fld %1\n\t"
  "fadd %2\n\t"
  "fst %0"
  : "=f" (fsum)
  : "f" (num1), "f" (num2)
  :
);

关于c++ - 在Linux环境中运行内联汇编(使用GCC/G++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36783808/

相关文章:

java - 使用 Java 1.5 跨平台方式打开文件

c++ - 基于 ISO-639/ISO-3166 的语言/国家语言环境名称与 Windows 名称之间的转换表

c++ - 编译一个非常大的 .cpp 文件

c++ - 线程安全和 block 写入大小

c++ - 无法读取二进制编码的十六进制值

c++ - 无法理解核心文件分析的 GDB x 命令输出

c++ - 使用位运算检测负整数

c - 播种许多 PRNG,然后不得不再次播种,什么是高质量的方法?

c - C语言串口: read non-canonical mode

c - 管道传输时程序输出发生变化