汇编语言_入门经典教材-页精要

上传人:dr****lb 文档编号:118776134 上传时间:2019-12-25 格式:DOCX 页数:211 大小:209.44KB
返回 下载 相关 举报
汇编语言_入门经典教材-页精要_第1页
第1页 / 共211页
汇编语言_入门经典教材-页精要_第2页
第2页 / 共211页
汇编语言_入门经典教材-页精要_第3页
第3页 / 共211页
汇编语言_入门经典教材-页精要_第4页
第4页 / 共211页
汇编语言_入门经典教材-页精要_第5页
第5页 / 共211页
点击查看更多>>
资源描述

《汇编语言_入门经典教材-页精要》由会员分享,可在线阅读,更多相关《汇编语言_入门经典教材-页精要(211页珍藏版)》请在金锄头文库上搜索。

1、汇编入门(1 讲) 核心提示:1.1 汇编语言的由来及其特点1.1.1 机器语言机器指令是 CPU 能直接识别并执行的指令,它的表现形式是二进制编码。机器指令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操 作,即指令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置等。由于机器指令与CPU 紧密相关,所以,不同种类. 1.1 汇编语言的由来及其特点 1.1.1 机器语言 机器指令是CPU 能直接识别并执行的指令,它的表现形式是二进制编码。机器指令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操作,即指令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置

2、等。 由于机器指令与CPU 紧密相关,所以,不同种类的CPU 所对应的机器指令也就不同,而且它们的指令系统往往相差很大。但对同一系列的CPU 来说,为了满足各型号之间具有良好的兼容性,要做到:新一代 CPU 的指令系统必须包括先前同系列CPU 的指令系统。只有这样,先前开发出来的各类程序在新一代CPU 上才能正常运行。 机器语言是用来直接描述机器指令、使用机器指令的规则等。它是CPU 能直接识别的唯一一种语言,也就是说,CPU 能直接执行用机器语言描述的程序。 用机器语言编写程序是早期经过严格训练的专业技术人员的工作,普通的程序员一般难以胜任,而且用机器语言编写的程序不易读、出错率高、难以维护

3、,也不能直观地反映用计算机解决问题的基本思路。 由于用机器语言编写程序有以上诸多的不便,现在几乎没有程序员这样编写程序了。 1.1.2汇编语言 虽然用机器语言编写程序有很高的要求和许多不便,但编写出来的程序执行效率高,CPU 严格按照程序员的要求去做,没有多余的额外操作。所以,在保留“ 程序执行效率高”的前提下,人们就开始着手研究一种能大大改善程序可读性的编程方法。 为了改善机器指令的可读性,选用了一些能反映机器指令功能的单词或词组来代表该机器指令,而不再关心机器指令的具体二进制编码。与此同时,也把CPU 内部的各种资源符号化,使用该符号名也等于引用了该具体的物理资源。 如此一来,令人难懂的二

4、进制机器指令就可以用通俗易懂的、具有一定含义的符号指令来表示了,于是,汇编语言就有了雏型。现在,我们称这些具有一定含义的符号为助忆符,用指令助忆符、符号地址等组成的符号指令称为汇编格式指令(或汇编指令)。 汇编语言是汇编指令集、伪指令集和使用它们规则的统称。伪指令是在程序设计时所需要的一些辅助性说明指令,它不对应具体的机器指令,有关内容在以后的各章节中会有详细叙述,在此不展开介绍。 用汇编语言编写的程序称为汇编语言程序,或汇编语言源程序,在本教材中或特定的环境下,也可简称为源程序。汇编语言程序要比用机器指令编写的程序容易理解和维护。 1.1.3汇编程序 用汇编语言编写的程序大大提高了程序的可读

5、性,但失去了CPU 能直接识别的特性。例如用汇编语言书写的指令:MOV AX, BX,CPU 不会知道这几个字符所表达出来的功能,但程序员一看就知道:要求CPU 把寄存器BX的值传送给寄存器AX。 把机器指令符号化增加了程序的可读性,但引起了如何让CPU 知道程序员的用意,并按照其要求完成相应操作的问题。解决该问题就需要一个翻译程序,它能把汇编语言编写的源程序翻译成CPU能识别的机器指令序列。这里,我们称该翻译程序为汇编程序。 从图中不难看出:汇编程序能把左边汇编语言源程序翻译成右边的机器指令序列。其中,把汇编语言指令“MOV AX, BX ” 和“ADD AX, 5 ” 分别转换成机器指令8

6、9D8H 和050500H ,而后者都是CPU 能直接识别的,所以,可执行它们。 目前,常用的汇编程序有:MASM、TASM 和DEBUG等。 1.1.4 汇编语言的主要特点 一方面,汇编语言指令是用一些具有相应含义的助忆符来表达的,所以,它要比机器语言容易掌握和运用,但另一方面,它要直接使用CPU 的资源,相对高级程序设计语言来说,它又显得难掌握。 汇编语言程序归纳起来大概有以下几个主要特性。 1 、与机器相关性 汇编语言指令是机器指令的一种符号表示,而不同类型的CPU 有不同的机器指令系统,也就有不同的汇编语言,所以,汇编语言程序与机器有着密切的关系。 由于汇编语言程序与机器的相关性,所以

7、,除了同系列、不同型号CPU 之间的汇编语言程序有一定程度的可移植性之外,其它不同类型(如:小型机和微机等)CPU 之间的汇编语言程序是无法移植的,也就是说,汇编语言程序的通用性和可移植性要比高级语言程序低。 2 、执行的高效率 正因为汇编语言有“与机器相关性” 的特性,程序员用汇编语言编写程序时,可充分发挥自己的聪明才智,对机器内部的各种资源进行合理的安排,让它们始终处于最佳的使用状态,这样做的最终效果就是:程序的执行代码短,执行速度快。 现在,高级语言的 编译程序在进行寄存器分配和目标代码生成时,也都有一定程度的优化(在后续课程编译原理的有关章节会有详细介绍),但由于所使用的“优化策略”

8、要适应 各种不同的情况,所以,这些优化策略只能在宏观上,不可能在微观上、细节上进行优化。而用汇编语言编写程序几乎是程序员直接在写执行代码,程序员可以在程 序的每个具体细节上进行优化,这也是汇编语言程序执行高效率的原因之一。 3 、编写程序的复杂性 汇编语言是一种面向机器的语言,其汇编指令与机器指令基本上一一对应,所以,汇编指令也同机器指令一样具有功能单一、具体的特点。要想完成某件工作(如计算:A+B+C等),就必须安排CPU 的每步工作(如:先计算A+B ,再把C 加到前者的结果上)。另外,在编写汇编语言程序时,还要考虑机器资源的限制、汇编指令的细节和限制等等。 由于汇编语言程序要安排运算的每

9、一个细节,这就使得编写汇编语言程序比较繁琐、复杂。一个简单的计算公式或计算方法,也要用一系列汇编指令一步一步来实现。 4 、调试的复杂性 在通常情况下,调试汇编语言程序要比调试高级语言程序困难,其主要原因有四: 汇编语言指令涉及到机器资源的细节,在调试过程中,要清楚每个资源的变化情况; 程序员在编写汇编语言程序时,为了提高资源的利用率,可以使用各种实现技巧,而这些技巧完全有可能破坏程序的可读性。这样,在调试过程中,除了要知道每条指令的执行功能,还要清楚它在整个解题过程中的作用; 高级语言程序几乎不显式地使用“转移语句” ,但汇编语言程序要用到大量的、各类转移指令,这些跳转指令大大地增加了调试程

10、序的难度。如果在汇编语言程序中也强调不使用“转移指令” ,那么,汇编语言程序就会变成功能单调的顺序程序,这显然是不现实的; 调试工具落后,高级语言程序可以在源程序级进行符号跟踪,而汇编语言程序只能跟踪机器指令。不过,现在这方面也有所改善,CV(CodeView) 、TD(Turbo Debug)等软件也可在源程序级进行符号跟踪了。 1.1.5 汇编语言的使用领域 综上所说,汇编语言的特点明显,其诱人的优点直接导致其严重的缺点,其“ 与机器相关” 和“ 执行的高效率” 导致其可移植性差和调试难。所以,我们在选用汇编语言时要根据实际的应用环境,尽可能避免其缺点对整个应用系统的影响。 下面简单列举几

11、个领域以示说明,但不要把它们绝对化。 1 、适用的领域 要求执行效率高、反应快的领域,如:操作系统内核,工业控制,实时系统等; 系统性能的瓶颈,或频繁被使用子程序或程序段; 与硬件资源密切相关的软件开发,如:设备驱动程序等; 受存储容量限制的应用领域,如:家用电器的计算机控制功能等; 没有适当的高级语言开发环境。 2 、不宜使用的领域 大型软件的整体开发; 没有特殊要求的一般应用系统的开发等。 1.2 数据的表示和类型 在用汇编语言进行程序设计时,程序员可以直接访问内存,对数据在存储器内的表示形式要有一个清晰的认识。下面,我们只简单介绍本课程所要用到的数据表示知识,为后面的学习作一点必要的准备

12、。 有关“数据表示” 的详细内容请参阅计算机组成原理中的相关章节。 1.2.1 数值数据的表示 (1)、二进制 在计算机内,数值是用二进制来表示的,每个二进制数按权相加就可得到其十进制数值。在书写二进制时,为了区别,在数据后面紧跟一个字母B。 二进制的一般表现形式为:bn-1b1b0 B ,其代表数值:bn-12n-1+b121+b020。 数据的二进制表示形式简单、明了,但它书写起来比较长,所以,通常情况下,我们在程序中不直接用二进制来书写具体的数值,而改用八进制、十进制或十六进制。 (2)、八进制 八进制是一种二进制的变形,三位二进制可变为一位八进制,反之也然。八进制的表示元素是:0 、1

13、 、7 。在书写时,为了区别,在数据后面紧跟一个字母Q。如:1234Q 、7654Q 、54Q 等都是八进制。 八进制数在程序中的使用频率不高。 (3)、十进制 十进制是我们最熟悉的一种数据表示形式,它的基本元素是:0 、1 、9 。在书写时,为了区别,在数据后面紧跟一个字母D。在程序中经常用十进制来表示数据。 (4)、十六进制 十六进制是另一种二进制的变形,四位二进制可变为一位十六进制,反之也然。十六进制的基本元素是:0 、1、9 、A、B 、F( 字母小写也可以),其中:字母A、B 、F 依次代表10、11 、15 。 在书写时,为了区别,在数据后面紧跟一个字母H。当十六进制数的第一个字符

14、是字母时,在第一个字符之前必须添加一个0。如:100H、56EFH 、0FFH、0ABCDH等都是十六进制数。 十六进制在程序中的使用频率很高。 (5)、数值进制的总结和相互转换 表1.1 各种进制及其字符表示 进制 字符 例子 备注 二进制 B/Y(*) 1010B 、1011B八进制 Q/O 1234Q、311Q 十进制 D/T 1234D 、512D 十六进制 H 1234H、1011H(*):字符Y、O和T 是宏汇编MASM系统所增加的进制表示符。 下面是各进制数据之间进行转换的控件,浏览者通过它可很好地掌握这些进制之间的转换方法。当十进制转化为其它进制时,浏览者还可进行实际的练习操作

15、。 (6)、数的补码表示法 在计算机内,为了表示正负数,并便于进行各种算术运算,对有符号数采用二进制的补码表示形式。 补码的最高位用来表示正负数:0正数,1负数。 正数的补码是其自身的二进制形式,负数的补码是把其正数的二进制编码变“反” ,再加1 而得。 (7)、二进制数的符号扩展 在汇编语言中,我们经常要对字/ 字节的数据进行操作。当把“字节” 转换成“字” ,或“字”转换成“双字” 时,就需要进行符号扩展。符号扩展的具体操作就是把已知信息的最高位扩展到所有更高位。 例1.1 把8 位补码01011010 、10101100 分别扩展成16 位补码。 解:根据符号扩展的含义,“字节字” 的具体扩展结果如下: 01011010 10101100 0000000001011010 11111111 10101100 例1.2 把16

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

最新文档


当前位置:首页 > 大杂烩/其它

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