文档章节

10万行汇编代码

tsl0922
 tsl0922
发布于 2012/05/03 10:47
字数 701
阅读 8263
收藏 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

粉丝 258
博文 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
4.2K
10
【汇编】计算机是如何工作的

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

sr5220
2015/03/08
0
0
使用JS实现JS编译器,并将目标js生成二进制

上一篇文章 利用LLVM实现JS的编译器,创造属于自己的语言 中讲到使用llvm用C实现JS编译器,本片文章将使用JS来实现JS编译器,还是应了《Atwood定律》能够使用JavaScript实现的,必将使用Jav...

zy445566
09/11
0
0
函数调用的过程

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

种地瓜
2016/10/03
18
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
12
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
19
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
19
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
9
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部