10万行汇编代码
jopen 12年前
<p> 英文原文:<a href="/misc/goto?guid=4958339148600428591">100,000 Lines of Assembly Language</a></p> <p> 偶尔会有人问我有关编写超级任天堂游戏的问题,那些人是怎么管理成千上万行 16 位汇编语言代码组成的项目的?答案是:它并不像你想象中那么艰难。</p> <p> SNES 硬件的手册有几百页,我不记得具体是多少了,最多 400 页吧。加入一个详细的 65816 汇编语言教材并结合我们现在说的最多 800 或 900 页,这只是我认为要<a href="/misc/goto?guid=4958339149377055954" rel="nofollow" target="_blank">完全理解</a>一个 OSX 计算机的所需页数 11,000的百分之八十。当然,你在C语言里的汇编代码也会出现很多无形的错误。比如,这是一些老的 x86 代码:</p> <blockquote> mov ax, 20 <br /> mov bx, -1 <br /> int XX </blockquote> <p> 这些代码设置了一些参数并调用中断。它看起来是正确的,也可以正常运行,并且可能在一个商业化的产品中使用,但是在新版的 MS-DOS 中它崩溃了。为什么?因为第二个参数应该传到 dx 寄存器,而不是 bx。它只有在前面有代码发生了中断并返回-1到 dx 的情况下才能正常运行,但这是很罕见的,所以上面代码中的第二行并没有做任何有用的事。</p> <p> 完全使用汇编语言工作的秘密是:做到有组织,写代码前先思考并保代码持清洁和易懂。这和写好的 Javascript 和 C++ 代码是有很多相似之处的。Steve McConnell 编写的 Code Complete 是真正的超级任天堂游戏开发者指南。</p> <p> 但是这些谈论的编程语言和硬件是落后的。Jordan Mechner 设计和编写了 Apple II 上的 Prince of Persia,游戏和展示所有关卡的编辑器是用 8 位 6502 汇编语言编写的,他用<a href="/misc/goto?guid=4958339150170752959" rel="nofollow">日记</a>记录了写这个游戏的过程。你可能期望这个日记里都是编程参考和 6502 编程诀窍,但是里面一点关于那个的内容也没有。当然,他在幕后做高难度的技术工作,但是那不是他要记录的。他记录的是一个设计师和导演的经历:一个人在大学毕业后居住在离家很远的地方,为自己的梦想走了很多弯路(别被吓倒了,那是很迷人的故事)。</p> <p> 他可能有另外一些编程的记录,但是我想应该没有。尽管如此,他远不止在想技术问题:一个小说家的个人日记的内容不会全是讲语法和句子结构的~</p> <p> (如果你喜欢这篇文章,你可能还会喜欢 <a href="/misc/goto?guid=4958339150957978562" rel="nofollow">The Pure Tech Side is the Dark Side</a>)</p>