我试图将在Linux(fedora 9)下编写的C代码转换为汇编x86代码,但是,我在Math.h函数中遇到了问题。此库中的函数(如ceil,floor,log,log10,pow)在程序集x86中未定义。能帮我解决这个问题吗?
感谢。
答案 0 :(得分:3)
大多数库函数都不能用汇编语言定义,至少不是在加法运算符直接映射到ADD
指令的意义上。如果要在汇编中重新编写库,则必须使用处理器可用的任何功能来实现该函数。大多数库函数都需要单独的汇编语言子例程,而不仅仅是单个操作。解决这个问题的最简单方法是让各个库子程序单独工作,然后将它们合并到更大的程序中。
您可以编译C代码并检查反汇编输出,但要注意编译器优化,这会使输出很难让人跟随。
请问这项任务背后的目的是什么?由于编译器本质上是一个C语言汇编语言翻译器,因此很少需要手动执行此操作。这是家庭作业吗?
答案 1 :(得分:2)
了解这些函数的最佳方法是在glibc的源代码中查看它们的实现。它应该给你足够的洞察力。另一种方法是查看 / usr / lib / 中 lm.so 的反汇编。