文档章节

10万行汇编代码

tsl0922
 tsl0922
发布于 2012/05/03 10:47
字数 701
阅读 8253
收藏 18

偶尔会有人问我有关编写超级任天堂游戏的问题,那些人是怎么管理成千上万行16位汇编语言代码组成的项目的?答案是:它并不像你想象中那么艰难。

SNES硬件的手册有几百页,我不记得具体是多少了,最多400页吧。加入一个详细的65816汇编语言教材并结合我们现在说的最多800或900页,这只是我认为要完全理解一个OSX计算机的所需页数11,000的百分之八十。当然,你在C语言里的汇编代码也会出现很多无形的错误。比如,这是一些老的x86代码:

mov ax, 20
mov bx, -1
int XX

这些代码设置了一些参数并调用中断。它看起来是正确的,也可以正常运行,并且可能在一个商业化的产品中使用,但是在新版的MS-DOS中它崩溃了。为什么?因为第二个参数应该传到dx寄存器,而不是bx。它只有在前面有代码发生了中断并返回-1到dx的情况下才能正常运行,但这是很罕见的,所以上面代码中的第二行并没有做任何有用的事。

完全使用汇编语言工作的秘密是:做到有组织,写代码前先思考并保代码持清洁和易懂。这和写好的Javascript和C++代码是有很多相似之处的。Steve McConnell编写的Code Complete是真正的超级任天堂游戏开发者指南。

但是这些谈论的编程语言和硬件是落后的。Jordan Mechner设计和编写了Apple II上的Prince of Persia,游戏和展示所有关卡的编辑器是用8位6502汇编语言编写的,他用日记记录了写这个游戏的过程。你可能期望这个日记里都是 编程 参考和6502编程诀窍,但是里面一点关于那个的内容也没有。当然,他在幕后做高难度的技术工作,但是那不是他要记录的。他记录的是一个设计师和导演的经历:一个人在大学毕业后居住在离家很远的地方,为自己的梦想走了很多弯路(别被吓倒了,那是很迷人的故事)。

他可能有另外一些编程的记录,但是我想应该没有。尽管如此,他远不止在想技术问题:一个小说家的个人日记的内容不会全是讲语法和句子结构的~

(如果你喜欢这篇文章,你可能还会喜欢The Pure Tech Side is the Dark Side

原文链接/OsChina.NET编译

© 著作权归作者所有

共有 人打赏支持
tsl0922

tsl0922

粉丝 260
博文 26
码字总数 11714
作品 1
深圳
高级程序员
加载中

评论(16)

boyfood
boyfood
真心感谢为计算机技术外文翻译做出贡献的人,我也要好好学习英语翻译
wisedonkey
wisedonkey
大哥,下次能说得言简意赅点吗
w
waly
不错!
张进程
汇编我们只是接触了点皮毛。
小临
楼主会坐游戏外挂?
黎云
黎云

引用来自“ztd”的评论

引用来自“张敏峰”的评论

引用来自“ztd”的评论

想起了在看雪的日子。

牛哦

我可不是牛人,只是喜欢自已写写游戏外挂浪费青春,看雪的牛人都是深不可测的,改个程序那是小儿科,高级的是那些加密解密和算法。

么么,大神,不知道何时可以自己写个外挂玩玩。哎,期待自己了。
诸葛非卿
诸葛非卿
老实说,当初学习的汇编如今已经记不得多少,但是经过这么多年,对它的兴趣依然不减。
codeeer
codeeer
太牛了,受不鸟
tsl0922
tsl0922

引用来自“ztd”的评论

引用来自“张敏峰”的评论

引用来自“ztd”的评论

想起了在看雪的日子。

牛哦

我可不是牛人,只是喜欢自已写写游戏外挂浪费青春,看雪的牛人都是深不可测的,改个程序那是小儿科,高级的是那些加密解密和算法。

是啊,看雪很多牛人。收藏着《看雪学院十周年纪念收藏版》,经典啊!到现在还时不时的翻出来看看,获益良多~~
极品渣子
极品渣子

引用来自“张敏峰”的评论

引用来自“ztd”的评论

想起了在看雪的日子。

牛哦

我可不是牛人,只是喜欢自已写写游戏外挂浪费青春,看雪的牛人都是深不可测的,改个程序那是小儿科,高级的是那些加密解密和算法。
从汇编看for和while循环的效率

这事情得从C语言开始说起,先编写下面这两段代码: 1、 #include<stdio.h> int main(void) { int i; for(i = 0; i < 10; i++) { } return 0;} 2、 #include<stdio.h> int main(void) { int i......

firebroo
2015/04/25
0
3
开发者以不遵守GPL为由向Minecraft插件发出DMCA通知

流行游戏Minecraft的服务器软件并不出色,因此热心的社区Mod开发者开发了插件增强其性能。但Minecraft的软件是私有的,没有对外公开,插件工作需要服务软件的源代码。开发人员采用了反汇编的...

oschina
2014/09/08
4K
10
【汇编】计算机是如何工作的

李景源 原创作品 转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一、编写一个main.c文件,保存并退出。 二、比较重要的几条汇编指令 pushl %e...

sr5220
2015/03/08
0
0
函数调用的过程

转:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601204.html 首先说明,在堆栈中变量分布是从高地址到低地址分布,EBP是指向栈底的指针,在过程调用中不变,又称为帧指针。ESP...

种地瓜
2016/10/03
18
0
嵌入式开发之C基础学习笔记02--第一个例子分析

1.C语言程序结构和书写规范 系统头文件 #include <stdio.h> 双引号:自定义库文件 尖括号:操作系统下规定的库文件 /this is a helloword program/ <---注释 #include <stdio.h> <---编译预处......

吴锦涛
2012/12/09
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

这些Spring中的设计模式,你都知道吗?

设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。 Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行...

Java填坑之路
32分钟前
1
0
Spring Aop原理之Advisor过滤

在上文(Spring Aop之Advisor解析)中我们讲到,Spring Aop对目标bean的代理主要分为三个步骤:获取所有的Advisor,过滤当前bean可应用的Advisor和使用Advisor为当前bean生成代理对象,并且上文...

爱宝贝丶
43分钟前
0
0
JMockit学习教程

1 JMockit中文网 我觉得如果仅仅是开发自测的话,把JMockit中文网认真看一遍,就可以在项目中使用JMockit了。 http://jmockit.cn/index.htm 2 JMockit中文教程 官方文档中文版。对于不喜欢看...

SuperHeroes
55分钟前
0
0
Linux服务器几乎从不采用Arch Linux?

我们见得多的Linux服务器系统一般都是什么Ubuntu Server啊,什么Cent OS啊,什么Fedora啊,或者企业采用的Red Hat啊,为什么几乎没有Arch Linux呢?下面我将从若干个方面指出Arch Linux在服务...

linux-tao
今天
0
0
js 函数柯里化 闭包

参考 https://mp.weixin.qq.com/s/GEHL3jarDdAAcr5tQGjmDg 一个统计求和的函数 需要知道整个数组的信息,然后遍历求值 function countMoney() { let money = 0 // 温馨提示:arguments...

阿豪boy
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部