【发布时间】:2013-03-12 20:06:18
【问题描述】:
我目前正在我的大学学习一门课程,在这个阶段,我们学习了某些 C/C++ 结构背后的汇编代码。
工作流程通常是这样的:实验室助理简短地谈论一个话题,我们找出其中的怪癖,然后使用内联汇编解决一些完全随机的问题。
(例如:他简要介绍了struct(成员)是如何存储在内存中的,我们找出了模式,然后我们使用内联汇编编写了一个简单问题的解决方案,其中我们使用了struct。 )
实验室助理(以及小组的其他成员)正在使用Visual C++ 编译器和调试器(用于反汇编)进行演示,但是由于道德原因我不能使用它,因此我选择了g++ 和gdb.
与 Visual C++ 相比,我对 g++ 的内联汇编感到尴尬的是:
-
1234563或者将每条指令放在自己的
如果我想在内联程序集中引用局部变量,我必须使用扩展语法或通过使用
esp/ebp的偏移量来引用它。
asm("..") 块中(导致大量输入)。
关于上述两个问题,我更喜欢 Visual C++ 的内联汇编风格,在这种风格中,为了编写一个 asm 块,我所要做的就是 __asm { .. } 并将每条指令写在一个新行上,以便引用一个变量我只需要写下它的名字。
在我的搜索过程中,我发现 Apple 的 g++ 支持与带有开关 (-fasm-blocks) 的 Visual C++ 相同的语法,但 GNU g++ 似乎并非如此。
希望我可能遗漏了一些我在此询问的内容,是否可以像在 GNU g++ 下编译 Visual C++ 这样的内联汇编块。
【问题讨论】:
-
微软放弃了内联汇编,在 64 位程序中不支持它,也许这不是一个好主意?
标签: visual-c++ gcc assembly g++ inline-assembly