目录
一、IBM-PC微机的功能结构
1. 微机的一般构成
一般计算机应包括五大件:运算器、控制器、存储器、输入设备和输出设备
1.1 CPU
将运算器和控制器集成在一个集成电路芯片上,称为中央处理器
功能: 分析从主存储器取来的各条指令的功能,控制计算机各部件完成指定功能的各项操作。
1.2 主存储器
主存储器是用来存放程序和数据的部件,它由若干个存储单元构成。每个存储单元使用一个唯一的编号来标识,称为存储单元的地址。在大多数计算机中,存储器的组织都是以字节为基本单位。
1.3 输入输出设备及接口
- 由于I/O设备的工作速度、工作原理以及所处理的信息格式等与主机相差很大,因此I/O设备要通过I/O接口才能与系统总线连接。
- I/O接口是主机与I/O设备之间设置的逻辑控制部件。通过它实现主机与I/O设备间的信息传送
1.4 系统总线
系统总线将CPU、存储器和I/O设备连接起来,实现各大部件之间的各种信息传送。
系统总线包括地址总线、 数据总线和控制总线三组。它们分别用于传送不同的信息。
2. Intel 8086/8088 CPU的功能结构
指令是构成汇编语言程序的最基本单位。
CPU执行指令序列就是重复执行以下两个步骤:取指(从存储器中取指令)、执行(执行指令规定的操作)。
可以分为串行方式和指令流水线方式
2.1 串行方式
特点如下:
- CPU在指令执行阶段不占用系统总线,此时总线也不工作,系统总线的空闲时间较多
- 在从存储器取指令、取数据或存数据时,总线处于忙状态,其所占用的时间也较长。而CPU却只需要花很短的时间去处理,因此CPU大部分时间处于闲置状态。
采用串行工作方式的计算机其运行速度较慢
2.2 指令流水线方式
采用指令流水线工作方式的计算机具有较高的工作效率。CPU内部采用了一种先进的指令流水线结构,这种结构可以有效而充分地利用各主要硬件资源。
要实现指令流水线方式,从CPU组成结构上要划分成多个单元。 8086/8088CPU被划分成两个单元。
EU和BIU是既分工又合作的两个独立部分。它们的操作在一定程度上是并行工作的,分别完成不同的任务,从而大大加快了指令执行速度。
2.2.1 执行单元EU
EU的主要任务是分析与执行指令,包括:
- 从指令队列中取出指令代码,由控制器译码后产生相应的控制信号,控制各部件完成指令规定的操作
- 对操作数执行各种指定的算术或逻辑运算
- 向总线接口单元BIU发送访问主存或I/O的命令,并提供相应的地址和传送的数据
2.2.2 总线接口单元BIU
BIU负责CPU与存储器、 I/O的信息传送,包括:
- 取指令:根据CS寄存器和指令指针IP形成20位的物理地址,从相应的存储器单元中取出指令,暂存到指令队列中,等待EU取走并执行。
- 存取数据:在EU执行指令的过程中,需要与存储器或I/O端口传送数据时,由EU提供的数据和地址,结合段寄存器,通过外部总线与存储器或I/O进行数据的存取
二、Intel 8086/8088CPU寄存器结构及其用途
1. 通用寄存器
分为8个16位通用寄存器
1.1 数据寄存器
包括AX、BX、CX、DX四个寄存器,每一个既可以为16位寄存器,也可以分为两个8位寄存器使用。
数据寄存器既可以存放参加运算的操作数,也可以存放运算的结果。
1.2 指针寄存器
堆栈指针SP和基址指针BP
- SP指针:在进行堆栈操作时,被隐含使用,被用来指向堆栈顶部单元。
- BP指针:被用来指向堆栈段内某一存储单元。 BP除用作地址指针外也可以像数据寄存器一 样,存放参加运算的操作数和运算的结果
它们一般被用来存放16位地址,在形成20位的物理地址时常被作为偏移量使用。
1.3 变址寄存器
- SI:源变址寄存器
- DI:目的变址寄存器
一般被用作地址指针,SI和DI也可以用作通用数据寄存器存放操作数和运算结果。
2. 段寄存器
存储器被划分成若干个段,每个段用来存放不同的内容,如程序代码、数据等等。每个存储段用一个段寄存器来指明该段的起始位置(也叫段基址)
CPU在访问存储器时必须指明:段和段内偏移量
在程序设计中,一个程序将存储器划分成多少个存储段是任意的。但在程序运行的任何时刻最多只有4个段,分别由CS、 DS、 ES和SS指定。
3. 指令指针IP
CPU从存储器取指令时,以CS作为代码段的基址指针,以IP的内容为偏移量,共同形成一条指令的存放地址。
当CPU从内存中取出一条指令后,IP内容自动修改为指向下一条指令
IP的内容不能被直接访问,既不能用指令去读IP的值 ,也不能用指令给它赋值。但是可以通过某些指令的执行而自动修改IP的内容(如转移指令和子程序调用指令CALL)
4. 标志寄存器
标志寄存器是用来反映CPU在程序运行时的某些状态。标志寄存器的长度为16位,但只定义了其中的9位。
三、存储器组织结构
1. 存储器的构成
存储器是由若干个存储单元构成,每个存储单元存放相同长度的二进制数(字节),每个存储单元有一个唯一的地址编号——地址。
任何两个相邻字节单元就构成一个字单元,一个字存储单元(WORD)的长度为16位二进制数,即两个字节。字单元的地址为两个字节单元中较小地址字节单元的地址。
在定义一个地址时必须指出是字节或字类型属性,16位长数据的存放规则是低8位放在较低地址字节单元中,高8位放在较高地址字节单元中。
2. 存储器的段结构
由于8086/8088CPU有20根地址线,所以其可寻址的存储空间为1MB,需要提供20位长的地址码。而CPU内部的寄存器长度只有16位,能够直接访问的最大地址空间是64KB。
存储器段结构具备如下特点:
- 8086/8088CPU将1MB的存储空间划分成若干个段,每个段最大长度为64K(65536)个字节单元组成。注意:在8086/8088的汇编语言源程序中,用户可以根据自己需要来设定段的个数、各个段长度和每个段的用途。并且代码或数据可以存放在段内任意单元中。
- 每个段的基址(段基址)必须是一个小节的首址。在存储器中规定从0地址开始,每16个字节单元称为一个小节(Paragraph)。
- 逻辑段在物理存储器中可以是邻接的、间隔的、部分重叠的和完全重叠的等4种情况。
- 在任一时刻,一个程序只能访问4个当前段中的内容。在程序运行的任何时刻最多只有4个段,码段、数据段、堆栈段和附加段,分别由CS、 DS、 ES和SS指定。
3. 逻辑地址和物理地址及其对应关系
3.1 物理地址
每个存储单元的物理地址是唯一的,它就是该存储单元的20位地址。CPU与存储器之间的任何信息交换都使用物理地址。
3.2 逻辑地址
在程序设计中,为了便于程序的开发和对存储器进行动态管理,使用了逻辑地址。
逻辑地址由段基址和偏移量组成。表示方法为 段基址 : 偏移量
段基值:存放在某一个段寄存器中,是一个逻辑段的起始单元地址(段基址)的高16位。
偏移量:表示某个存储单元与它所在段的段基址之间的字节距离。
3.3 逻辑地址转换为物理地址
由BIU将逻辑地址转换成物理地址:将逻辑地址的段基值左移4位,形成20位的段基址(低位为0)然后与16位的偏移量相加
3.4 逻辑地址的来源
在程序的执行过程中, CPU根据不同操作类型访问存储器,其逻辑地址中段基值和偏移量的来源是不一样的。
- 允许替代来源也叫做段超越,它表示了段基值除使用隐含的段寄存器外是否可以指定其它段寄存器来提供。
- 有效地址EA,它表示根据指令所采用的寻址方式计算出来的段内偏移量。
四、堆栈及其操作方法
堆栈是一个特定的存储区,主要用于暂存数据以及在过程调用或处理中断时保存断点信息。
堆栈的一端是固定的,称为栈底。栈底是堆栈存储区的最大地址单元。
SP寄存器用来指示栈顶位置,SP的内容始终指向栈顶单元(SP初始化时指向栈底+2单元),堆栈中数据进出都由SP来控制。
- 数据在堆栈中的存放格式是:以字为单位存放,数据的低8位放在较低地址单元, 高8位放在较高地址单元。
- 由于SP是16位寄存器,因此堆栈长度64K字节
- 当用户程序中要求的堆栈长度超过一个堆栈段的最大长度64KB时,可以设置几个堆栈段。
- 通过改变堆栈段寄存器SS的内容,即可改变到另一个堆栈段,当改变了堆栈段寄存器SS的内容后,必须紧接着赋予SP新值。