菜鸟从零开始玩汇编.doc_第1页
菜鸟从零开始玩汇编.doc_第2页
菜鸟从零开始玩汇编.doc_第3页
菜鸟从零开始玩汇编.doc_第4页
菜鸟从零开始玩汇编.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

菜鸟从零开始玩汇编.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:masm32libpath的变量值后加上;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, stdcalloption casemap:noneincludelib masm32libkernel32.libincludelib masm32libuser32.libinclude masm32includekernel32.incinclude masm32includeuser32.incinclude masm32includewindows.inc.dataMsgText db Hello world!,0MsgTitle db This is a messagebox,0.codestart:invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, MB_OK or MB_ICONINFORMATIONinvoke ExitProcess, NULLend start好,就这么多了,那么我来逐字逐句的解释下,各位不要嫌我唠叨。第一句.486这个是在告诉我们的汇编器应该生成486处理器的伪代码哦。.model flat,stdcall使用平坦内存模式并使用stdcall调用习惯。它的意思是函数的参数从右往左压入,而且函数在结束时自己清栈。菜鸟二:什么是平坦内存模式啊?回答:.MODEL 是用来指定内存模式的伪指令,在Win32下,只有一种内存模型,那就是FLAT。 STDCALL 告诉编译器参数的传递约定。参数的传递约定是指参数传达时的顺序(从左到右或从右到左)和由谁恢复堆栈指针(调用者或被调用者)。在Win16下有两种约定:C 和 PASCAL。C 约定规定参数传递顺序是从右到左,即最右边的参数最先压栈,由调用者恢复堆栈指针。第二句option casemap:none控制字符的映射为大写。为了Windows.inc文件能正常工作,这个应该为”none”第三、四句includelib masm32libkernel32.libincludelib masm32libuser32.libinclude masm32includekernel32.incinclude masm32includeuser32.incinclude masm32includewindows.inc这是为了使用了windowsAPI的函数,也就是说需要我们导入dll(动态链接库),所以这是由导入库(.lib)来完成的。我们使用windowsAPI的函数,导入库是一个必要的步骤。Includelib C:masm32libkernel32.lib载入库kernel32.lib同样的道理includelib masm32libuser32.lib载入库user32.lib.菜鸟三:为什么上面两个不一样的呢?上面那有c:的呀,为什么下面没有呢?回答:呵呵,这下你就知道,为什么汇编源文件要和masm在同一个区了但你不只是需要包含库。包含文件(.inc)也是必须的,所以我们需要以下命令include masm32includekernel32.incinclude masm32includeuser32.incinclude masm32includewindows.inc第五句.dataMsgText db Hello world!,0MsgTitle db This is a messagebox,0.data 指示data部分的开始。用db,字节直接被插入,而且字符串又只是字节的集合,data部分会在包含上面的字符串,附加上结尾的0。MsgText 和MsgTitle这两个API函数我们在前面已经把他封装在dll库里了这两个函数我就不用多解释了,VB里面有的,依靠这2个函数,就可以跳出一个提示框。我们一会编写的时候就可以看到了。第六句.code代码部分由此开始start:end start这句我想也不用解释,这是一个标签不过要注意,这里是对称的。还要注意一点,这不一定非要是start其他的也可以,比如:wuming:end wuminginvoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, MB_OK or MB_ICONINFORMATIONinvoke ExitProcess, NULL在这个,使用了invoke 这个函数invoke MessageBox, Null, ADDR MsgText, ADDR MsgTitle, Null因为MsgText装有第一个字符串的offset,MsgTitle有第二个字符串的offset,但是由于安全性,我们使用ADDR来替换offset,避免溢出,防止尴尬(此处有掌声)下面我们来看看MB_OKMB_OK是OK按钮的样式,MB_ICONINFORMATION是 information图标的样式。样式是用“or”操作符联合的。这不是or伪代码。Masm会在汇编前处理or操作。不用or,你可以用号(加号)代替,但有时对层叠样式有问题(一个样式包含其他一些样式)。但在本例中你也可以用号。第五步让源代码变成EXE文件我们把.486.model flat, stdcalloption casemap:noneincludelib masm32libkernel32.libincludelib masm32libuser32.libinclude masm32includekernel32.incinclude masm32includeuser32.incinclude masm32includewindows.inc.dataMsgText db Hello world!,0MsgTitle db This is a messagebox,0.codestart:invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, MB_OK or MB_ICONINFORMATIONinvoke ExitProcess, NULLend start保存成1.asm,然后放在我们的D:myasm目录下然后在dos下面进入这个目录然后使用命令ml /c /coff/c =汇编不链接(因为我们用link.exe来做这项工作) /coff = 产生COFF格式的object(对象)文件,这是Windows可执行文件的标准格式。如图8好了,已经生成了一个1.obj文件我想obj文件大家一定很熟悉,特别是安装vc+的朋友,因为vc+把源代码转化成exe文件是先要转化成汇编语言的。好了,现在我们看看myasm下面的文件,一共只有2个一个是1.asm一个是1.obj然后我们使用link来进行连接如图9然后我们去d:mysam发现多了一个1.exe我们运行他如图10this is a messagebox就是我们

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论