您可以通过哪些方式管理大型汇编语言项目?

时间:2009-04-16 18:16:14

标签: assembly x86

在我的大学,大会编程(x86和MIPs)课程即将结束。

我非常喜欢我的装配工作,我真的很想继续使用它。你会认为必须自己做所有事情都会拖累,但我发现有一定程度的透明度,我不会用更高级别的语言。

事情通常与我期望它们有关,因为我执行了机器代码以便它们发生。没有魔力。

然而,在学校,我写的最长的汇编程序可能是2-3页。

我最近读到过由单个开发人员编写的过山车大亨in assembly. alt text
(来源:com.com

我很难想象某人如何在装配中维持如此庞大的项目。

现在我正在努力从2-3页的汇编程序跳到更大规模的东西。甚至在我的Ti-83计算器上,人们已经在装配中编写了Mario / Zelda克隆,这些克隆必须非常复杂!

必须有一些更好的工具,IDE和方法来管理大型x86程序集项目,使其至少在某种程度上可维护。

他们是什么?

8 个答案:

答案 0 :(得分:7)

大规模装配程序的管理与任何其他程序一样 - 具有清晰界面的分区功能块。由于您正在进行汇编,因此您的接口将仅限于寄存器文件或堆栈中的内容。最终是在实际实施之前有一个好的设计计划。你需要清楚地知道要写什么以及如何写它。

话虽这么说,如果你喜欢汇编,还有另一种方法可以在不实际编写汇编代码的情况下沉迷于你的激情 - 你可以用C或C ++编写,看看代码是如何编译汇编的。然后,以不同的方式编写相同的内容,并了解它如何更改程序集。因此,您很快就能像编译器一样思考并编写高度优化的代码。

无论哪种方式,了解装配中的工作原理最终会使您成为更好的程序员。

答案 1 :(得分:4)

宏,函数和库。从头开始开发自己需要花费数年的时间,因此需要搜索x86汇编程序资源并依赖其他资源 - 很多人仍在为PC进行主动程序集开发。

汇编社区的一个活跃成员是Steve Gibson,他在这里有大量链接到汇编编程的良好资源:

http://www.grc.com/smgassembly.htm

答案 2 :(得分:3)

完全用汇编编写的唯一现代项目,我知道是FASM(我最喜欢的汇编程序)。

有些汇编程序支持高级构造,如果宏引擎很好,你可以编写自己的构造。 我个人觉得这没用;如果我想要高级构造并理解我的工作,我会使用C或C ++。 (但我认为它们不是管理大型项目的好语言。)

我只是在需要时使用装配,或者用于学习。

如果您想在汇编中编写项目,请记住:

  • 可能没有多少人愿意帮助您完成项目,即使他们觉得有趣。很少有人喜欢汇编,如果你希望有人理解你的代码,你的代码必须得到很好的评论。
  • 装配不可携带。即使从32位PC转换到64位,你基本上也必须重写所有内容。
  • “装配更快”的论点不再适用。

答案 3 :(得分:3)

除了已经提到的内容之外,我应该提到literate programming;我编写了一个大约为20KLOC ARM程序集的应用程序(不是很大,但也不是无关紧要的),我发现使用noweb构造代码非常有帮助。

这使我能够将代码分解成小的概念部分,即使出于性能原因,实际上必须将几个部分组合在一起/展开/等等。它还使其他程序员更容易理解我所写的内容,特别是我做出某些微妙决定的原因(例如,根据操作数的预期大小决定哪个操作数应该首先进行乘法)。

答案 4 :(得分:2)

我认识那些使用汇编程序(而不是英特尔)的人。他们构建了一个广泛的宏库,因此他们可以像使用高级语言一样使用它。

要创建lika宏库,请从简单开始。通过将常用结构分组到一个宏中。最终,您将能够创建更复杂的功能。

答案 5 :(得分:2)

不是你的问题的答案,但在许多现实世界的场景中,应用程序是使用该语言常用的惯用语以高级语言编写的,并且只使用性能或硬件需要的一些汇编语言。对于真正的项目来说,这可能是唯一明智的方法,因为汇编语言不像其他语言那样富有成效,因为计算机可以为每个小时的编程做更多的工作。

话虽如此,用任何其他语言管理项目的所有工具和技术同样适用于汇编语言。源代码控制,TDD,项目规范,标识符的有意义名称,关注点分离,面向对象设计模式(您可以在没有面向对象语言的情况下进行面向对象的设计)都适用于汇编语言,就像它对C#或PHP

答案 6 :(得分:2)

Here is a white paper by Peter Langston描述了他们用来撰写Fractalus的Ballblazer and Rescue的工具和推理,其中包括组织等。

答案 7 :(得分:1)

我总是喜欢在高级语言中完成。将它写在链接在一起的模块中以形成运行时。