使用 Visual C++ 环境和“Asm”关键字作为 Assembler IDE 的替代方案?
Posted
技术标签:
【中文标题】使用 Visual C++ 环境和“Asm”关键字作为 Assembler IDE 的替代方案?【英文标题】:Use Visual C++ Environment and "Asm" keyword as alternative for Assembler IDE? 【发布时间】:2012-04-16 00:51:08 【问题描述】:只需阅读一本 C++ 书籍,您就可以通过使用 asm 关键字将汇编程序直接放入 C++。
这是否意味着,如果想使用 Visual Studio 编写汇编程序,我可以简单地创建一个 C++ 主方法,然后将汇编程序放入其中并将其作为 C++ 程序执行?编译器会简单地运行嵌入汇编程序的 C++,就好像它只是一个汇编程序一样?
我的问题源于缺乏合适的汇编程序 IDE。
【问题讨论】:
msdn.microsoft.com/en-us/library/45yd4tzz%28v=VS.80%29.aspx 好的,把我的问题中的“asm”换成“__asm”。 【参考方案1】:当您使用 C++ 编译器时,它会在您的程序中添加不在int main()
中的额外代码。如果你曾经反编译过一个简单的 hello world 程序,你会注意到它在int main()
之前就开始执行,调用了一些函数,例如_set_app_type
和_getmainargs
,然后最终调用了你的int main()
。对您来说最有趣的事情可能是对_getmainargs
的调用,因为它会为您的程序获取命令行参数。如果您要使用 NASM、FASM 甚至 GAS 等汇编程序编译您的程序集,它不会调用 _getmainargs
和其他人,因此您作为程序员必须实现自己的方式来获取命令行参数,这些参数可以是对于初学者来说很棘手。
只要您使用volatile
关键字指定您的__asm
,编译器就不会修改您的汇编代码,它会像运行“
汇编程序”。
如果您正在寻找用于组装的 IDE,我可以告诉您,我已经走上了同样的道路。我使用的是 FASM,它是一个很棒的小 IDE,但也有适用于 Eclipse 甚至 Visual Studio 的插件,尽管我不能说我对它们有很好的体验。
编辑:我想补充一点,如果您正在学习汇编,那么最好使用汇编程序来学习它。当 C++ 或更高级别的语言不能使用时,会使用汇编的常见用途,因此,如果您依赖 C++ 编译器和内联汇编语法,则在尝试编写原始汇编时可能会导致混淆。
【讨论】:
@Misha 如果您使用volatile
关键字,则不应该这样做。关键字的意思是“别管它”。在某些编译器上,您可能必须指定一个编译器标志,如 -force-volatile
或其他东西,因此您可能需要检查您的编译器。
有人能解释一下FASM、NASM和MASM之间的区别吗?是一个英特尔,另一个 AMD……等等?
@user1107474 - 这听起来像是堆栈溢出的好问题。
也许是这样的问题? Where to start learning assembly - IDE, examples以上是关于使用 Visual C++ 环境和“Asm”关键字作为 Assembler IDE 的替代方案?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 x86 和 x64 asm 文件包含到单个 Visual Studio 项目中?
如何使用 Visual C++ 的内联汇编器插入重复的 NOP 语句?