首页
社区
课程
招聘
[翻译]Win32Asm Tutorial By Exagone 01
发表于: 2005-7-18 19:22 7088

[翻译]Win32Asm Tutorial By Exagone 01

2005-7-18 19:22
7088
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.0 汇编语言
汇编语言是为了代替处理器能明白的原始二进制码而创造出来的。(WE:翻译这句死了我N个脑细胞)在以前,在还没有高级编程语言的时候,程序用汇编语言写成。汇编代码直接地描述处理器可以执行的指令。例如:
add eax, edx
add这个指令将两个值相加。eax 和 edx 叫作寄存器,它们能包含数值并储存在处理器中。这个代码转换成十六进制代码是:66 03 C2 。处理器读这些代码,然后执行它所描述的指令。高级语言像C语言把它们自己的语言转换成汇编代码,然后汇编代码再转换成二进制代码。(WE:谁能用十六进制码写个程序出来?真不知道汇编语言出来之前那些程序员怎么活过来的,要是我早疯掉了)(WE:本来下面有一个表格,但是在论坛里面好像贴不出来,等我有了上传权限之后我再把DOC文档传上来吧)
(记住一点,这个汇编代码是经过简化的,输出的结果依靠C语言代码的上下文)

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:什么下一个教程啊?)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
2
最初由 WindElf 发布
因为我才读初二
........

英雄出少年啊
2005-8-8 16:53
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
3
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)
2005-8-8 17:07
0
雪    币: 260
活跃值: (81)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
才初二?我简直不敢想象,以后天下是你们的。
2005-8-9 00:54
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
英雄出少年啊。
2005-12-29 12:44
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
好好努力哦,学好现在的知识最重要!
2006-1-2 15:04
0
雪    币: 211
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7

不懂为啥把读初二告诉我们
2006-1-24 11:50
0
游客
登录 | 注册 方可回帖
返回
//