前言
很多人脑子里都有这么一些概念:
“汇编啊?那是‘高手’们的专利,我用不上”、“我又不和系统打交道,学汇编干嘛啊”、“用汇编写程序的人是白痴(CSDN论坛里看到的原话),太没效率了”
同意的朋友一定不少!诚然现在的软件已经越来越庞大越,来越复杂,程序开发人员已经远离了那个只和二进制0、1代码,汇编助记符打交道的年代!就算是写系统软件也是如此,PC上的操作系统、编译工具绝大多数代码也是用高级语言完成的!如果现在有人说要完全用汇编在PC上开发软件(不是写程序),那确实不值得大家推崇!但任何问题都要辩证的来看,但如果能在应用高级语言开发软件的过程中合理的应用所学的汇编知识绝对是有百利而无一害(因为这里是说Delphi和汇编,移植等问题不考虑在内)。知识是用来解决实际问题的,所以没有必要排斥汇编,应该让其充分融入到我们应用高级语言开发的过程中去!虽然一味的强调技术至上不对,但也不能因此完全忽略代码细节。最好还是能在开发效率和执行效率中找到一个平衡。
如果掌握了汇编,如果使用其相关知识呢?
首当其冲的当然是利用嵌入汇编编写程序。在Delphi中的嵌入汇编程序很多情况可以参照Win32ASM。但由于嵌入汇编的特殊性,这里并不支持EQU、PROC、STRUC、SEGMENT等伪指令,它们实现的大部分功能已由Object Pascal实现。另外在寄存器的修改方面,除了ESI、EDI、EBP等外,EBX也不能被随便修改,因为在Delphi中用EBX保存Self指针。如果一定要用,必须用栈来保存/恢复寄存器中的原始数据。当然嵌入汇编只是解决问题的手段,不是目的,汇编代码会降低程序的可读性、可维护性能,在同等情况下理应优先考虑如何用高级语言实现。
利用嵌入汇编编写程序自然也不是学习汇编的唯一目的,更重要的掌握了一种从深层次理解程序的方法。即使不直接用汇编写程序,将这种用汇编思考问题的思想融入到用高级语言编写程序的过程中去,汇编一样成为我们分析解决问题的利器。另外汇编知识对于程序调试一样也有着不可替代的作用,在很多情况汇编层的调试可以更快的解决问题。由此可见,有些情况下汇编知识的应用不光是为了提高程序执行效率,有时候也是为了提高开发效率。
许多朋友并没有认真学习过汇编,就开始大喊汇编无用,大学课本无用就显得太不负责任了。有些朋友在大学里只求掌握几种时髦的开发工具和最新的开发技术,而忽视汇编这类基础知识的学习也不见得是明智的做法。相信只要冯.诺伊曼的计算机体系不发生改变,现有的汇编知识必然会有其用武之地。