admin 管理员组

文章数量: 887021


2024年2月26日发(作者:黄页网站18以下勿看含羞草)

菜鸟从零开始玩汇编.txt爱情就像脚上的鞋,只有失去的时候才知道赤脚走路是什么滋味骗人有风险,说慌要谨慎。不要爱上年纪小的男人,他会把你当成爱情学校,一旦学徒圆满,便会义无反顾地离开你。总是有人问我:我是菜鸟,想学编程,应该学什么啊?

我总是和他说:哎呀,你自己学什么自己按需来啊,最先学就学C语言吧。

呵呵,其实学编程没有什么困难的,今天我就教你入门一个语言——汇编

现在网上汇编的教程也挺难找的

希望我写的这个可以给大家分享一下经验

祝愿大家早日成功,到时候别忘了我啊:)

第一步——安装

1. 去下载一个masm的系列来当作我们的汇编器,说实话,这东西真的让汇编简单多了,我们由于是win32下的汇编,所以我们就不用费那么大的劲去学什么I/O系统了,好我已经下载好了,工具自己去搜索下载,首先我们安装我的是masm8.0的版本。不过先在的最新版本是8.2的,喜欢的可以去下载那个

我们选择要安装的地方,我喜欢选择D盘,当然选择哪个盘是你自己的想法。

2. 运行安装程序

如图1

我们选择D,然后按install masm32

然后会跳出一个对话框

如图2

我们按确定。

然后等待一段时间。(我等待了43秒)

3. 然后会跳出一个命令提示符

如图3

我们按4来进行安装,然后继续等待他来安装

如果没什么意外的话,应该很快的,我用了10多秒就安装完了

然后

如图4

我们按确定

这样我们进行win32的汇编器已经安装了,那么就开始下一步吧

第二步——架设环境

什么编程几乎都需要环境。比如asp就需要IIS的环境来实现,vc++也需要设置环境,java,jsp,没有不需要设置环境的

汇编也不例外,那么如何架设环境呢?

1. 查看下列地方

由于我是windows2003 server的,所以我就在我的电脑——高级——环境变量里面设置

如图5

由于我先前已经装了Microsoft Visual Studio系列软件,所以我已经有了incluede,lib,path这3个变量,如果没有的你新建incluede,lib,path这三个变量,然后按编辑,里面的内容是你装masm32的本地路径,我们安装在D盘下面,所以我们就要设置

include的路径为d:masm32include.

如下例图6所示

同样的道理,我们新建lib变量名,变量值为d:masm32lib

新建path变量名,变量值为d:masm32bin(注意,不是d:masm32path).

上面我说的是没有这些变量值的,可是我现在安装了Microsoft Visual Studio系列软件,怎么办呢?其实办法就是——直接添加(此处出现掌声)

如下例图7所示

记住哦,前面一定要用一个分号隔开。全部按照

lib的变量值后加上;d:masm32lib

path的变量值后加上;d:masm32bin(注意,不是d:masm32path).

好了,我们的环境已经架设好了,重新启动吧!(不需要图片示范吧。谁都会的事)

第三步——准备进行编程的准备

一:安装所需要的工具

前面的汇编器的安装本来觉的在这里写的,不过觉的先把前面安装了踏实些:),好了,我们来看看win32汇编除了汇编器还需要什么?

其实还需要4个东东

1. 汇编器,(我们刚才已经安装了)把伪代码翻译为给处理器读的原始输出的汇编器

2. 连接器,就是把目标文件和库文件 “链接”到一起输出最终的可执行文件。

3. 资源编辑器,就是用于创建资源(图形,对话框,位图,菜单等)的资源编辑器。

4. 文本编辑器,用来编辑文本。(masm32其实自带的有一个编辑器,只不过功能比UE逊色点)

二:建立编程特用文件夹

如果要进行编程的话,没有一个特定的文件夹来进行编程的话是不行的

我们用vc++来编程的时候,他还是需要你建立一个文件夹的,vc++和asm同出一门,都属于华山派(此处有笑声)。

我们在D盘建立一个名为myasm的文件夹

菜鸟一:为什么一定要在D盘建立一个文件夹呢?建立在桌面上不是更方便吗?

回答:asm在编译程序的时候,是在dos下编译的,在遇到桌面的文件夹的时候,往往会有人按右键,用进入dos快速通道的方法来直接在目录下进行编译,由于目录过长,字目录过多,往往会出现“~”这个符号,但是asm是不能解释出“~”这个符号的,所以会造成无法编译的效果。

第四步——编写源代码

世界上最有名的程序是什么?

当然毫无疑问是hello world了,不管学习什么编程,大部分人的第一个程序都是hello

world。

如果没有什么定义去规定他的话,权且叫他“无名第一定律吧”(各位大哥别骂我~~)

那么我们就看一下hello world的源代码吧

.486

.model flat, stdcall

option casemap:none

includelib

includelib

include

include

include

.data

MsgText db "Hello world!",0

MsgTitle db "This is a messagebox",0

.code

start:

invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, MB_OK or MB_ICONINFORMATION

invoke ExitProcess, NULL

end start

好,就这么多了,那么我来逐字逐句的解释下,各位不要嫌我唠叨。

第一句

.486

这个是在告诉我们的汇编器应该生成486处理器的伪代码哦。

.model flat,stdcall

使用平坦内存模式并使用stdcall调用习惯。它的意思是函数的参数从右往左压入,而且函数在结束时自己清栈。

菜鸟二:什么是平坦内存模式啊?

回答:.MODEL 是用来指定内存模式的伪指令,在Win32下,只有一种内存模型,那就是FLAT。

STDCALL 告诉编译器参数的传递约定。参数的传递约定是指参数传达时的顺序(从左到右或从右到左)和由谁恢复堆栈指针(调用者或被调用者)。在Win16下有两种约定:C 和 PASCAL。C

约定规定参数传递顺序是从右到左,即最右边的参数最先压栈,由调用者恢复堆栈指针。

第二句

option casemap:none

控制字符的映射为大写。为了文件能正常工作,这个应该为”none”

第三、四句

includelib

includelib

include

include

include

这是为了使用了windowsAPI的函数,也就是说需要我们导入dll(动态链接库),所以这是由导入库(.lib)来完成的。我们使用windowsAPI的函数,导入库是一个必要的步骤。

Includelib C:载入库同样的道理

includelib 载入库.

菜鸟三:为什么上面两个不一样的呢?上面那有c:的呀,为什么下面没有呢?

回答:呵呵,这下你就知道,为什么汇编源文件要和masm在同一个区了

但你不只是需要包含库。包含文件(.inc)也是必须的,所以我们需要以下命令

include

include

include

第五句

.data

MsgText db "Hello world!",0

MsgTitle db "This is a messagebox",0

.data 指示data部分的开始。用db,字节直接被插入,而且字符串又只是字节的集合,data部分会在包含上面的字符串,附加上结尾的0。

MsgText 和MsgTitle这两个API函数我们在前面已经把他封装在dll库里了

这两个函数我就不用多解释了,VB里面有的,依靠这2个函数,就可以跳出一个提示框。我们一会编写的时候就可以看到了。

第六句

.code代码部分由此开始

start:

end start

这句我想也不用解释,这是一个标签

不过要注意,这里是对称的。

还要注意一点,这不一定非要是start

其他的也可以,比如:

wuming:

end wuming

invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, MB_OK or MB_ICONINFORMATION

invoke ExitProcess, NULL

在这个,使用了invoke 这个函数invoke MessageBox, Null, ADDR MsgText, ADDR MsgTitle,

Null

因为MsgText装有第一个字符串的offset,MsgTitle有第二个字符串的offset,但是由于安全性,我们使用ADDR来替换offset,避免溢出,防止尴尬(此处有掌声)

下面我们来看看MB_OK

MB_OK是OK按钮的样式,MB_ICONINFORMATION是 information图标的样式。样式是用“or”操作符联合的。这不是or伪代码。Masm会在汇编前处理or操作。不用or,你可以用+号(加号)代替,但有时对层叠样式有问题(一个样式包含其他一些样式)。但在本例中你也可以用+号。

第五步——让源代码变成EXE文件

我们把

.486

.model flat, stdcall

option casemap:none

includelib

includelib

include

include

include

.data

MsgText db "Hello world!",0

MsgTitle db "This is a messagebox",0

.code

start:

invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, MB_OK or MB_ICONINFORMATION

invoke ExitProcess, NULL

end start

保存成,然后放在我们的D:myasm目录下

然后在dos下面进入这个目录

然后使用命令

ml /c /coff

/c =汇编不链接(因为我们用来做这项工作)

/coff = 产生COFF格式的object(对象)文件,这是Windows可执行文件的标准格式。

如图8

好了,已经生成了一个文件

我想obj文件大家一定很熟悉,特别是安装vc++的朋友,因为vc++把源代码转化成exe文件是先要转化成汇编语言的。好了,现在我们看看myasm下面的文件,一共只有2个

一个是一个是

然后我们使用link来进行连接

如图9

然后我们去d:mysam

发现多了一个

我们运行他

如图10

this is a messagebox就是我们在msgtitie里面添加的

Hello world就是我们在msgbox里面添加的

第六步——结束

好了,如果你是认真的看过以上内容,相信你编译出一个汇编程序是没有问题的了,但是本

问说实话仅仅只是汇编里面极其片面的一点东西。

如果你对汇编感兴趣,你就去买罗云彬的汇编的书吧。我是很喜欢那书,呵呵~~~~~~

本文章在第五步里面有部分是从声明:第五句和第六句由taowen的文章修改的,由于联系不到作者,我没有经过他同意就使用了,道歉!

我写这文章也就是想给大家起个抛砖引玉的作用,不要浪费时间,好好享受编程带来的乐趣吧!


本文标签: 需要 汇编 编程 文件 安装