【问题标题】:Side by side C, x86 programs并排 C、x86 程序
【发布时间】:2011-04-23 07:50:30
【问题描述】:

有没有什么地方可以找到死的简单 C 和 x86 程序的并排示例?到目前为止,我在 Internet 上找到的示例似乎直接从“这里是 x86 中的 Hello World”跳转到“编写自己的操作系统!”当您执行诸如调用函数之类的操作时,我无法内化必须发生的事情。

【问题讨论】:

  • 你的意思是x86汇编语言吗?或者有没有一种叫做 x86 的语言?

标签: c x86 sample


【解决方案1】:

我建议看一下 GCC 的中间程序集输出,例如调用

gcc -S a.c

然后看看a.s

大多数时候,更小更容易理解的程序集是通过优化生成的,所以你宁愿使用

gcc -O -S a.c

【讨论】:

    【解决方案2】:

    如果您指的是 x86 汇编语言,请使用objdump --disassemble myprog(在任何 GNU 系统上)来显示您的 C 程序生成的汇编语言。如果您的系统没有 objdump,您可以使用 ndisasm。

    【讨论】:

      【解决方案3】:

      假设您的意思是 x86 汇编器,那么使用 gcc 您可以使用 gcc -S yourhelloworldprogram.c 来获取汇编器输出。对于 Visual Studio,您可以通过以下方式获得汇编器输出:How do I get the assembler output from a C file in VS2005

      【讨论】:

        【解决方案4】:

        我推荐ddd。您可以同时显示 C 源代码(如果您使用调试符号构建)和机器代码。您还可以以交互方式遍历代码以探测寄存器和内存值。一个很棒的学习工具。

        【讨论】:

          【解决方案5】:

          在 gcc 上,您可以使用 -save-temps -fverbose-asm 选项,它比 -S 选项更好,因为它仍然会生成目标文件并且您还可以获得预处理器文件。 verbose-asm 也很重要,因为它将 cmets 添加到程序集输出中,从而在程序的函数和变量名称与生成的汇编代码之间建立链接。尤其是在优化生成时,通常很难在源 C 和程序集之间建立链接。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多