因此,我有一个非常基本的程序,用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/