我目前正在尝试找出从相应的 C 源文件生成等效汇编代码的方法。
我使用 C 语言已经好几年了,但对汇编语言的经验很少。
我能够使用以下命令输出汇编代码-S
海湾合作委员会中的选项。然而,生成的汇编代码包含调用指令,这些指令又跳转到另一个函数,例如_exp
。这不是我想要的,我需要在单个文件中包含功能齐全的汇编代码,而不依赖于其他代码。
是否有可能实现我想要的目标?
为了更好地描述问题,我在这里向您展示我的代码:
#include <math.h>
float sigmoid(float i){
return 1/(1+exp(-i));
}
我正在使用的平台是Windows 10 64位,我使用的编译器是MSbuild的cl.exe。
我最初的目标是尽可能了解计算机如何计算数学函数。我决定观察计算过程的级别是汇编代码,我选择的数学函数是上面定义的 sigmoid。
_exp
是标准数学库函数double exp(double) http://en.cppreference.com/w/c/numeric/math/exp;显然,您所在的平台在 C 符号名称前添加了前导下划线。
Given a .s
调用一些库函数,以与您相同的方式构建它.c
调用库函数的文件:
gcc foo.S -o foo -lm
默认情况下,您将获得动态可执行文件。
但如果你真的想要all将代码放在一个文件中,没有外部依赖项,您可以链接您的.c
转换成静态可执行文件并反汇编它。
gcc -O3 -march=native foo.c -o foo -static -lm
objdump -drwC -Mintel foo > foo.s
无法保证_exp
实施于libm.a
(静态库)与您进入的库相同libm.so
or libm.dll
或其他什么,因为它是一个不同的文件。对于像这样的函数尤其如此memcpy
其中动态链接器技巧通常用于在运行时选择最佳版本(针对您的 CPU)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)