第二章 计算机基本原理
第二章 计算机基本原理
2.1 8086微机的基本结构
2.1.1 8086微机的基本结构图
对汇编语言程序员来说,计算机硬件的结构如下图所示(CPU、内存储器、接口(外设)):
2.1.2 微处理器
一、定义
-
CPU是中央处理器(Central Processing Unit)的简称,是计算机内部对数据进行处理并对处理过程进行控制的部件。
-
伴随着大规模集成电路技术的迅速发展,芯片集成密度越来越高,CPU可以集成在一个半导体芯片上。这种具有中央处理器功能的大规模集成电路器件,被统称为“微处理器(MPU)”。
二、组成:
- 运算器:完成各种算术运算和逻辑运算。
- 控制器:取指令,经译码分析后发出各种控制命令,如取数、存数、发出执行指令的命令等。
- 寄存器:CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。
三、8086微处理器的一般性能特点
- 16位的内部结构,16位双向数据线;
- 20位地址线,可寻址1M字节存储单元;
- 较强的指令系统;
- 利用第16位的地址总线来进行I/O端口寻址,可寻址64K个I/O端口;
- 中断功能强,可处理内部软件中断和外部中断,中断源可达256个;
- 单一的+5V电源,单相时钟5MHz;
- 8086可以和浮点运算器、I/O处理器或其他处理器组成多处理器系统,从而极大地提高了系统的数据吞吐能力和数据处理能力。
2.1.3 内存储器(主存储器)
一、定义
- 存放程序和数据的部件;由许多内存单元组成;每个内存单元有一个地址。 8086计算机的内存以字节编址。
二、内存单元的地址
- 内存单元的地址是为了标识和存取每一个存储单元,以正确地存放或取得信息,给每个存储单元规定一个唯一的地址(物理地址)。
- 说明
- 地址的形成:由CPU和存储芯片共同决定。
- 物理地址的空间:呈线性增长,地址从0开始编号,顺序地每次加1。
- 物理地址的表示:在机器里用无符号二进制数表示,书写格式为十六进制数。如23450H、0A209FH。
- 表示的地址范围:8086地址总线为20位,可访问的字节单元地址范围为 00000H~0FFFFFH也就是1MB的寻址空间。
四、内存单元的内容
-
定义:一个内存单元中存放的信息,每个单元中可存放一个字节。
-
特点:可重复读取内存单元中的数据,写则覆盖原数据。
-
内存容量:内存所具有的单元数。基本单位是B(字节)
-
目前常用的容量单位:KB、MB、GB、TB等。传说中还有NB、DB、CB。
- 字节(Byte):简写为B,1个字节由8个二进制位组成。是计算机中用来表示存储空间大小的基本容量单位。计算机内存的存储容量,磁盘的存储容量等都是以字节为单位表示的。
- 位(bit):计算机所能表示的最小的数据单位。简称为位(bit,比特)。是计算机中最直接最基本的操作。
关系:
-
-
-
-
-
$1TB=1024GB=2{10}GB=2{40} B $
-
五、字和字长
- 在计算机中作为一个整体被存取、传送或处理的二进制位数称为一个字,每个字中二进制位数的长度,称为字长。
- 一个字由若干个字节组成,不同的计算机系统的字长是不同的,常见的有8位、16位、32位、64位等,字长越长,计算机一次处理的信息位就越多,精度就越高,字长是计算机性能的一个重要指标。
- 字与字长的区别:
- 字是单位,而字长是指标,指标需要用单位去衡量。正象生活中重量与公斤的关系,公斤是单位,重量是指标。
- 字节长度是固定的;字的长度是不固定的,不同计算机的字长是不同的。 8086CPU中的1个字包含2个字节。
2.1.4 系统总线(内总线)
一、定义
- 是将CPU与存储器及外部设备连接起来的,用来传输信息的一组公共导线。共有三条总线。
二、三条总线
- 地址总线(AB):指出信息的来源和目的地。
- 数据总线(DB):传送数据,数据总线赿宽,数据处理的能力就赿强。
- 控制总线(CB):控制总线主要用来传送控制信号和时序信号。
三、总线图
2.2 8086的寄存器组与内存管理
2.2.1 8086CPU内部结构图
2.2.2 8086通用寄存器
一、通用寄存器
- 通用寄存器包括了8个16位的寄存器:AX、BX、CX、DX、SP、BP、DI及SI。可以细分为数据通用寄存器、指针寄存器和变址寄存器。
二、数据通用寄存器
- 通用寄存器分为4个16位的寄存器。
- 分类:
- AX:作为累加器用,所以它是算术运算的主要寄存器。在乘除指令中指定用来存放操作数。另外,所有的I/O指令都使用AX或AL与外部设备传送信息。
- BX:在计算存储器地址时,可作为基址寄存器使用。
- CX:常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。
- DX:在作双字长运算时,可把DX和AX组合在一起存放一个双字长数,DX用来存放高16位数据。此外,对某些I/O操作,DX可用来存放I/O的端口地址。
- 这4个16位寄存器又可分别分成高8位(AH、BH、CH、DH)和低8位(AL、BL、CL、DL)。因此它们既可作为4个16位数据寄存器使用,也可作为8个8位数据寄存器使用,在编程时可存放源操作数、目的操作数或运算结果。数据寄存器是存放操作数、运算结果和运算的中间结果,以减少访问存储器的次数,或者存放从存储器读取的数据以及写入存储器的数据的寄存器。
三、指针寄存器
- SP(堆栈指针寄存器): 与SS(堆栈段寄存器)一起确定栈顶的当前位置;
- BP(基址指针寄存器): 与SS用来确定堆栈段中的某一存储单元的地址;
四、变址寄存器
- SI(源变址寄存器):在串操作指令中,以SI表示源数据串的地址。
- DI(目的变址寄存器):在串操作指令中,以DI表示目的数据串的地址。
这四个寄存器经常的用途是在存储器寻址时,提供偏移地址。用它们可实现多种存储器操作数的寻址方式(在第3章有详细介绍) 。
五、堆栈
- 堆栈是按先进后出的的原则在内存中组织的一个存储区域。该区域一端固定一端活动,固定端称为栈底,而活动端称为栈顶。往堆栈中存入或取出信息都在栈顶进行。CPU中的堆栈指针SP始终指向栈顶,而堆栈段寄存器SS则指明了堆栈段的起始位置。
- 堆栈是一个很重要的概念,也是编程的基本手法。堆栈的设置主要用来解决子程序嵌套,递归子程序及多级中断中一些比较难以处理的问题,还可用来保护现场,保存中间结果,及子程序和中断服务程序的调用和返回等。
2.2.3 8086专用寄存器
一、控制寄存器
- 控制寄存器可分为指令指针寄存器和标准寄存器。
二、指令指针寄存器IP
- IP是计算机中很重要的一个控制寄存器,用来存放代码段当中的偏移地址。在程序运行的过程中,它始终指向下一条指令的首地址,它和CS一起形成取下一条指令的实际地址
三、标志寄存器
-
Flags(标志寄存器) :共16位,一般把每一位分别使用,8086使用其中的9位,用于存放当前程序执行的状况和运算结果的特征。9个标志位可分为二组:
-
状态标志:用于反映指令执行的结果(受算术运算和逻辑运算结果的影响)
-
进位标志CF:
主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。
-
奇偶标志PF:
用于反映运算结果中低8位中含有“1”的个数的奇偶性,如果“1”的个数为偶数,则PF的值为1,否则为0。
-
溢出标志OF:
用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。
-
AF辅助进位标志(半进位标志):
主要用来反映D3位向D4位产生进位或借位的情况,如果有进位或借位,那么,其值为1,否则其值为0。
-
ZF零标志:
用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。
-
SF符号标志:
用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1 。
-
-
控制标志:通过执行特定指令来设置,以控制某些指令的执行方式。 控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。
- TF(Trap Flag)追踪标志或跟踪标志:
控制CPU是否进入单步调试方式。当TF=1时,每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。 - 中断允许标志IF(Interrupt-enable Flag)
用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。具体规定如下:- 当IF=1时,CPU响应外部的可屏蔽中断发出的中断请求
- 当IF=0时,CPU不响应外部的可屏蔽中断发出的中断请求
CPU的指令系统中有专门的指令来改变IF的值。
- 方向标志DF(Direction Flag )
- DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。当DF=0时,内存地址自动递增;当DF=1时,内存地址自动递减。CPU的指令系统中有专门的指令来改变DF的值。
- TF(Trap Flag)追踪标志或跟踪标志:
-
四、段寄存器
- 用于存放逻辑段的段基地址,将程序的不同部分放入相应段(逻辑段的概念后面将要介绍)
- 分类:
- CS:代码段寄存器
代码段用于存放指令代码 - DS:数据段寄存器
- ES:附加段寄存器
数据段和附加段用来存放操作数 - SS:堆栈段寄存器
堆栈段用于存放返回地址,保存寄存器内容,传递参数
- CS:代码段寄存器
2.2.4 8086的内存管理
一、8086的物理内存组织
- 8086计算机的内存以字节编址,每个内存单元有一个惟一的地址,可存放一个字节。字节是8086程序对数据的最小存取单位。
- 8086存取一个字或双字采用“小端方式”的方案:
- 1个字占据两个相邻的内存单元。低字节放在低地址单元,高字节放在高地址单元;字的地址由
其低地址来表示。 - 双字类似字。对于同一个内存地址,既可以看作是字节单元的地址,也可以看作是字或双字单元的地址,取决于存取的数据类型。
- 1个字占据两个相邻的内存单元。低字节放在低地址单元,高字节放在高地址单元;字的地址由
二、内存的分段管理
-
为何分段:
- CPU有20根地址线,可直接访问的物理空间为1M字节,其编码区间为:00000H ~ FFFFFH。而CPU的数据总线是16位,寄存器也是16位或8位,它们的编码范围仅为:0000H ~ FFFH。这样,如果用16位寄存器来访问1MB内存的话,则只能访问内存的最低端的64KB,其它的内存空间将无法访问。为了能用16位寄存器来有效地访问1MB的存储空间,16位CPU采用了内存分段的管理模式。
-
段的分法
把1MB内存空间划分成若干个逻辑段(简称段),每个逻辑段的要求:- 逻辑段的起始地址(通常简称为段地址)必须是16的倍数,即最低4位二进制必须全为0。
- 逻辑段的最大容量为64KB。
-
逻辑地址的表示方法:段地址:偏移地址
说明:- 段地址表示段的起始地址(xxxxxH),并不是任意一个单元的地址都能作段的起始地址,只有那些形式为xxxx0H的地址才能作段的起始地址,该起始地址存入16位寄存器时,将0省略即可。存放在DS、CS、ES、SS段寄存器中。
- 每个段的大小最大64KB,但在实际编程中,系统根据需要来分配,不一定非要占用64KB的最大空间。
- 逻辑段之间可以重叠,也可以不重叠。
图中是各逻辑段之间的分布情况示意图,其中有相连的段(如C和D段)、不相连的段(如A和B段)以及相互重叠的段(如B和C段)。
偏移地址(段内偏移量或有效地址),表示段内某单元相对本段起始地址的偏移值(即该内存单元相对其所在段的段首址间的字节距离,偏移地址为16位,可直接放入16位寄存器中表示。
逻辑地址:存储单元地址的表达形式,由程序给出。
即 段地址:偏移地址
物理地址:存储单元在1MB空间内的实际地址,每一个内存单元有一个唯一的地址号。由系统根据逻辑地址自动转换生成的。
第3节 Intel的32位CPU在不同模式下寻址
效地址),表示段内某单元相对本段起始地址的偏移值(即该内存单元相对其所在段的段首址间的字节距离,偏移地址为16位,可直接放入16位寄存器中表示。
逻辑地址:存储单元地址的表达形式,由程序给出。
即 段地址:偏移地址
物理地址:存储单元在1MB空间内的实际地址,每一个内存单元有一个唯一的地址号。由系统根据逻辑地址自动转换生成的。
第3节 Intel的32位CPU在不同模式下寻址
奇偶标志PF:用于反映运算结果中低8位中含有“1”的个数的奇偶性,如果“1”的个数为偶数,则PF的值为1,否则为0。