学习汇编前你应该知道的知识

上传人:第*** 文档编号:34122048 上传时间:2018-02-21 格式:DOC 页数:26 大小:141KB
返回 下载 相关 举报
学习汇编前你应该知道的知识_第1页
第1页 / 共26页
学习汇编前你应该知道的知识_第2页
第2页 / 共26页
学习汇编前你应该知道的知识_第3页
第3页 / 共26页
学习汇编前你应该知道的知识_第4页
第4页 / 共26页
学习汇编前你应该知道的知识_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《学习汇编前你应该知道的知识》由会员分享,可在线阅读,更多相关《学习汇编前你应该知道的知识(26页珍藏版)》请在金锄头文库上搜索。

1、学习汇编前你应该知道的知识摘要汇编产生于 DOS 时代或更早,而现在是 Windows 时代,所以可能遗憾地说:尽管还有批牛人在用汇编开发核心级程序,但我们几乎没什么用,除了必要时间能拿来分析一两个程序的部分代码之外,别的也就没干什么用了。并且并不是所有的汇编命令都能在windows 下使用。 1 汇编需要什么工具和程序,到哪里下载?目前阶段,汇编程序仅需要两个程序就够了。 masm.exe,link.exe。二者可由http:/ 下载,前者是编译程序,后者是链接程序。另外,为了验证和调试程序,还需要一个程序 debug.exe,该程序由 windows 本身就提供,所以就不提供下载地址了。将

2、二者下载后,放到某一个目录中(任意目录都可以),考虑到很多命令需要通过键盘敲入,所以建议你不要把文件放入到长文件名目录、中文目录或很深的目录中。比如你可以建一个“D:Masm”目录,并建议此后的程序都放这个目录,此后称这个目录为汇编目录。 2 学习汇编需要有哪些编程方面的知识。没有任何编程方面的知识,学习此语言等于缘木求鱼,所以请放弃学习的想法。一般来说至少要知道如下几点:*)程序的运行逻辑结构有顺序(按语句依次执行)、分支结构(IF.THEN.ELSE.),循环结构(FOR.NEXT)三种结构。*)知道什么是子程序,什么是调用。*)汇编程序员的视角。不同编程视角编程要求是不一样的。比如删除文

3、件,用户的视角是找到“删除”按钮或菜单,然后单击一下即可。高级程序员的视角是知道删除的文件,并发出删除命令。这些通过 API 实现。汇编程员的视角是得到要删除的文件名,找到该文件所在位置,通过调用删除“中断命令”进行删除。操作系统开发人员的视角则是接到删除命令后,先找到系统根目录区,由根目录区的链接依次找到子目录区,直到找到要删除的文件,然后按照操作系统删除文件的规则对该文件名进行修改。比如 DOS,只把第一个字符改成?。按程序语句等价的角度看,一行 VB 的打印语句,用汇编实现大约需要一百二十多行。知道汇编语言的视角后就要知道,前面的道路是坎坷的,没有耐心是不行的。想通过几分钟几行程序就完成

4、很复杂的操作不是件容易的事。3 学汇编有什么用?汇编产生于 DOS 时代或更早,而现在是 Windows 时代,所以可能遗憾地说:尽管还有批牛人在用汇编开发核心级程序,但我们几乎没什么用,除了必要时间能拿来分析一两个程序的部分代码之外,别的也就没干什么用了。并且并不是所有的汇编命令都能在windows 下使用。而泛泛地追求“时髦”而学本语言,最后的结果是损了夫人又折兵。所以学之前你要考虑好。我劝那些为了当“黑客”而学汇编的人就此止步。第零讲 预备知识1 一个汇编程序的编译过程是怎么样的。1)首先你需要找一个编辑器,编辑器用任何“纯文本”编辑器都可以。比如记事本。编好以后保存到汇编目录中。扩展名

5、为 asm,比如 myfirst.asm。但这里建议你找一个能显示出当前行的编译器。这样出错后排错很容易。2)然后在 DOS 下进入 D:Masm 目录中,输入“masm myfirst.asm,如果有错系统会提示出错的行位置和出错原因。3)然后再输入“link myfirst.obj”,即可看到当前目录下有一个 myfirst.exe 程序。2 宏汇编和汇编有什么区别吗?二者的区别在于前者提供宏,后者不提供。后者已找不到了,所以你可以认为二者没有区别。3 机器语言、汇编语言、高级语言的关系最早的计算机采用机器语言,这种语言直接用二进制数表示,通过直接输入二进制数,插拔电路板等实现,这种“编程

6、”很容易出错,每个命令都是通过查命令表实现,既然是通过“查表”实现的,那当然也可以让计算机来代替人查表实现了。于是就产生了汇编语言,所以不管别人怎么定义机、汇语言,我就认为,二者是等价。后来人们发现,用汇编语言编某一功能的时候,连续一段代码都是相同或相似,于是就考虑用一句语言来代替这一段汇编语言,于是就产生了高级语言。因此,所有高级语言都能转化成汇编语言,而所以汇编语言又可转化成机器语言。反之,所有机器语言可以转成汇编语言(因为二者等价)。但并不是所以汇编语言都能转成高级语言。4 计算机的组成通常都把计算机定义成五部分:运算器、控制器、存储器、输入系统、输出系统。为了简单其间,我们如此理解:运

7、算器+控制器=CPU。存储器=内存(暂不包括外存,永不包括 CACHE)。输入系统=键盘(不包括鼠标),输入系统=显示器(不包括打印机,绘图仪)。5 寄存器和内存的区别寄存器在 CPU 中。内存在内存条中。前者的速度比后者快 100 倍左右。后面的程序要求每条指定要么没有内存数据,要么在有一个寄存器的参与下有一个内存数据。(也就是说,不存在只访问内存的指令)。6 汇编语言的计数与生活中的计数不一样,汇编中的计数是从 0 开始的。比如 16 个计数,则是从015,而不是生活中的 116。这一点看起来简单,真运算起来就不是件容易的事了,不信等着瞧。7 进制问题又与生活中不一样的地方是进制。切记下面

8、的常识:*)计算机内部存储都用二进制。*)我们的汇编源程序默认都用十进制。(除非你指明类型)*)我们用的调试程序 debug 默认的都是十六进制。(无法指明其他类型)其中十六进制的十六个个位数依次是:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。8 进制转换一个比较简单的方法是查表法。十进制 十六进制 二进制0 0 0000 1 1 00012 2 00103 3 00114 4 01005 5 01016 6 01107 7 01118 8 10009 9 100110 A 101011 B 101112 C 110013 D 110114 E 111015 F 1111好

9、了,结合 6,7,8 三条。大家来算一个“题”。某一组数据显示时,每个数据占了四个位置,每行共十六个。问:十六进制的 13 位置在哪里(第几行,第几列)。格式如下:m m m m n n n n o o o o p p p p 注:之所以没用 ABC 是怕与上面十六进制弄混。r r r r s s s s t t t t u u u u第一讲 基础知识1 访问内存程序在内存中,访问内存是几乎每一程序都要进行的操作,计算机对内存编址是线性的,也就是说是一维的,比如 256M 的内存,地址就应该是从 0(256M-1),这个地址称为物理地址或绝对地址。1.1 地址表示但从汇编程序员的角度看,内存却

10、是二维的,要说明一个地址,需要给出两个值,就象你在平面上指定一点需要说出(X,Y)坐标一样,汇编程序员的内存视角也需要两个“坐标”,前一个称为段地址(Segment),后一个称为偏移地址(Offset),该地址称为逻辑地址。比如“1234:3DF5”就是一个地址。“1F3F:”不是一个地址,因为他只有段地址,没有编移地址。注意此后的地址都用十六进制表示。1.2 地址计算前面提到,计算机编址是一维的,汇编程序员是二维的,那么二者怎么换算呢?由后者到前者的换算方法是,“段地址串”后面加个“0”,然后再加上偏移地址。比如“1234:3DF5”(十六进制的加减运算参见相关资料)12340 串后加了一个

11、 03DF5-16135 注意此串仍然是十六进制。所以,汇编程序员眼中的地址“1234:3DF5”就是物理地址(计算机编址):16135。知道了由后者向前者的转换,那么由前者向后者的转换呢?“不知道”,为什么不知道,继续往下看。1.3 到底哪个地址对。知道了 1.2 的地址算法后,我又发现一个问题:“1000:6135”的物理地址是多少呢? 10000+6135=16135。“1001:6125”的物理地址呢? 10010+6125=16135。.那么到底哪个对呢?问题的回答是这样的:假设我现在让你按一下“L”键,我可以告诉你如下几种方法中的一种或几种。1 请按一下“L”键; 2 请按一下键盘

12、上第四行第十个键;3 请按一下第十列中的第四个键;4 请按一下“K”右边的键;5 按标准指法单击一下右手无名指。举上面的例子也就是说,同一个地址有很多种表示方式,具体用哪一种,要看实际使用时的情况。但无论用哪种方式,只要能达到目的即可。(实际中该问题一般不会受此问题困扰,但初学时突然想不通)。1.4 有多少内存可以访问无论是段地址还是偏移地址都是四位十六进制(如果不够四位,前面补 0)。也就是说:总共可以访问的地址说是:0000:0000FFFF:FFFF。 总共 FFFF0+FFFF+1=10FFF0 个地址。也就是不到 1M 的空间。记住如下结论:*)不管你实际内存有多少,目前我们只能访问

13、不到 1M 的空间。*)而实际上连这 1M 也用不完。其中上端的 384K 的址只能读不能写,只能读,一般称为 ROM。*)低端的 640K 可以读写。但这 640K 的低端 100 多 K 也不能随便写,因此 DOS 系统使用该区。*)原来 1024M 的内存,汇编程序只能使用其中 400 多 K。这段内存的容易相当于一个普通文档的大小。不过这就足够了。2 DEBUG 的使用先记住以下两个命令:D 命令和 Q 命令。前者是显示内存内容,后者是退出 DEBUG 命令。-以下为抄别的人内容-DEBUG.EXE 程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中

14、间运行结果、显示和修改寄存器或存储单元内容等多种功能。它能使程序设计人员或用户触及到机器内部,因此可以说它是 80X86CPU 的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。1)DEBUG 程序使用在 DOS 提示符下键入命令:CDEBUG 盘符:路径文件名.EXE参数 1参数 2 这时屏幕上出现 DEBUG 的提示符“-”,表示系统在 DEBUG 管理之下,此时可以用DEBUG 进行程序调试。若所有选项省略,仅把 DEBUG 装入内存,可对当前内存中的内容进行调试,或者再用 N 和 L 命令,从指定盘上装入要调试的程序;若命令行中有文件名,则DOS 把 DEBUG 程序调入内存后,再由

15、 DEBUG 将指定的文件名装入内存。2)DEBUG 的常用命令(1)退出命令 Q格式:Q 功能:退出 DEBUG,返回到操作系统。(2)显示存储单元命令 D格式 1:D起始地址格式 2:D起始地址结束地址|字节数功能:格式 1 从起始地址开始按十六进制显示 80H 个单元的内容,每行 16 个单元,共 8 行,每行右边显示 16 个单元的 ASCII 码,不可显示的 ASCII 码则显示“”。格式 2显示指定范围内存储单元的内容,其他显示方式与格式 1 一样。如果缺省起始地址或地址范围,则从当前的地址开始按格式 1 显示。例如: -D 200 ;表示从 DS:0200H 开始显示 128 个单元内容-D 100 120 ;表示显示 DS:0100-DS:0120 单元的内容说明:在 DEBUG 中,地址表示方式有如下形式:段寄存器名:相对地址,如:DS:100段基值:偏移地址(相对地址),如:23A0:1500

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号