【问题标题】:Use Visual C++ Environment and "Asm" keyword as alternative for Assembler IDE?使用 Visual C++ 环境和“Asm”关键字作为 Assembler IDE 的替代方案?
【发布时间】:2012-04-16 00:51:08
【问题描述】:

只需阅读一本 C++ 书籍,您就可以通过使用 asm 关键字将汇编程序直接放入 C++。

这是否意味着,如果想使用 Visual Studio 编写汇编程序,我可以简单地创建一个 C++ 主方法,然后将汇编程序放入其中并将其作为 C++ 程序执行?编译器会简单地运行嵌入汇编程序的 C++,就好像它只是一个汇编程序一样?

我的问题源于缺乏合适的汇编程序 IDE。

【问题讨论】:

标签: c++ assembly masm


【解决方案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 - 这听起来像是堆栈溢出的好问题。
猜你喜欢
  • 2011-04-25
  • 1970-01-01
  • 2011-01-12
  • 2015-12-04
  • 2019-05-25
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
相关资源
最近更新 更多