Win32Asm Tutorial By Exagone
大家好,今天我给大家带来我自己翻译的一篇Win32 汇编教程,原文出自dREAMtHEATER整理的汇编语言教程。大家如果英语还可以的话,建议去看原文,因为我才读初二,英语水平实在不怎么样(期末考试英语78分),让各位见笑了。这里先贴出序言和第一章,以后的章节会陆续贴出,其中括号里以WE开头的是我的注释。
序言
首先简短地介绍一下这个教程。Win32汇编不是一个非常普遍的编程语言,所以只有很少的(好)的教程。同样,大多数教程都把重点放在Win32编程上面(也就是Windows API,使用标准的Windows编程方式等等),而不是汇编语言编程本身,使用 opcode,寄存器等等。尽管你能在其他教程里面找到这些东西,这些教程通常讲解DOS编程(WE:我之前就找了一大堆这些东东-_-)。这确实能帮助你学习汇编语言,但在Windows下编程,你不需要知道关于DOS中断和端口I/O函数。Windows提供Windows API标准函数,你可以在你的程序里面使用它,but more on this later.(WE:这句不知道啥意思,大概是:但更多的还在后面)。这个教程的目的是用汇编语言讲解Win32编程,也讲解汇编语言本身。
1.1 为什么?
为什么你要使用汇编语言,而不是C或其它语言如果用汇编语言写程序比较困难??用汇编语言写出来的程序小而且快。(WE:不会,嘻嘻)In very high-level programming languages like artificial intelligence, it gets harder for the compiler to produce output code.编译器不得不找出最快(或最小)的方法来构造汇编代码,尽管编译器在不断地变得更好,但自己写代码(用opcode优化)将构造更小和更快的代码。不过当然这比高级语言困难很多。
这里还有另外一个和高级语言不同的地方,它们的函数使用运行时DLL。例如,Visual C++的msvcrt.dll包含了标准C语言函数。这些程序在大多数时间都能正常工作,但有时候因为DLL版本的某些原因(DLL地狱)会出现例外,而且用户总是需要确保这些DLL已经安装。对于使用VC的用户这当然不是问题,因为这些DLL文件会通过Windows安装程序进行安装。Visual Basic 甚至不把自己的语言转换成汇编代码(当然VB5之后的版本进行了一些转换,但没有完全转换),它高度地依靠msvbvm50.dll,VB虚拟机。The exe that is created by VB exists solely of simple pieces of code and many calls to this dll.(WE:不会)这也是VB为什么会慢的原因。汇编程序是所有语言中最快的,它只使用系统的DLL文件如kernel32.dll、user32.dll等等。
另一个误解则是,许多人都认为汇编语言是不可能用来编程的语言。当然,汇编语言很难,但不是不可能。用汇编语言构建一个大的项目确实很难,我只是使用它来写一些小程序或者一些其他语言可以使用的DLL文件代替程序中对速度要求很高的部分。同样,DOS程序和Windows程序之间有很大的不同之处。DOS程序把中断当作函数使用。像int 10 调用视频显示 I/O,int 13 调用磁盘 I/O。在Windows中有API,Application Programming Interface(WE:应用程序编程接口),这些接口由函数组成,你可以在你的程序里面使用它。在DOS程序里面,所有的中断都有一个中断编号和一个函数编号。在Windows中,API函数只有名称(例如MessageBox,CreateWindowEx)。你可以引入函数库(DLL文件),然后使用里面的函数。这使得用汇编语言写程序变得简单了许多。在下一个教程中,你将会更多地学习这方面的知识。(WE:什么下一个教程啊?)
In very high-level programming languages like artificial intelligence, it gets harder for the compiler to produce output code
在像人工智能这样的超高级编程语言中,生成输出代码对编译器而言变得更困难。
The exe that is created by VB exists solely of simple pieces of code and many calls to this dll
VB生成的EXE文件仅仅是简单的代码片段,还需要调用这个DLL(MSVBVM5.DLL)