汇编语言基础知识
汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有
效地应用汇编语言对其编程,因此,本章对硬件系统结构的问题进行部分探讨,首先介绍了计算机的基本结构、Intel 公司微处理器的发展、计算机的语言以及汇编语言的特点,在此基础上重点介绍寄存器、内存组织等汇编语言所涉及到的基本知识。
1.1  微型计算机概述
微型计算机由中央处理器(Central Processing Unit ,CPU )、存储器、输入输出接口电路和总线构成。CPU 如同微型计算机的心脏,它的性能决定了整个微型计算机的各项关键指标。存储器包括随机存储器(Random Access Memory ,RAM )和只读存储器(Read Only Memory ,ROM )。输入输出接口电路用来连接外部设备和微型计算机。总线为CPU 和其他部件之间提供数据、地址和控制信息的传输通道。如图1.1所示为微型计算机的基本结构。
外部设备存储器输入输出接口电路中央处理器
CPU
地址总线
数据总线
控制总线
图1.1  微型计算机基本结构
特别要提到的是微型计算机的总线结构,它使系统中各功能部件之间的相互关系变
为各个部件面向总线的单一关系。一个部件只要符合总线结构标准,
就可以连接到采用这种总线结构的系统中,使系统功能得到扩展。
数据总线用来在CPU 与内存或其他部件之间进行数据传送。它是双向的,数据总线
的位宽决定了CPU 和外界的数据传送速度,8位数据总线一次可传送一个8位二进制数据(即一个字节),16位数据总线一次可传送两个字节。在微型计算机中,数据的含义是广义的,数据总线上传送的不一定是真正的数据,而可能是指令代码、状态量或控制量。
地址总线专门用来传送地址信息,它是单向的,地址总线的位数决定了
CPU 可以直接寻址的内存范围。如
CPU 的地址总线的宽度为N ,则CPU 最多可以寻2N 个内存单
元。
汇编语言如何编程控制总线用来传输控制信号,其中包括CPU送往存储器和输入输出接口电路的控制
信号,如读信号、写信号和中断响应信号等;也包括其他部件送到CPU的信号,如时钟信号、中断请求信号和准备就绪信号等。
1.2  Intel公司微处理器简介
自20世纪70年代开始出现微型计算机以来,CPU经历了飞速的发展。1971年,Intel 设计成功了第一片4位微处理器Intel 4004;随之又设计生产了8位微处理器8008;1973年推出了8080;1974年基于8080的个人计算机(Personal Computer,PC)问世,Microsoft公司的创始人Bill Gates为PC开发了BASIC语言解释程序;1977年Intel 推出了8085。自此之后,Intel又陆续推出了8086、80386、Pentium等80x86系列微处理器。各种微处理器的主要区别在于处理速度、寄存器位数、数据总线宽度和地址总
线宽度。下面简要介绍不同时期Intel公司制造的几种主要型号的微处理器,这些微处理器都曾经或正在广为流行。
1.80x86系列微处理器
1)8088微处理器
具有多个16位的寄存器、8位数据总线和20位地址总线,可以寻址1MB的内存。虽然这些寄存器一次可以处理2个字节,但数据总线一次只能传送1个字节。该处理器只能工作在实模式。
2)8086微处理器
指令系统与8088完全相同,具有多个16位的寄存器、16位数据总线和20位地址总线,可以寻址1MB的内存,一次可以传送2个字节。该处理器只能工作在实模式。
3)80286微处理器
比8086运行更快,具有多个16位的寄存器、16位数据总线和24位地址总线,可以寻址16MB内存。它既可以工作在实模式,也可以工作在保护模式。
4)80386微处理器
具有多个32位的寄存器、32位数据总线和32位地址总线,可以寻址4GB内存。它提供了较高的时钟速度,增加了存储器管理和相应的硬件电路,减少了软件开销,提高
了效率。它既可以工作在实模式,也可以工作在保护模式。
5)80486微处理器
具有多个32位的寄存器、32位数据总线和32位地址总线。它比80386增加了数字协处理器和8KB的高速缓存,提高了处理速度。它既可以工作在实模式,也可以工作在
保护模式。
6)Pentium(奔腾)
具有多个32位的寄存器、64位数据总线和36位地址总线。因为它采用了超标量体
系结构,所以每个时钟周期允许同时执行两条指令,处理速度得到了进一步提高,性能
比80486优越得多。它既可以工作在实模式,也可以工作在保护模式。
以上介绍了Intel80x86系列的一些主要微处理器,表  1.1给出了该系列部分微处理器的数据总线和地址总线宽度。实际上80x86系列的功能还在不断改进和增强,它们的速度将会更快,性能将会更优越。但无论怎样变化,它们总会被设计成是完全向下兼
容的,就像在8086上设计和运行的软件可以不加任何改变地在Pentium 4机上运行一样。对于汇编语言编程人员来讲,掌握16位计算机的编程十分重要,它是学习高档计
算机及保护模式编程的基础,也是掌握实模式程序设计的唯一方法。
2.CPU的主要性能指标
1)机器字长
机器字长和CPU内部寄存器、运算器、内部数据总线的位宽相一致。如8086CPU,它的内部寄存器是16位的、运算器能完成两个16位二进制数的并行运算、数据总线的位宽为16位,则它的机器字长为16位,也称其为16位计算机。通常,机器字长越长,计算机的运算能力越强,其运算精度也越高。
2)速度
CPU的速度是指单位时间内能够执行指令的条数。速度的计算单位不一,若以单字
长定点指令的平均执行时间计算,用每秒百万条指令(Million Istructions Per Second,MIPS)作为单位;若以单字长浮点指令的平均执行时间计算,则用每秒百万条
浮点运算指令(Million Floating-point Operations Per Second,MFLOPS)表示。现在,采用计算机中各种指令的平均执行时间和相应的指令运行权重的加权平均法求出等
效速度作为计算机运算速度。
3)主频
主频又称为主时钟频率,是指CPU在单位时间内产生的时钟脉冲数,以MHz/s(兆赫兹每秒)为单位。由于计算机中的一切操作都是在时钟控制下完成的,因此,对于机
器结构相同或相近的计算机,CPU的时钟频率越高,运算速度越快。
表1.1Inte l80x86系列微处理器总线宽度
CPU 数据总线宽度地址总线宽度CPU 数据总线宽
度地址总线宽度
8086 16 20 Pentium 64 36 8088 8 20 Pentium Ⅱ64 36 80286 16 24 Pentium Ⅲ64 36 80386SX 16 24 Pentium 4 64 36 80386DX 32 32 Itanium 64 44 80486 32 32
1.3  计算机语言及汇编语言特点
1.3.1  计算机语言概述
计算机语言的发展经历了由机器语言、汇编语言到高级语言这样一个由低级到高级
的发展过程。
1.机器语言
机器语言是计算机唯一能直接识别和执行的计算机语言。由于计算机硬件本身只能
识别二进制代码,在计算机发展的初期,人们使用二进制代码构成机器指令来编写程序,
这种二进制编码的计算机语言就是机器语言。机器语言描述的程序称为目标程序,只有目标程序才能被CPU直接执行。指令用于指出计算机所进行的操作和操作对象的代码,
一条指令通常由操作码和操作数两部分组成。其中,操作码指出计算机所进行的具体操作,如加法、减法等;操作数说明操作的对象。操作码比较简单,只需对每一种操作指
定确定的二进制代码就可以了;操作数比较复杂,首先它可以有一个、两个或三个,分
别称为单操作数、双操作数或三操作数,其次,操作数可能存放在不同的地方,既可以
存放在寄存器中,也可以存放在存储器中,甚至直接存放在指令中,通常要用寻址方式
来说明。
一台计算机全部指令的集合构成该计算机的指令系统。指令系统是计算机基本功能
的体现,不同的机器指令对应的二进制代码序列各不相同。机器语言是面向机器的,不
同机器之间的语言是不通用的,这也是机器语言是“低级”语言的含义所在。用二进制
代码编写程序相当麻烦,写出的程序也难以阅读和调试。
2.汇编语言
早期的程序员们很快就发现了使用机器语言带来的麻烦,它是如此难于辨别和记
忆,给整个产业的发展带来了障碍,于是产生了汇编语言。汇编语言是一种采用指令助
记符、符号地址、标号等符号书写程序的语言,它便于人们书写、阅读和检查。汇编语
言指令与计算机指令基本上是一一对应的,汇编语言与计算机有着密不可分的关系,处理器不同,汇编语言就不同,因此它是一种低级语言,同时它也是唯一能够充分利用计
算机硬件特性并直接控制硬件设备的语言。利用汇编语言进行程序设计体现了计算机硬
件和软件的结合。
用汇编语言编写的程序称为汇编源程序(或称汇编语言程序),计算机不能直接识别,必须将其翻译成由计算机指令组成的程序后,CPU才能执行,这一过程称为“汇编”。用于将汇编源程序翻译成计算机语言的程序称为汇编程序,这种由源程序经过计算机翻
译转换成的计算机语言程序也称为目标程序。目标程序还不能直接交给CPU执行,它还需要通过连接程序装配成可执行程序才能被执行。连接程序具有将多个目标程序装配在
一起的功能,它也可以将目标程序与预先编写好的一些放在子程序库中的子程序连接在
一起,构成较大的可执行程序。它们之间的关系如图  1.2所示。
图1.2  汇编程序与目标程序、可执行程序之间的关系
3.高级语言
高级语言是一种与具体的计算机硬件无关,独立于计算机类型的通用语言,比较接
近人类自然语言的语法,用高级语言编程不必了解和熟悉计算机的指令系统,更容易掌握和使用。高级语言采用接近自然语言的词汇,其程序的通用性强,易学易用,这些语
言面向求解问题的过程,不依赖具体计算机。高级语言也要翻译成机器语言才能在计算
机上执行。其翻译有两种方式,一种是把高级语言程序翻译成机器语言程序,然后经过
连接程序连接成可执行文件,再在计算机上执行,这种翻译方式称为编译方式,大多数
高级语言如PASCAL语言、C语言等都是采用这种方式;另一种是直接把高级语言程序
在计算机上运行,一边解释一边执行,这种翻译方式称为解释方式,如BASIC语言就采用这种方式。
高级语言源程序是在未考虑计算机结构特点情况下编写的,经过翻译后的目标程序
往往不够精练,过于冗长,加大了目标程序的长度,占用较大存储空间,执行时间较长。
1.3.2  汇编语言的特点
汇编语言使用助记符和符号地址,所以它要比机器语言易于掌握,与高级语言相比
较,汇编语言有以下特点。
1)汇编语言与计算机关系密切
汇编语言中的指令是机器指令的符号表示,与机器指令是一一对应的,因此它与计
算机有着密切的关系,不同类型的CPU有不同的汇编语言,也就有各种不同的汇编程序。汇编语言源程序与高级语言源程序相比,其通用性和可移植性要差得多。
2)汇编语言程序效率高
由于构成汇编语言主体的指令是用机器指令的符号表示的,每一条指令都对应一条
机器指令,且汇编语言程序能直接利用计算机硬件系统的许多特性,如它允许程序员利用寄存器、标志位等编程。用汇编语言编写的源程序在编译后得到的目标程序效率高,
主要体现在空间效率和时间效率上,即目标程序短、运行速度快这两个方面,在采用相
同算法的前提下,任何高级语言程序在这两个方面的效率与汇编语言相比都望尘莫及。
3)特殊的使用场合

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。