2005.7.10 |
Windows 汇编语言编程教程 |
Version 1.02
Copyright@2005,Jeff Huang.All rights reserved
Translator:fqh 2005.7.10
|
JEFF HUANG 作,fqh译 |
目录
介 绍 ……………………………………………………………………………2
为什么选用汇编语言 …………………………………………………………2
为什么选择Windows系统……………………………………………………2
Ⅰ开始学习之旅 ……………………………………………………………….…3
编译器 ………………………………………………………………………3
编辑器 …………………………………………………………………………3
Ⅱ第一个程序 ……………………………………………………………………4
控制台程序 ……………………………………………………………………4
窗体程序 ………………………………………………………………………6
ADDR 与 OFFSET ………………………………………………………6
Ⅲ汇编基础…………………………………………………………………………7
cpu寄存器 ……………………………………………………………………7
指令集基础 ……………………………………………………………………8
Push 和 Pop…………………………………………………………………8
Invoke ……………………………………………………………………9
程序例子 ………………………………………………………………………9
IV. 窗体程序基础…………………………………………………………………10
预备知识………………………………………………………………………10
宏……………………………………………………………………………10
过程…………………………………………………………………………10
变量…………………………………………………………………………10
一个简单的窗体程序…………………………………………………………11
IV. 深入汇编和系统………………………………………………………………13
字符串操作……………………………………………………………………13
文件管理………………………………………………………………………13
存储…………………………………………………………………………14
程序例子……………………………………………………………………14
控制……………………………………………………………………………15
附加资源 …………………………………………………………………………16
互联网………………………………………………………………………16
书籍…………………………………………………………………………16
MASM32……………………………………………………………………16
MSDN………………………………………………………………………16
新闻组………………………………………………………………………16
IRC …………………………………………………………………………16
介 绍 |
“This is for all you folks out there,who want to learn the magic art of Assembly programming”
-MAD
介 绍
我最近才开始学习windows系统汇编语言编程,这个教程是我在学习汇编语言的过程中写下来的。我阅读大量的在线教程、书本,以及通过新闻组以及IRC通讯工具请问他人,本人就是通过这些方式学习汇编语言的。互联网上有很多的汇编编程的教程,但这些教程只是侧重于X86汇编。因为这些教材都假定读者已经掌握了高级编程语言以及基本的计算机系统知识。
为什么选用汇编语言?
汇编语言具有若干的特色,使得在某此情况下,汇编语言是一种很好的选择。
1 快速 汇编语言程序运行的速度比高级语言程序要快。通常,要求运行效率高的子程序是用汇编语言编写的。
2 强大 运用汇编语言,你能得到不受限制的权力。相对的,高级语言则有种种限制,在实现某些特定的要求时变得困难。
3 体积小 汇编语言程序通常比其他语言程序要小得多。这种特性在空间有限的情况下是非常有用的。
为什么选择Windows系统?
在任何操作系统和处理器模式下,都可以编写相应的汇编语言程序的。但是当前,多数人在使用基于x86处理器的Windows系统,所以从编写运行于此种环境下的程序开始我们的教程。一旦一种汇编语言的基础知识掌握了,我们就会很容易写出在其他运行环境下汇编程序。
第一章 |
编写汇编程序,我们必须具备一些工具,它们是编译器以及编辑器。我们选择了一些能胜任这些工作的运行于Windows系统的工具如下。
编译器
编译器能把写下的汇编程序代码转换成机器码。通常,它附带有一个连接器。连接器用来连接可编译文件并从中生成可执行文件。Windows系统的可执行文件是以.exe为后缀的。下面给出一些流行的编译器:
1 MASM 这个编译器是本教程所选用的,在学习本教程的过程中,你可以使用它。它原先由微软公司开发,现在被包括在MASM32v8程序包内了。MASM32v8程序包还包括了其他的工具。你可以从这个网址得到它:http://www.masm32.com/.
注意:教程中有一些指令和宏指令,只有在MASM编译器才是有效的,所以强烈建议您从开始学习时选用MASM。 |
2. TASM 这是另一个受欢迎的编译器。由Borland公司开发,现在依然是个商业软件,所以你不能免费地获取到它。
3. NASM 一个免费开放源码的编译器,它也能在其他系统平台上使用。它可以从这个网址获取到http://sourceforge.net/projects/nasm/ 记住
编辑器
编辑器是在编译前编写程序代码的软件。编辑器可以个人自由选择。现在在很多种编辑器,你可以试用一下它们并选择一种你喜欢的。
1 Notepad 记事本,Windows系统自带的。虽然它缺少很多功能,但它使用简便。
2 Visual Studio 它不是免费的编辑器,但它出色的语法高亮显示功能能让你的代码更易于阅读。
3. 其他 – 还有很多其他的编辑器,在些不一一列出它们的名字。其中一些很受欢迎:
a. Ultraedit (我个人最喜欢的e) http://www.ultraedit.com/
b. Textpad http://www.textpad.com/
c. VIM http://www.vim.org/
d. Emacs http://www.gnu.org/software/emacs/emacs.html
e. jEdit http://www.jedit.org/
第二章 |
Ⅱ第一个程序
现在我们有了自己的工具,打开你的文本编辑器,跟着下面的介绍,开始学习编程吧。这是世上最普通的程序,“Hello World”程序。
控制台程序
控制台程序是运行在系统控制台的(也就大家所知的命令行)。为创建这个程序,首先粘贴下面的代码到你的文本编辑器上,并保存为文件“hello.asm”。
.386
.model flat, stdcall
option casemap :none
include /masm32/include/windows.inc
include /masm32/include/kernel32.inc
include /masm32/include/masm32.inc
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/masm32.lib
.data
HelloWorld db "Hello World!", 0
.code