首页
社区
课程
招聘
[原创]汇编教程1:如何学习汇编
发表于: 2008-7-25 01:57 22872

[原创]汇编教程1:如何学习汇编

2008-7-25 01:57
22872

想想我自己玩电脑也是不少时间了,也经常在各大论坛灌水,得到过很多人的帮助。

但是非常遗憾的事一直都没有为别人贡献过什么,现在我有点时间所以写了几篇关于汇编的文章,我以后还会继续更新。其实在看雪上发帖子我心还是很虚的,高手太多了,怕给人笑话。真的、不过我还是想试试。希望大家关注,同时多给点意见,在下将非常感激 ,同时希望大家多多回复不要让帖子沉下去。希望多多支持,写了好几篇了,不过没有时间全部转过来,下面有观看链接,如果觉得还行就去看看吧,给点意见。高手也指定下,看看哪里有错误。
如果大家有什么问题可以给我发Email:agan97@qq.com
我将尽全力帮助你解答问题!
观看文章链接:http://www.aganhome.cn

写这篇文章(我准备把他写成一个系列),我想讲述如何从零开始学汇编语言程序设计,请千万相信汇编其实是很简单的,只要自己努力一定是可以学会的。可能由于我的技术(编程和写作)也很不到家在很多方面都写的不是很好甚至是胡说八道(但愿你不会这样认为)。如果你对此有什么意见可以给我发Email:agan88@foxmail给我我将竭尽全力的回复每一封邮件同时希望大家多给我提提意见,让我把文章写的更好。。!

这篇文章里不会有太多技术方面的东西,我想在这章先和大家一起探讨如何学习汇编的问题,也许有些内容让你觉得我很啰唆。那是以为我为了照顾大部分的读者所以写的比较详细。。请大家多支持我,看了之后多给我意见。如果没有意外我会坚持每个礼拜发表一篇。今天写的是第一章,只是个引子,还没具体涉及到编程。

罗云彬说的好啊,学汇编就像千军万马过独木桥,能够坚持到最后的很少。这个不禁让我想起了高考啊。汇编这东西如果你真的学精通的话可以让计算机做很多别人不能够做的事情,因此很多人都想学习汇编。掌握这方面技术,对自身的提高确实有好处。你可以通过反汇编别人的程序跟踪别人的软件,了解别人的编程思路。通过了解别人的程序思路,使自己写出更加好的程序。而且写病毒,木马和外挂等等的一些软件~~~都必须用汇编才能够写的漂亮。研究汇编还有助于掌握一些系统底层知识,系统底层知识绝对是构造起大型软件的坚实基础。许多程序发展,都经历了这一锻炼过程的。 而大多数人可能认为汇编是一门高深的学问。很难学,我前几天在网上拿了个软件给我朋友用。 他问我用什么写的,我说用汇编。。他不信以为汇编根本就写不出强大复杂的软件,其实这都是老皇历了(现在的汇编其实我感觉和C差不多都是调用windows API来编程)。造成这种原因我觉得是以前在dos下面用汇编来写程序太麻烦,所以给人的感觉就成了很复杂,(以前在dos下汇编没有很多API可以调用)就将汇编神话了,造成初学者在心理上就承认了汇编很难学的”事实”其实不是这样现在其他编程语言可以做的比如C,用汇编做起来也不是很麻烦。再一方面由于学习资料比较匮乏学。初学者一般不知从何下手,由于没方向,花费了大量时间和精力,走了不少弯路。这里我就给想学汇编的指下学习方向(根据我自己的学习经历)。

在学汇编前,最好先掌握一门高级语言编程,这样再学汇编应容易些,如果你学校或者在其他地方学了C语言的学起来就比较轻松了,很多书上都是用C语言程序做范例来讲解的,如果你没有学也没有关系这里我给你推荐个视频: <<尚学堂科技java系列视频教程>>,这个教程可比那些什么什么大学跟这课本念PPT的好多了, 你或者会问我为什么学汇编要去看java的视频啊,这里我只是推荐你去看下他视频的前3章,也就算基础知识,这在所有的程序设计语言里面都适用, 看完了再学习汇编坡度就不会那么陡了。

看完视频我想再向大家介绍几本书都是中国人写的(我觉得国人计算机方面的著作就算汇编比较有出席拉) 一本是王爽写的<<汇编语言>>和罗云彬写的windows环境下32位汇编语言程序设计,这2本书在学习汇编的人心中地位都非常高现在都出了第2版了,而且网上都有电子版,google下就能找到。其他还有一些书比如: 温冬蝉,沈美明:清华大学出版社,《IBM PC 汇编语言程序设计教程》, 。【美】Kip R。Irvine 著,温玉杰等译:《Intel 汇编语言程序设计》(第四版),都是比较经典的,如果有机会可以看看!!

学习汇编要多动手,不要只看书和书上的例子,有条件就把例子弄到电脑上试一试,如果成功了,不要高兴,你的工作只完成了一半,把例子改一改,按你的意思,想想改了之后的结果,与上机对照一下,你会有收获的。 写汇编程序难免会出错,老一辈的人都还在讲解着dubug的使用,其实现在windows环境下的汇编调试器已经非常的完善了,我平时一般是用Rad ASM里面自带的调试器,他已经可以给我解决大部分由于编程粗心而引起的错误,还有一些是逻辑错误我一般

用ollydbg进行调试,这里我再给大家推荐个编辑器Rad ASM,这是一个非常棒的汇编IDE编程环境掌握他的使用可以让安心的写汇编程序而不用把心思在记忆复杂的一些编译指令上,我准备写篇Rad ASM的教程,但是现在还没有动笔。现在比较好的讲解Rad ASM可能是jhkdiy写的 Win32汇编开发环境介绍和RadAsm简明教程

学习汇编其实很累的,需花费大量的时间,而且经常会遇到很多的问题,资料又比较匮乏。这时你可能有点想退却,其实你不要着急,只要你认真学习,成功就在眼前。没有人是生来就什么都会的,如果你有问题,就大胆的去问你周围的人。而且现在网上也有很多的专门讨论汇编的站点比较好的应该是aogo的汇编小站和罗云彬的编程乐园,学汇编的秘诀就是勤奋+执着!记住并能做到这两点,你会变得很优秀的。

不管你学汇编是出于什么目的,如果你在学习汇编的过程中如果遇到了问题可以发邮件给我探讨,我非常的欢迎邮件是:agan88@foxmail。同时在学习汇编的时候如果突然觉得学的很痛苦,可以在看雪学院下点东西玩玩解密,培养培养下兴趣也未尝不可啊!多在机子上试试底层的东西,如bios调用,IO操作,对显卡,硬盘的控制。那样你会体会到学习汇编语言的快乐。

总之要记得想学会汇编,你需要自立自强,以及自学能力。现在开始吧……


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (37)
雪    币: 249
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
支持啊....
不过你这样只会让很多想学的人 "知难而退"
事实上汇编很简单的..
额.应该从win32教起..
比如说HelloWorld
直接innoke api就行了
..啥是编程啊..不就是调用系统提供的接口吗..
这样说来多简单啊..
就像你教你家小狗 怎么蹲下 你只要给他一个命令就行了,比如"坐下"
invoke 坐下.
当然 你还可以加点词 比如如何坐下.
那么这个如何坐下就是参数了...
  只是 想说 不要把想说的人吓退了..
好像国内教育就是这样吧..
什么总线 什么寻址 什么中断 ..这些东西之前根本就不需要用
我只要会invoke就行了 当然 还得记住几个"命令"
2008-7-25 05:13
0
雪    币: 63
活跃值: (17)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
支持LZ写radasm教程
2008-7-25 07:35
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
看到希望了,快写
2008-7-25 09:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢LZ能对菜鸟们的关心.希望LZ能将教材写详细些.不要象一些人写的东西.整篇都是"大家都知道了.就不细说了."搞得菜鸟们云里雾里的.又看不懂后面的.信心大受打击.还不如不写.
2008-7-25 09:43
0
雪    币: 347
活跃值: (30)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
6
不错,很好

希望能快点更新
2008-7-25 10:38
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
7
支持下阿甘,写得不做.已经在群里拜读了.
2008-7-25 12:27
0
雪    币: 232
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
期待rad asm教程
2008-7-25 20:38
0
雪    币: 266
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
支持啊    ~~~~~~~~~~~我就是那个给你提错别字那个
2008-7-27 22:41
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
bios调用,IO操作,对显卡,硬盘的控制。那样你会体会到学习汇编语言的快乐。
----------------------------------
作者辛苦了。但是还是觉得新手不要这么搞。
2008-7-29 01:56
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
杀猪杀尾巴
一人一个杀法
别人的都是借鉴
形成自己的才是王道
2008-7-30 14:43
0
雪    币: 347
活跃值: (30)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
12
汇编教程2:汇编基础知识

准备提笔写的时候好像不知道怎么下笔啊,毕竟以前我都没有写过技术方面的文章,怕自己技术不够让高手笑话,又怕表达不清楚自己的意思.但是心一横死就死吧!在上一篇 如何学习汇编中没有给大家扯太多技术话题,但是我觉得那也是非常重要的,学习什么事有了信心就成功了一半,所以还希望大家继续坚定要把汇编学好的思想,要相信自己汇编是很简单的,我们通过自己的努力一定可以把汇编学好

那么让我们开始今天的话题…..

今天主要扯点计算机的工作方式,因为汇编是面向机器的语言,所以非常有必要了解下计算机的结构,CPU的工作方式.这里我假设你只有一点点最基本的电脑基础啊,最好自己去弄懂那个什么进制转换的,我觉得特麻烦,不过却也比较简单..我这里就不和大家扯了自己了解下~~那么既然假设你没有什么电脑知识就会显得有些啰唆,高手别见笑啊!

说到汇编语言啊,就扯远拉,远到哪里呢, 嗯很远, 汇编语言和机器语言是很亲密的,所以要聊下汇编语言那就不得不又扯下机器语言了,^_^.真远啊!!

机器语言

什么叫机器语言呢,机器语言就是一些机器指令的集合拉,也就是一些二进制的数字什么010010的,这就是机器指令,计算机呢可以把这些010010什么的转变为高低电平,使计算机的电子器件收到驱动,进行运算..嗯,搞的好像很复杂似的,其实简单理解就是计算机也有一门语言(机器语言)就像我们的汉语一样,我们汉语的构成呢是由字来构成的,机器语言(也就是电脑自己的语言,就是一些01001什么的来构成的.当初我理解的时候就想啊,机器语言不是人发明的么,为什么不教他学汉语啊要教他学什么01001的那么麻烦^_^.呵呵其实现在很多人都在做着这样的努力呢, 诶~~又扯远了.

给大家扯了机器语言的那就再给大家扯一下计算机吧,你有跟朋友去过电脑城装过电脑吗?或者见过别人把电脑机箱打开后里面的情况吗? 对里面有一个大风扇,大风扇下面知道是什么吗? 那是CPU就是电脑的心脏,那家伙就像我们脑袋一样是指挥部.其实我们见到的那CPU叫微处理器,是它控制着电脑的显卡啊,声卡什么的,当然我们不能够直接去控制这些东西那些玩意不听我们的,但是他们的指挥官(CPU)听我们,我们编程的任务就是指挥CPU(嗯,你可以把这想象成一场战争)去控制显卡显示图像,声卡发声.是不是很兴奋,可是我要跟你说的是他们的指挥官(CPU)是个莽夫特别讨厌学习国家的语言(这个和我倒是有些类似啊).所以我们想要和CPU沟通就要学习他的语言,可是他的语言实在是太难学了(有点向英语那么难学^_^)所以我不准备去学习他的语言,同时我也不建议你去学它的语言,那你要问我怎么办拉,嘿嘿很好办,你看过胡锦涛和布什谈话的时候是怎么谈的吗? 对拉有翻译,毛主席说人人都是平等的,胡主席可以请翻译,我们也可以~~~~我们的翻译的就是 汇编, 汇编是个好同志啊,他帮我们把指令翻译成很长很长的0101001,从此我们就离开了机器语言的怀抱,而用汇编来控制CPU拉,这是什么,这是世界的进步啊,是不是又感觉这世界又美好了一些!!

汇编语言

那么,我们现在已经理解了汇编语言和机器语言的相同和区别了,要说相同的话他们都好像是4个汉字,区别就是前2个字不同,倒下一片~~~~~~“, 其实汇编和机器语言在我理解是没有什么区别的,汇编只是把机器语言的010010对应的翻译了一下,就像我学英语一样,老是喜欢做硬式翻译,所以此时此刻我不得不再打击你一下,因为汇编只是硬式翻译了下机器语言,所以造成了汇编的指令过多,和过于复杂了.当然后来为了解决这个问题又出了C语言对吧,你不会想当叛徒去投靠C吧,晕,张三丰说过,千万不能够当叛徒,这不,现在的32位汇编就有宏汇编,搞的和C都差不多了,所以你也别想着要跑C那里去,现在我们只要学习下DOS下的汇编理解了那些指令的用处,到时候我们在windows下面写程序的时候都有很多宏可以调用了..

汇编语言的组成

那么我们现在把机器语言扯完了,(其实我还想再扯一会的).但是怕你不满意!!下面就是汇编闪亮登场了,你也许会问我汇编长什么样子呢?? 这不好说啊,但是我可以肯定的是他绝对没有我帅^_^…其实汇编不能够说长什么样子,应该说汇编由什么东西构成呢, 那么我告诉你汇编是由 一些指令 比如你看着头晕的mov啊什么的, 还有就是伪指令了,伪指令就是些段标记啊什么,现在不知道没有关系,到时候我再跟你扯..

存储器(内存)

现在我假设你已经把汇编指令学完了,那么你肯定是命令计算机执行几条指令对吧,理论上说的过去,但是现在还有个小问题就是..你在什么地方给计算机发布命令呢? 计算机可不是很随便的人啊, 计算机很死板死板到什么程度呢,它只能够在内存(存储器)中接受我们的指令.其他地方…sorry不行.所以我们必须把我们的指令放到内存里面让CPU来读取和执行,所以知道内存的作用了吧,很重要吧,那么我们当然要了解下CPU是如何来读取我执行我们的指令的对吧..所以我们的学习环节里面又多了个,了解CPU是如何在内存中读取指令和写入指令..

那么到底CPU是如何去读取指令呢,是这样的,CPU把内存划分成一个一个的单元,单元里边的编号是从0开始的,比如有128个存储单元,那么第一个就是0 最后一个就是127,你现在肯定想问拉,那一个存储单元可以存多少信息呢?? 计算机把一个2进制位称为一个比特(bit)8个就是一个字节了,(Byte)实际上现在的电脑啊它的内存是大的不得了的,我们只有了解这个概念就成,比如我现在写文章这台的电脑就有512M内存,那么换算下来是多少呢?

1KB = 1024 B(Byte) 1MB = 1024 KB 1GB = 1024 MB 1TB = 1024 GB

你可能要问了,我这是不是在讲硬盘啊,硬盘上面才用多少个G啊这样标示啊,其实内存和硬盘是一样的,他们的计量单位都是按照上面那些公式来的.

存储单元

刚才给大家扯到,内存被分为多个存储单元,存储单元是从0开始编号.你可能有疑问为什么要编号呢,这里就可以给你回答了,这就向一条街啊,你找一户人家肯定不好找对吧, 但是给他们的房子都弄个编号那就好找了..其实CPU读数据就向找人一样啊,根据门牌号(存储单元编号)这样找就非常快拉.

地址总线

既然说到了编号啊,就给大家聊点编号的问题吧,CPU本是有限啊,只能够指定特定多的存储单元,为什么啊,这个就是由于CPU的地址总线的限制了,比如啊我们的身份证是18位的,当我们国家的人口啊超过18为数字能够容纳的范围的话是无法标示的对吧(不过估计目前是无法达到这个数字的,这都是计划生育搞的好啊),那么现在是CPU有多少地址总线的话就只能够对特定多的内存进行寻址,如果再多出来的内存是没有用的,我们假设CPU有10根地址总线那么我们来看下他的寻址情况,在电子计算机中,一根导线可以传送的稳定状态只有2种,0和1

那么10根地址总线可以标示的范围为, 2的10次方个,最小就是0,那么最大就是1023了.所以可以得出结论,一个CPU有N跟地址线,则可以寻址的范围为2的N次方个内存单元.

数据总线

既然聊了关于存储器(内存)的那么多,不妨再聊点比较有趣的事情,聊什么呢,聊点关于CPU读取指令的问题,首先我想向大家提个问题,比如我现在在内存中有1000条指令啊, CPU来读取这些指令的时候可以一次全部读完吗? 这个问题啊,据我所知啊我们现在用的CPU是没有办法一次全部读完的,那么它怎么办呢,你也想到了,就是分多次来读取对吧.那么问题又来了CPU一次可以读取多少条指令呢? 这要看CPU的数据总线的宽度了,8086的CPU数据总线宽度为16位,是16位2进制的数据比如现在传送 89D9H 8086CPU就可以一次传送完,如果是89D898那么这个数字16位就标示不完了,所以要分两次来传送.

你看到这里我不得不佩服你的勇气,你是一个精神可嘉的人,虽然我写着很累,但是相信你看着也不轻松啊,诶..主要是因为我文采不好写的很烂,让人不大容易明白,其实这些东西都是概念性的东西,我这人最讨厌概念性的东西了,所以我学汇编的时候也是囫囵吞枣就过去了,所以现在给大家讲起来也底气不足..不过没有关系这些概念性的东西没有弄懂也没有关系,了解下就成了,等你到时候把汇编学个入门后再倒回来看就会获益匪浅的.

回忆下我们吹了什么东西, 机器语言, 汇编语言明白了吗? 存储器(内存)的作用明白了吗?存储单元和地址总线还有数据总线这些明白了吗? 如果明白了就过关了,如果没有诶~~~~不是你有问题就是我有问题了..

这段终于给大家吹完了,我也松了一口气,以后的扯淡应该会更加轻松些.所以别紧张.下一篇可能要过几天了,这几天比较忙啊!下一篇就给大家真刀实枪的干了,我们就要接触汇编指令了,期待吧! 请多多支持我的blog,你们的支持是我最大的动力..有动力马才跑的快啊! 转载的人应该著名下出处啊,不容易啊大哥!

http://www.aganhome.cn

在啊甘的博客上看到的,帮忙转过来了,还有好几篇文章呢,大家去学习吧,呵
2008-8-3 16:36
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
楼上的写的不错啊,可是那个网址怎磨打不开阿?????

请验证下!!!!
2008-9-24 11:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我每学一段时间就停下来,回来再看又忘了.
感觉都有点对不住自己
2008-9-24 11:29
0
雪    币: 347
活跃值: (30)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
15
都说是从人家的博客上转过来的,还什么我写的,那个网址我以前看的时候能打开的,我也不知道为什么打不开了,得问楼主了,不过貌似楼主好长时间没来了
2008-9-25 00:55
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
观看链接 无法成功链接
2008-9-25 08:21
0
雪    币: 590
活跃值: (177)
能力值: ( LV9,RANK:680 )
在线值:
发帖
回帖
粉丝
17
阿甘的blog
http://www.cnblogs.com/agan88/archive/2008/09/02/1282335.html

LZ的博客换了N次了,我来更新下o(∩_∩)o...
2008-9-26 21:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
楼主有QQ么 我也是刚学完DOS汇编 在看罗云彬的WIN32汇编 一起交流交流啊  我的QQ是631077181  邮箱是laoxujian@163.com
2008-9-27 23:49
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
汇编也不太难学,现在我学习了近一年,小有所成了。
2008-9-29 09:54
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
支持,向楼主学习
2008-9-29 10:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
刚起步,感觉是有点难,但我会努力的,因为不断的学习,才能让自己慢慢从不懂变懂
现在的我比起,刚接触电脑时,明显要懂得多了,呵呵
2008-9-29 15:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
非常感谢各位大侠的赐教.....
2008-10-11 15:55
0
雪    币: 158
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
23
"学汇编的秘诀就是勤奋+执着!"做什么都一样,能够坚持下去一定会有意想不到的收获!
2008-10-11 20:38
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
太难学了
     都不知道怎么下手
2008-10-13 20:06
0
雪    币: 430
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
现在的地址是:http://www.cnblogs.com/agan88/category/153360.html
2008-11-5 08:56
0
游客
登录 | 注册 方可回帖
返回
//