有什么地方可以找到死的简单C和x86程序的并排示例吗?我到目前为止在互联网上发现的例子似乎从“这里的x86中的Hello World”直接跳到“编写你自己的操作系统!”当你执行诸如调用函数之类的事情时,我无法内化将要发生的事情。
答案 0 :(得分:2)
我建议看看GCC的中间装配输出,例如调用
gcc -S a.c
然后看看a.s
大多数情况下,通过优化生成更小且更容易理解的程序集,因此您宁愿使用
gcc -O -S a.c
答案 1 :(得分:0)
如果您的意思是x86汇编语言,请使用objdump --disassemble myprog
(在任何GNU系统上)来显示C程序生成的汇编语言。如果您的系统没有objdump,则可以使用ndisasm。
答案 2 :(得分:0)
假设您的意思是x86汇编程序然后使用gcc,您可以使用gcc -S yourhelloworldprogram.c
来获取汇编程序输出。对于Visual Studio,您可以通过以下方式获得汇编器输出:How do I get the assembler output from a C file in VS2005
答案 3 :(得分:0)
我推荐ddd。您可以拥有两个C源(如果使用调试符号构建)并显示机器代码。您还可以交互式地检查寄存器和内存值。一个很好的学习工具。
答案 4 :(得分:0)
在gcc上,您可以使用优于-save-temps -fverbose-asm
选项的-S
选项,因为它仍会生成目标文件,您还可以获得预处理器文件。 verbose-asm也很重要,因为它为程序集输出添加了注释,这些注释在程序的函数和变量名称与生成的汇编代码之间建立了链接。特别是在通过优化生成时,通常很难在源C和组件之间建立链接。