汇编语言初步

上传人:pu****.1 文档编号:490707383 上传时间:2022-09-26 格式:DOCX 页数:10 大小:25.87KB
返回 下载 相关 举报
汇编语言初步_第1页
第1页 / 共10页
汇编语言初步_第2页
第2页 / 共10页
汇编语言初步_第3页
第3页 / 共10页
汇编语言初步_第4页
第4页 / 共10页
汇编语言初步_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《汇编语言初步》由会员分享,可在线阅读,更多相关《汇编语言初步(10页珍藏版)》请在金锄头文库上搜索。

1、一天一点,从零开始学。基本资料0目录直接从一本电子书上复制下来的,虽然那本书是x86的,但有些是相通 的11汇编语言的由来及其特点1.1.1机器语言机器指令是CPU能直接识别并执行的指令,它的表现形式是二进制编码。机器指 令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操作,即指 令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置等。由于机器指令与CPU紧密相关,所以,不同种类的CPU所对应的机器指令也就 不同,而且它们的指令系统往往相差很大。但对同一系列的CPU来说,为了满足 各型号之间具有良好的兼容性,要做到:新一代CPU的指令系统必须包括先前同 系列CPU的指令系统

2、。只有这样,先前开发出来的各类程序在新一代CPU上才能 正常运行。机器语言是用来直接描述机器指令、使用机器指令的规则等。它是CPU能直接识别的唯一 一种语言,也就是说,CPU能直接执行用机器语言描述的程序。用机器语言编写程序是早期经过严格训练的专业技术人员的工作,普通的程序员一般难以胜 任,而且用机器语言编写的程序不易读、出错率高、难以维护,也不能直观地反映用计算机 解决问题的基本思路。由于用机器语言编写程序有以上诸多的不便,现在几乎没有程序员这样编写程序了。1.1.2汇编语言虽然用机器语言编写程序有很高的要求和许多不便,但编写出来的程序执行效率高,CPU 严格按照程序员的要求去做,没有多余的

3、额外操作。所以,在保留程序执行效率高”的前提 下,人们就开始着手研究一种能大大改善程序可读性的编程方法。为了改善机器指令的可读性,选用了一些能反映机器指令功能的单词或词组来代表该机器指 令,而不再关心机器指令的具体二进制编码。与此同时,也把CPU内部的各种资源符号化,使用该符号名也等于引用了该具体的物理资源。如此一来,令人难懂的二进制机器指令就可以用通俗易懂的、具有一定含义的符号指令来表 示了,于是,汇编语言就有了雏型。现在,我们称这些具有一定含义的符号为助忆符,用指 令助忆符、符号地址等组成的符号指令称为汇编格式指令(或汇编指令)。汇编语言是汇编指令集、伪指令集和使用它们规则的统称。伪指令是

4、在程序设计时所需要的 一些辅助性说明指令,它不对应具体的机器指令,有关内容在以后的各章节中会有详细叙述, 在此不展开介绍。用汇编语言编写的程序称为汇编语言程序,或汇编语言源程序,在本教材中或特定的环境下, 也可简称为源程序。汇编语言程序要比用机器指令编写的程序容易理解和维护。1.1.3汇编程序用汇编语言编写的程序大大提高了程序的可读性,但失去了 CPU能直接识别的特性。例如 用汇编语言书写的指令:MOV AX, BX,CPU不会知道这几个字符所表达出来的功能,但程 序员一看就知道:要求CPU把寄存器BX的值传送给寄存器AX。把机器指令符号化增加了程序的可读性,但引起了如何让CPU知道程序员的用

5、意,并按照 其要求完成相应操作的问题。解决该问题就需要一个翻译程序,它能把汇编语言编写的源程 序翻译成CPU能识别的机器指令序列。这里,我们称该翻译程序为汇编程序。1.1.4汇编语言的主要特点一方面,汇编语言指令是用一些具有相应含义的助忆符来表达的,所以,它要比机器语言容 易掌握和运用,但另一方面,它要直接使用CPU的资源,相对高级程序设计语言来说,它 又显得难掌握。汇编语言程序归纳起来大概有以下几个主要特性。1、与机器相关性汇编语言指令是机器指令的一种符号表示,而不同类型的CPU有不同的机器指令系统,也 就有不同的汇编语言,所以,汇编语言程序与机器有着密切的关系。由于汇编语言程序与机器的相关

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

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

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

9、难度。如果在 汇编语言程序中也强调不使用“转移指令”,那么,汇编语言程序就会变成 功能单调的顺序程序,这显然是不现实的;调试工具落后,高级语言程序可以在源程序级进行符号跟踪,而汇编语言 程序只能跟踪机器指令。不过,现在这方面也有所改善,url=mk:MSITStore:G:pj 汇编语言教程.chm:/Appendix/App1-6.htmCV/url(CodeView)、 url=mk:MSITStore:G:pj汇编语言教程.chm:/Appendix/App1-7.htmTD/url(Turbo Debug)等软件也可在源程序级进行符号跟踪了。1.2数据的表示和类型(1) 、二进制在计算

10、机内,数值是用二进制来表示的,每个二进制数按权相加就可得到其十进制数值。在 书写二进制时,为了区别,在数据后面紧跟一个字母B。二进制的一般表现形式为:bn-1.b1b0B,其代表数值:bn-12n-1+.+b121+b020数据的二进制表示形式简单、明了,但它书写起来比较长,所以,通常情况下,我们在程序 中不直接用二进制来书写具体的数值,而改用八进制、十进制或十六进制。(2) 、八进制八进制是一种二进制的变形,三位二进制可变为一位八进制,反之也然。八进制的表示元素 是:0、1、7。在书写时,为了区别,在数据后面紧跟一个字母Q。如:1234Q、7654Q、 54Q等都是八进制。八进制数在程序中的

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

12、、数值进制的总结和相互转换表1.1各种进制及其字符表示进制字符例子备注二进制B/Y(*)1010B、 1011B八进制Q/O1234Q、 311Q(*):字符Y、O和T是宏汇十进制D/T1234D、 512D编MASM系统 所增加的进制 表示符。十六进 制H1234H、 1011H(6)、数的补码表示法在计算机内,为了表示正负数,并便于进行各种算术运算,对有符号数采用二进 制的补码表示形式。补码的最高位用来表示正负数:0一正数,1一负数。正数的补码是其自身的二进制形式,负数的补码是把其正数的二进制编码变“反”,再加1而得。(7)、二进制数的符号扩展在汇编语言中,我们经常要对字/字节的数据进行操

13、作。当把“字节”转换成“字”,或“字”转换成“双字”时,就需要进行符号扩展。符号扩展的具体操作就是把已知信息的最高位扩展到所有更高位。例1.1把8位补码01011010、10101100分别扩展成16位补码。解:根据符号扩展的含义,“字节一字”的具体扩展结果如下:010110101010110000000000010110101111111110101100例 1.2 把 16 位补码 0101101111001010、1010111101011011 别扩展成 32 位补码。 解:根据符号扩展的含义,“字一双字”的具体扩展结果如下:010110111100101010101111010110

14、110000000000000000010110111100101011111111111111111010111101011011(8)、n位二进制的表示范围n位二进制所能表示的无符号整数的范围:0忍x2n-1。口位二进制所能表示的有符号整数(补码表示)的范围:-2n-1x2n-1-1o在汇编语言中,常用到n为8和16时的数值范围: n=8时,无符号整数的范围:0255,有符号整数的范围:-128127;n=16时,无符号整数的范围:065535,有符号整数的范围:-3276832767。(9)、BCD 码通常,我们习惯用十进制表示的数据,但计算机是用二进制来表示数数据的,这 就需要进行数值

15、进制之间的转换。我们把每位十进制数转换二进制的编码,简称 为 BCD 码(Binary Coded Decimal)。BCD码是用4位二进制编码来表示1位十进制数。这种编码方法有多种,但常用 的编码是8421BCD编码,如表1.2所示。这种BCD编码实际上就是09的“等值” 二进制数。表1.2 8421BCD编码列表十进制 数字8421BCD 码十进制 数字8421BCD 码000005010110001601102001070111用BCD码进行进制的转换时,是要求在二种进制的表现形式上快速转换,而不 是要求在“数值相等”的含义快速转换。1.2.2非数值数据的表示计算机除了具有进行数值计算能力之外,还具有进行非数值计算的能力。现在, 后者的应用领域已远远超过了前者的应用领域,如:文字处理、图形图象处理、 信息检索、日常的办公管理等。所以,对非数值信息的编码就显得越加重要。表1.3 ASCII码的编码方案高位低位0000010100111001011101

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

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