汇编教程1:如何学习汇编

agan881 2008-07-25 02:06:09
想想我自己玩电脑也是不少时间了,也经常在各大论坛灌水,得到过很多人的帮助。

但是非常遗憾的事一直都没有为别人贡献过什么,现在我有点时间所以写了几篇关于汇编的文章,我以后还会继续更新。路线是:先写点16位汇编-32位汇编-解密知识-外挂制作。希望大家关注,同时多给点意见,在下将非常感激 ,同时希望大家多多回复不要让帖子沉下去。希望多多支持
如果大家有什么问题可以给我发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操作,对显卡,硬盘的控制。那样你会体会到学习汇编语言的快乐。

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

...全文
6861 44 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
just___download 2010-11-08
  • 打赏
  • 举报
回复
看了楼主的文章,学习起来更有目标了..
谢谢楼主分享..!!!
daiwenhaoshabi 2010-11-06
  • 打赏
  • 举报
回复
在学汇编语言 王爽的 入门用它比较好
以前学罗云彬的 入门很难
天空的期望 2010-10-30
  • 打赏
  • 举报
回复
多谢楼主的鼓励 几天还看了几个别人问的问题 发现自己思考的太少 仅仅只是拘泥于课本了 以后要努力坚持
likai356539776 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 zoeran 的回复:]
强烈关注中、、嘿嘿
[/Quote]
绝对支持你,阿gan
splend000 2010-10-19
  • 打赏
  • 举报
回复
ding~~~~~~~~`
yiyigwb 2010-10-17
  • 打赏
  • 举报
回复
挺好,现在正打算学习汇编,希望自己能够学会
javaadu 2010-10-17
  • 打赏
  • 举报
回复
正在学习汇编,一同努力,关注你。。。。
Az568 2010-10-17
  • 打赏
  • 举报
回复
这个帖子要顶,多谢楼主。
xulugui 2010-10-10
  • 打赏
  • 举报
回复
我不是来灌水的…………嘎嘎
Lanou2180_tech 2010-09-09
  • 打赏
  • 举报
回复
学习了!
ado_cn1 2010-08-19
  • 打赏
  • 举报
回复
本科的时候将汇编是作为另一门科目的辅助工具学过一点,可能学习的深度不够,也可能是因为学过c语言的原因,对于基本的东西感觉不是太难啊
zht0829 2010-08-14
  • 打赏
  • 举报
回复
热心人啊,谢谢了
一个人的叹息 2010-07-27
  • 打赏
  • 举报
回复
我是新手,我会易语言,能学会汇编吗?
honghong742 2010-07-21
  • 打赏
  • 举报
回复
学起来真的很累的!
wujiyulin 2010-07-19
  • 打赏
  • 举报
回复
写的很好 谢谢lz~~
omi178375765 2010-07-16
  • 打赏
  • 举报
回复
正在学习汇编 感觉还是很难的 但是认真了 还是可以理解的
yfzmeng 2010-07-13
  • 打赏
  • 举报
回复
看到此文,感觉自己有了很大的信心!
willhardwork 2010-06-11
  • 打赏
  • 举报
回复
顶,我正想学。就是不知道怎么学
xhmlwaf 2010-06-11
  • 打赏
  • 举报
回复
将要学习汇编。
s8975565 2010-06-10
  • 打赏
  • 举报
回复
顶起,现在才看到,唉!
加载更多回复(24)
本书分为三部分。第一部分是基础部分,以8086/8088为背景,以DOS和PC兼容机为软硬件平台,以MASM和TASM为汇编器,介绍汇编语言的有关概念,讲解汇编语言程序设计技术。第二部分是提高部分,以80386为背景,以新一代微处理器Pentium为目标,细致和通俗地介绍了保护方式下的有关概念,系统和详细地讲解了保护方式下的编程技术,真实和生动地展示了保护方式下的编程细节。第三部分是上机实验指导。 本书的第一部分适合初学者,可作为学习汇编语言程序设计的教材。本书的第二部分适合已基本掌握8086/8088汇编语言的程序员,可作为学习保护方式编程技术的教材或参考书,也可作为其他人员了解高档微处理器和保护方式编程技术的参考书,还可作为程序员透彻地了解Windows程序设计技术的参考书。 第一部分 基础部分 第1章 绪论 1.1 汇编语言概述 1.1.1 汇编语言 1.1.2 汇编语言的特点 1.1.3 恰当地使用汇编语言 1.2 数据的表示和类型 1.2.1 数值数据的表示 1.2.2 非数值数据的表示 1.2.3 基本数据类型 1.3 Intel系列CPU简介 1.3.1 8位微处理器 1.3.2 16位微处理器 1.3.3 32位微处理器 1.3.4 Pentium和Pentium Pro 1.4 习题 第2章 8086/8088寻址方式和指令系统 2.1 8086/8088寄存器组 2.1.1 8086/8088 CPU寄存器组 2.1.2 标志寄存器 2.2 存储器分段和地址的形成 2.2.1 存储单元的地址和内容 2.2.2 存储器的分段 2.2.3 物理地址的形成 2.2.4 段寄存器的引用 2.3 8086/8088的寻址方式 2.3.1 立即寻址方式 2.3.2 寄存器寻址方式 2.3.3 直接寻址方式 2.3.4 寄存器间接寻址方式 2.3.5 寄存器相对寻址方式 2.3.6 基址加变址寻址方式 2.3.7 相对基址加变址寻址方式 2.4 8086/8088指令系统 2.4.1 指令集说明 2.4.2 数据传送指令 2.4.3 堆栈操作指令 2.4.4 标志操作指令 2.4.5 加减运算指令 2.4.6 乘除运算指令 2.4.7 逻辑运算和移位指令 2.4.8 转移指令 2.5 习题 第3章 汇编语言及其程序设计初步 3.1 汇编语言的语句 3.1.1 语句的种类和格式 3.1.2 数值表达式 3.1.3 地址表达式 3.2 变量和标号 3.2.1 数据定义语句 3.2.2 变量和标号 3.3 常用伪指令语句和源程序组织 3.3.1 符号定义语句 3.3.2 段定义语句 3.3.3 汇编语言源程序的组织 3.4 顺序程序设计 3.4.1 顺序程序举例 3.4.2 简单查表法代码转换 3.4.3 查表法求函数值 3.5 分支程序设计 3.5.1 分支程序举例 3.5.2 利用地址表实现多向分支 3.6 循环程序设计 3.6.1 循环程序举例 3.6.2 多重循环程序举例 3.7 习题 第4章 子程序设计和DOS功能调用 4.1 子程序设计 4.1.1 过程调用和返回指令 4.1.2 过程定义语句 4.1.3 子程序举例 4.1.4 子程序说明信息 4.1.5 寄存器的保护与恢复 4.2 主程序与子程序间的参数传递 4.2.1 利用寄存器传递参数 4.2.2 利用约定存储单元传递参数 4.2.3 利用堆栈传递参数 4.2.4 利用CALL后续区传递参数 4.3 DOS功能调用及应用 4.3.1 DOS功能调用概述 4.3.2 基本I/O功能调用 4.3.3 应用举例 4.4 磁盘文件管理及应用 4.4.1 DOS磁盘文件管理功能调用 4.4.2 应用举例 4.5 子程序的递归和重入 4.5.1 递归子程序 4.5.2 可重入子程序 4.6 习题 第5章 输入输出与中断 5.1输 入和输出的基本概念 5.1.1 I/O端口地址和I/O指令 5.1.2 数据传送方式 5.1.3 存取RT/CMOS RAM 5.2 查询方式传送数据 5.2.1 查询传送方式 5.2.2 读实时钟 5.2.3 查询方式打印输出 5.3 中断 5.3.1 中断和中断传送方式 5.3.2 中断向量表 5.3.3 中断响应过程 5.3.4 外部中断 5.3.5 内部中断 5.3.6 中断优先级和中断嵌套 5.3.7 中断处理程序的设计 5.4 基本输入输出系统BIOS 5.4.1 基本输入输出系统BIOS概述 5.4.2 键盘输入 5.4.3 显示输出 5.4.4 打印输出 5.5 软中断处理程序举例 5.5.1 打印I/O程序 5.5.2 时钟显示程序 5.6 习题 第6章 简单应用程序的设计 6.1 字符串处理 6.1.1 字符串操作指令 6.1.2 重复前缀 6.1.3 字符串操作举例 6.2 十进制数算术运算调整指令及应用 6.2.1 组合BCD码的算术运算调整指令 6.2.2 未组合BCD码的算术运算调整指令 6.2.3 应用举例 6.3 DOS程序段前缀和特殊情况处理程序 6.3.1 DOS程序段前缀PSP 6.3.2 对Ctrl+C键和Ctrl+Break键的处理 6.4 TSR程序设计举例 6.4.1 驻留的时钟显示程序 6.4.2 热键激活的TSR程序 6.5 习题 第7章 高级汇编语言技术 7.1 结构和记录 7.1.1 结构 7.1.2 记录 7.2 宏 7.2.1 宏指令的定义和使用 7.2.2 宏指令的用途 7.2.3 宏指令中参数的使用 7.2.4 特殊的宏运算符 7.2.5 宏与子程序的区别 7.2.6 与宏有关的伪指令 7.2.7 宏定义的嵌套 7.3 重复汇编 7.3.1 伪指令REPT 7.3.2 伪指令IRP 7.3.3 伪指令IRPC 7.4 条件汇编 7.4.1 条件汇编伪指令 7.4.2 条件汇编与宏结合 7.5 源程序的结合 7.5.1 源程序的结合 7.5.2 宏库的使用 7.6 习题 第8章 模块化程序设计技术 8.1 段的完整定义 8.1.1 完整的段定义 8.1.2 关于堆栈段的说明 8.1.3 段组的说明和使用 8.2 段的简化定义 8.2.1 存储模型说明伪指令 8.2.2 简化的段定义伪指令 8.2.3 存储模型说明伪指令的隐含动作 8.3 模块间的通信 8.3.1 伪指令PUBLIC和伪指令EXTRN 8.3.2 模块间的转移 8.3.3 模块间的信息传递 8.4 子程序库 8.4.1 子程序库 8.4.2 建立子程序库 8.4.3 使用举例 8.5 编写供Turbo C调用的函数 8.5.1 汇编格式的编译结果 8.5.2 汇编模块应该遵守的约定 8.5.3 参数传递和寄存器保护 8.5.4 举例 8.6 习题 第二部分 提高部分 第9章 80386程序设计基础 9.1 80386寄存器 9.1.1 通用寄存器 9.1.2 段寄存器 9.1.3 指令指针和标志寄存器 9.2 80386存储器寻址 9.2.1 存储器寻址基本概念 9.2.2 灵活的存储器寻址方式 9.2.3 支持各种数据结构 9.3 80386指令集 9.3.1 数据传送指令 9.3.2 算术运算指令 9.3.3 逻辑运算和移位指令 9.3.4 控制转移指令 9.3.5 串操作指令 9.3.6 高级语言支持指令 9.3.7 条件字节设置指令 9.3.8 位操作指令 9.3.9 处理器控制指令 9.4 实方式下的程序设计 9.4.1 说明 9.4.2 实例 9.5 习题 第10章 保护方式下的80386及其编程 10.1 保护方式简述 10.1.1 存储管理机制 10.1.2 保护机制 10.2 分段管理机制 10.2.1 段定义和虚拟地址到线性地址转换 10.2.2 存储段描述符 10 2.3 全局和局部描述符表 10.2.4 段选择子 10.2.5 段描述符高速缓冲寄存器 10.3 80386控制寄存器和系统地址寄存器 10.3.1 控制寄存器 10 3.2 系统地址寄存器 10.4 实方式与保护方式切换实例 10.4.1 演示实方式和保护方式切换的实例(实例一) 10.4.2 演示32位代码段和16位代码段切换的实例(实例二) 10.5 任务状态段和控制门 10.5.1 系统段描述符 10.5.2 门描述符 10.5.3 任务状态段 10.6 控制转移 10.6.1 任务内无特权级变换的转移 10.6.2 演示任务内无特权级变换转移的实例(实例三) 10.6.3 任务内不同特权级的变换 10.6.4 演示任务内特权级变换的实例(实例四) 10.6.5 任务切换 10.6.6 演示任务切换的实例(实例五) 10.7 80386的中断和异常 10.7.1 80386的中断和异常 10.7.2 异常类型 10.7.3 中断和异常的转移方法 10.7.4 演示中断处理的实例(实例六) 10.7.5 演示异常处理的实例(实例七) 10.7.6 各种转移途径小结 10.8 操作系统类指令 10.8.1 实方式和任何特权级下可执行的指令 10.8.2 实方式及特权级0下可执行的指令 10 8.3 只能在保护方式下执行的指令 10.8.4 显示关键寄存器内容的实例(实例八) 10.8.5 特权指令 10.9 输入/输出保护 10.9.1 输入/输出保护 10.9.2 重要标志保护 10.9.3 演示输入/输出保护的实例(实例九) 10.10 分页管理机制 10.10.1 存储器分页管理机制 10.10.2 线性地址到物理地址的转换 10.10.3 页级保护和虚拟存储器支持 10.10.4 页异常 10.10.5 演示分页机制的实例(实例十) 10.11 虚拟8086方式 10.11.1 V86方式 10.11.2 进入和离开V86方式 10.11.3 演示进入和离开V86方式的实例(实例十一) 10.11.4 V86方式下的敏感指令 10.12 习题 第11章 80486及Pentium程序设计基础 11.1 80486程序设计基础 11.1.1 寄存器 11.1.2 指令系统 11.1.3 片上超高速缓存 11.2 80486对调试的支持 11 2.1 调试寄存器 11.2.2 演示调试故障/陷阶的实例 11.3 Pentium程序设计基础 11.3.1 寄存器 11.3.2 指令系统 11.3.3 处理器的识别 11.3.4 片上超高速缓存 11.4 基于Pentium的程序优化技术 11.4.1 流水线优化技术 11.4.2 分支优化技术 11.4.3 超高速缓存代化技术 11.5 习题 第三部分 上机实验指导 第12章 实验指导 12.1 实验的一般步骤 12.2 汇编器和连接器的使用 12.2.1 MASM的使用 12.2.2 LINK的使用 12.2.3 TASM的使用 12.2.4 TLINK的使用 12.3 调试器DEBUG的使用 12.3.1 启动和退出DEBUG 12.3.2 命令一览 12.3.3 利用DEBUG调试程序 12.4 Turbo Debugger的使用 12.4.1 启动和退出TD 12.4.2 利用TD调试汇编程序 参考文献 附录 Pentium指令与标志参考表

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧