第一节:事先说明
该版本的前身是《Win32汇编开发环境介绍和RadAsm简明教程(第二版)》,之所以改成现在的《Radasm与win32汇编开发教程(第三版)》,是因为我现在想跟大家分享更多的知识。除此之外我个人感觉这个名字太长了,而且我也在第二版的最后说过,希望能在下一版本中去掉其中的“简明”二字,令教程的内容更加丰富和充实。现在,从2006年到现在09年已经三年了,从当时还有几分天真和狂热的学生到现在每天早9晚6的上班族,无论是编程还是做人处事都有了很大的变化。所以还想在这个版本中跟大家谈谈实际工作中的程序员生活,希望能以此共勉!
还有一点需要说明,这个版本我会重新编写,无论是章节编排还是具体内容,在这个版本中不仅仅讨论Radasm的开发环境和Win32汇编的具体技术,而且还会加入软件工程方法、编码风格讨论、架构设计、开发过程管理等等在实际开发中与编程环环紧扣的软件开发技术。当然,我也并不是什么大师级的人物,所以只能将我所见所学共享给大家,当中的一些观点只是我的个人理解和想法,希望大家抱着学而不盲的精神来学习本教程。最后,希望本教程能带给你轻松愉快的学习历程,当一步步走完这个路程后,希望是柳暗花明又一村,前程再接路更明!
申志远(jhkdiy)
2009年6月6日
第二节:现实与幻想
如果说工作后给我的最大感触是什么,那我会以非常肯定的态度回答你:编程≠软件开发!毫无质疑,软件开发是一项非常注重实践的学科,纵使你拿到博士的学历,也并不代表你的开发能力比有实际工作经验的人强。但是,很多人就误以为只要自己充分掌握编程技术就可以了,因为这是软件开发最切实而不可脱离的工作。但是,在一个商业环境里,一个企业但靠几个编程高手是不会取得优秀战绩的。而且如果项目庞大或复杂性高,哪么就更能肯定此项目会摇摇欲坠,随时都有无限延期的威胁。下面我说说实际工作中令人触目惊心的软件开发历程。触目惊心?是的,我没说错,事实上该项目已经接近瘫痪了。
公司是做电力行业的软件为主的,该行业在业务流程方面并不复杂,但是在计算方面却千丝万缕,没有固定的标准。公司在一开始的时候由两个人负责该项目,因为已有网络版,这两位同事只是照着网络版的模式再做一个单机版而已。
我听说他们在接到该项目的时候第二天就开始写代码了,这怎么可能?因为这位同事跟我一样也是新员工,他之前也没有接触过该行业,所以对以很多业务流程和计算规则都是全然不知的。但是他们就在这种情况下开始开发了。
没有了解过业务需求,没有做过需求分析,没有架构设计,没有项目管理。拿起就编个不停。一开始时老板看到他们天天在写,天天再忙,很是欣慰。他们也的确是辛苦。
项目一直在做,他们一直在编,测试人员每天都有测试文档,而且还不停在抱怨软件动不动就崩溃,常规的业务流程都走不下去,计算经常出错。好像一直以来都没有一个可正常使用的版本,程序每天在更新,更搞笑的是每天都有两个人的不同版本更新。他们之间没有使用版本控制,源代码控制,当出现问题时难免会互相抱怨。
就这样,客户那边已经不能容忍一拖再拖了,老板也已做出最后的死命令,这个月底一定要在客户那边看到单机版,所以他们最近都在加班,继续编程,继续编程···,老板还在这个项目中加人手,公司将《人月神话》里的工程问题演绎的淋漓尽致。
今天,公司想撤销该项目的原有开发人员,再加多新人进去,以为这样项目可以快点开发完毕。可是,谁也不想接这个烂摊子,项目还会继续下去的。
所以,我奉劝还在学校的学子们,不要一味的追求编程技术,应该要学习全面,究竟在实际工作中一个项目会经历那些开发过程?一定会按照学校里讲的软件工程方法来开发吗?一个项目需要那些方面的技术人才组合呢?编程的时候确实是有严格规范还是按个人喜好而编写?软件编写出来后需要怎样的测试?多考虑一下这些问题,你就会去寻找相应的知识,待你准备好后,就不怕毕业难找工作了,因为不怕没有机会,就怕没有准备!
第三节:学习汇编需要理由吗?
经常看到网上不少朋友在问,“我该不该学汇编呀?”,“我只学过VB,汇编能学会吗?”,“汇编是不是很难学啊?”,“当今.Net大行其道,web开发流行不衰,学汇编还有用吗?”。
在现在,程序设计语言流行的也有十几种,不流行的就更不用说了,每种语言都要它的优缺点,如果你已经工作了,当然目标比较明确,学习汇编有目的,也有针对性。如果你还是学生,哪么就不用想太多,学就是了,我想,当你问需不需要学汇编的时候,事实上你已经在关注它了,已经想去了解它了,那你心中肯定已经有某种学习心愿了吧。
下面我也谈谈学汇编的几个好处
1:能直接跟CPU打交道,对计算机原理有着更深层次的了解,在此基础上学习C语言等高级语言,当谈到地址啊,指针啊等概念的时候,你就会有一种想当然的理解:“本来就是这么一回事!”
2:如果你想学习破解,加密解密,必然要接触到反汇编工具,哦,实际上你面对的是汇编程序,这时如果你不懂汇编语言的话那就无从谈破解了。
3:如果你一直在追求最高效、最佳性能的程序设计方法,哪么汇编当然是你可以使用的最强工具了,只要你技术高,有时效率与高级语言相比是相差百倍千倍的。
4:学习汇编的最好理由:“我就喜欢!”,是的,最好的理由出于一种自然的学习冲动,你会喜欢上各种指令的应用,你会陶醉在只有3KB的完整Windows程序当中,你更会为自己设计的卓越程序而沾沾自喜。这难道不是最好的理由吗?
第四节:学习汇编的最佳途径?
本来就听说汇编很难学了,所以在学习之前打听一下好的学习方法当然合情合理,于是我就在网上到处发帖子,结果无非是对于基础的指令死记硬背。接着就是看别人的代码,然后自己写代码。对于这样的答案当然不满意,于是又继续问,但是没人理了…
我必须指出,我是直接学习32位的汇编编程的,而不是学校里开的《8086/8088汇编语言程序设计》。记得某位激励大师说过,任何人只要做到下面的三步就能成就任何目标:
1:搜集你所关注目标的任何信息!
2:立即行动!
3:永不放弃,直到成功!
学习汇编当然要看书了,于是我就到了书店随便看看这类的图书,当这本书映入我眼帘的时候,我就立即拿起它来看了,看了看目录,看了看内容,觉得翻译的不错,于是就买了下来。我基本上是一口气学下去的,期间没有刻意背记任何指令,只是按着书本的教学思路每章学几条指令,做做后面的练习题。就这样,学完了,80368的基本指令也就记住了,而且知道怎么用。学习过程一点也不像网上朋友说的那样呕心沥血···。有句话说的好:“好的开始就已成功一半了”。我想,我的学习如此顺利也是得益于这本书的教学方法。这本书的书名是《Intel 汇编语言程序设计(第四版)》。请大家不要误会,我没有收取该书出版商的任何金钱,该书确确实实有很多优点。而且后来我也继续买了国内的《IBM-PC汇编语言程序设计(第2版)》。看了十几页后就看不下去了。我并无意将自己的爱好强加于各位读者,但还是推荐初学者以这本书来入门汇编。
当有了基础后又可以做些什么呢?这就要看你当初学习的目的了,如果想搞加密解密,很好,现在就反汇编一个程序看看。看看程序用汇编来描述是如何实现的。其实,我认为最有意思的是反自己,自己用汇编写个程序,然后再用反汇编工具反出来看看。这样来回互动的话你会学到很多关于编译器和反汇编工具的机理,自然学习的质量也就高。如果你的目标是为了编写短小精悍的Windows程序,那就先看看Iczelion的Win32汇编教程,网上同时有它的英文版和中文翻译版下载,如果找不到的话给个邮件给我。另外一个就是国内的罗云彬编著的《Windows环境下32位汇编语言程序设计》,网上也有该书的pdf文件下载。可是两种教程都没有介绍在Windows环境下的汇编IDE使用,罗云彬的书依然建议用makefile方式来手工编译程序,而源代码的编辑则用EditPlus来做。老实说,当一个人已经熟悉了一种环境后在另一个环境下总会有所比较,而比较的结果是:用汇编开发程序还是这么麻烦,我已经习惯了VB、VC等Windows环境下的集成开发环境,一下子要自己整合编辑、编译、连接、运行、调试等的工具确实不是一个好的开端。这也是我编写本书的目的之一,但本书远远不止这些。因为编程不等于软件开发,我会让各位感受一下如何利用软件工程方法来进行需求定义、模块划分、架构设计、详细设计;如何编写出代码风格良好的程序;项目文件应该如何组织。程序应该如何调试,在实际的商业环境中程序应该达到何等的健壮性。再多就不说了,若知后事如何,请听下回分解···
其实,就我个人而言,学习的目的比较偏向于实际应用,对于用汇编实现什么杨辉三角啊,水仙花数,百钱买百鸡等等问题并无兴趣。但对于汇编优化程序效率啊,用汇编操纵OpenGL啊,用汇编写注册机等等实际应用有好感。所以,如果想在本教程里学习基本的指令和一些书本上的问题是找不到的。其实,不存在最佳的学习途径,有些人喜欢向左走,有些人喜欢向右走。路就在自己的脚下,如果还在犹豫怎么走而不踏出第一步的话,你永远也不知道这条路究竟是长是短。所以,不要犹豫,行动会带你力量!