950 likes | 1.08k Views
杨文显 主编. 现代微型计算机 与接口教程 (第二版). 普通高等教育 “ 十一五 ” 国家级规划教材 普通高校本科计算机专业特色教材精选. 总 目 录. 第1章 微型计算机与微处理器 第2章 存储器 第 3 章 微型计算机输入输出接口 第 4 章 微型计算机的中断系统 第 5 章 可编程接口芯片 第 6 章 DMA 传输 第 7 章 数 / 模与模 / 数转换 第 8 章 现代微型计算机 第 9 章 PC 系列微型计算机外部设备接口 第1 0 章 微型计算机总线 第1 1 章 Windows 环境下输入输出程序设计.
E N D
杨文显 主编 现代微型计算机与接口教程(第二版) 普通高等教育“十一五”国家级规划教材 普通高校本科计算机专业特色教材精选
总 目 录 第1章 微型计算机与微处理器 第2章 存储器 第3章 微型计算机输入输出接口 第4章 微型计算机的中断系统 第5章 可编程接口芯片 第6章 DMA传输 第7章 数/模与模/数转换 第8章 现代微型计算机 第9章 PC系列微型计算机外部设备接口 第10章 微型计算机总线 第11章 Windows环境下输入输出程序设计
第1章 微型计算机与微处理器 1.1 微型计算机 1.2 8086/8088微处理器结构 1.3 8086/8088微处理器子系统 1.4 8086/8088 微处理器的工作时序
1.1 微型计算机 1.1.1 电子计算机的基本组成 电子计算机的基本结构特点: • 存储程序原理:把程序事先存储在计算机内部,计算机通过执行程序实现高速数据处理。 • 五大功能模块:电子数字计算机由运算器、控制器、存储器、输入设备、输出设备这些功能模块组成。
1.1.1 电子计算机的基本组成 图1-1 计算机的基本组成
存储器 运算器 控制器 输入设备 输出设备 主机 中央处理器 (CPU) 电子计算机 外部设备
1.1.2 微型计算机 • 微型计算机在基本结构和基本功能上与计算机大致相同。 • 由于微型计算机采用了大规模和超大规模集成电路组成的功能部件,使微型计算机在系统结构上有着简单、规范和易于扩展的特点。 • 微型计算机由微处理器、存储器、输入输出接口电路组成。 • 连接这些功能部件的是三组总线:数据总线、地址总线和控制总线。
1. 微处理器 微处理器(MPU):微型计算机的中央处理器,亦称CPU。 2. 存储器 • 微型计算机的存储器采用集成度高、容量大、体积小、功耗低的半导体存储器芯片构成。 • 根据能否写入信息,存储器分为RAM和ROM。
随机存取存储器(RAM)又称读写存储器: • 随机存取:可以根据需要读写任意位置上的内容,而不像磁盘一样必须成块地顺序读写。 • 可读可写:随机存储器中的信息可以读出,也可以写入。 • 易失性:断电后储存的信息自动消失,是易失性存储器。 • 用途:用于存放当前正在使用的程序和数据。 • 只读存储器(ROM): • 只读:信息在一般情况下只能读出,不能写入和修改 • 非易失性:断电后原信息不会丢失,是非易失性存储器, • 用途:用来存放固定的程序和数据表格。
3. 输入输出接口电路 • 介于计算机和外部设备之间的电路称为输入输出接口电路。 • 微型计算机的接口普遍采用大规模集成电路芯片,大多数接口芯片是可编程的。 4. 总线 • 总线是一组公共的信号传输线,用于连接计算机各个部件。 • 位于芯片内部的总线称为内部总线。 • 连接微处理器与存储器、输入输出接口,用以构成完整的微型计算机的总线称为系统总线(有时也称外部总线)。 • 微型计算机的系统总线分为数据总线、地址总线和控制总线三组。
数据总线:用于传送数据信息,数据总线是双向总线。数据总线:用于传送数据信息,数据总线是双向总线。 • 地址总线:用于发送内存地址和I/O接口的地址。 • 控制总线:传送各种控制信号和状态信号,使微型计算机各部件协调工作。 • 微型计算机采用标准总线结构,提高了微机系统的通用性和可扩展性。
1.2 8086/8088微处理器结构 1.2.1 8088/8086微处理器内部结构 8086 CPU由指令执行部件EU总线接口部件BIU两个部份组成。 • 指令执行部件EU主要功能是执行指令。 • 总线接口部件BIU主要功能是连接CPU内部总线和外部系统总线,访问存储器和外部接口。
物理地址 • 访问存储器的实际地址称为物理地址,用20位二进制表示。 • 物理地址的位数由地址总线的位数决定 • 物理地址的位数决定了该计算机能够连接的存储器的数量: • 例如:16根地址线最多能连接216=64KB内存储器; 20根地址线最多能连接220=1MB内存储器.
逻辑地址 • EU送来的存储器地址称为逻辑地址,由16位“段基址”和 16位 “偏移地址”(段内地址)组成。 • 段基址表示一个段的起始地址的高16位。 • 偏移地址表示段内的一个单元距离段开始位置的距离。因此,偏移地址也称为段内地址。 • 例如,2345H∶1100H表示: 段基址为2345H(这个段的起始地址是23450H), 段内偏移地址为1100H的存储单元地址。
地址转换 • 地址加法器用来完成逻辑地址向物理地址的变换: 物理地址=段基址×16 + 偏移地址 • 上例中,逻辑地址2345H:1100H对应的物理地址是24550H。 • 反之,物理地址24550H,它对应的逻辑地址可以是2455H:0000H,也可以是2400H:0550H等。 • 这说明一个存储单元的物理地址是惟一的,而它对应的逻辑地址是不惟一的。
指令执行部件EU • EU的功能是执行指令。一般情况下, 指令按照它存放的先后次序顺序执行,EU从指令队列中源源不断地取得指令代码,满负荷地连续执行指令。 • EU中的算术逻辑运算单元ALU可完成16位或8位的二进制运算,运算结果通过内部总线送到通用寄存器,或者送往BIU的内部寄存器中,等待写入存储器。 • EU控制器负责从BIU的指令队列中取出指令,并对指令译码,根据指令要求向EU内部各部件发出控制命令以实现各条指令的功能。
总线接口部件BIU BIU的功能: • 形成访问存储器的物理地址(由地址加法器完成); • 访问存储器取得指令,暂存到指令队列中等待执行; • 访问存储器或I/O端口以读取操作数参与EU运算,或存放运算结果等; • 产生外部总线的各种控制信号。 • BIU内部有一个6字节的指令队列。一旦指令队列中空出2个字节,BIU将自动进行读指令的操作以填满指令队列。 • BIU内部总线控制电路将CPU的内部总线与CPU引脚所连接的外部总线相连。
8088 CPU与8086 CPU的区别: (1)8088与外部交换数据的数据总线宽度是8位,而EU内部总线和寄存器仍是16位,所以把8088称为准16位微处理器。 (2)8088 BIU中指令队列长度只有4字节,只要队列中出现一个空闲字节,BIU就会自动地访问存储器,取指令来填满指令队列。
1.2.2 8086/8088 微处理器的寄存器 8086/8088 CPU的内部寄存器如图1-5 • 通用数据寄存器:存放运算原始/中间结果 • 指针和变址寄存器:存放存储器地址 • 控制寄存器:存放程序地址和其他控制信息 • 段寄存器:存放各段的信息
1. 通用寄存器组 8个16位通用寄存器可分成两组: • 一组由AX、BX、CX和DX构成,称作通用数据寄存器,用来存放16位的数据或地址。也可当作8个8位寄存器使用。8位寄存器只能存放数据。 • AX 称为累加器 • BX 称为基址寄存器 • CX 称为计数寄存器 • DX 称为数据寄存器
另一组4个16位寄存器,主要用来存放操作数的偏移地址(即操作数的段内地址)另一组4个16位寄存器,主要用来存放操作数的偏移地址(即操作数的段内地址) • SP 称为堆栈指针寄存器 • BP 称为基址指针寄存器 • SI 称为源变址寄存器 • DI 称为目的变址寄存器 (变址寄存器内存放的地址在数据传送完成后,具有自动修改的功能。例如:传送1字节数据后把地址加1,为下次传送做好准备,变址寄存器因此得名。)
2. 段寄存器 • 8086/8088 CPU总线接口部件BIU中设置有4个16位段寄存器:代码段寄存器CS,数据段寄存器DS,附加段寄存器ES和堆栈段寄存器SS。 • 代码段:存放程序指令。CS中存放的是现在正在执行的程序段的段基址。程序代码超过64K时,需要分成几个段存放。 • 数据段用于存放当前使用的数据。需要第二个数据段时可以使用附加段。 • 堆栈段是内存中的一块存储区,用来存放专用数据。例如,调用子程序时的入口参数,返回地址等,这些数据都按照“先进后出”的规则进行存取。SS存放堆栈段的段基址,SP存放当前堆栈栈顶的偏移地址。
3. 标志寄存器FLAGS 8086/8088 CPU中设置了一个16位标志寄存器FLAGS,用来存放运算结果的特征和控制标志,其格式如下:
FLAGS中存放的9个标志位可分成两类: • 一类叫状态标志,用来表示运算结果的特征,包括CF、PF、AF、ZF、SF和OF; • 另一类叫控制标志,用来控制CPU的操作,包括IF、DF和TF。
状态标志位(1) (1)ZF(Zero Flag) 零标志位。 (2)SF(Sign Flag) 符号标志位。 (3)PF(Parity Flag) 奇偶标志位。PF=1,表示本次运算结果的低八位中有偶数个“1”;PF=0,表示有奇数“1”。PF可以用来进行奇偶校验,或者用来生成奇偶校验位。 (4)AF(Auxiliary Carry Flag) 辅助进位标志位。这个标志位只在BCD数运算中起作用。
状态标志位(2) (5)CF(Carry Flag) 进位标志位。 • 进行二个无符号数加法或减法运算后,如果CF=1,表示运算的结果超出了该字长能够表示的数据范围。例如,执行8位数据运算后,CF=1表示加法结果超过了255,或者是减法得到的差小于零。 • 进行有符号数运算时,CF对运算结果没有直接意义。 (6)OF(Overflow Flag) 溢出标志位。例如,进行8位运算时,OF=1表示运算结果大于+127 或小于-128。OF标志对无符号数的运算结果没有意义。
(1)(AL)+( AH) 上述运算后: CF = C7 (D7位上的进位)= 0 (无进位); AF = C3 (D3位上的进位) = 1(有辅助进位); PF = 1(运算结果有4个1); SF = D7 = 1(运算结果符号位为1); OF = C7⊕C6 = 0⊕1 = 1 (有溢出); ZF = 0 (运算结果不为0)。
(2)(AL)-( AH) 上述运算后: CF = 1 (有借位); AF = 1 (有辅助进位); PF = 1 (运算结果中有6个1); SF = 1 (符号位为1); OF = 0 (无溢出); ZF = 0 (运算结果不为0)。
运算产生的标志位由程序员根据需要选择使用:运算产生的标志位由程序员根据需要选择使用: • 如果参加运算的两个数是有符号数(用补码表示),可以用OF判断结果是否产生溢出,这时不必关心CF的状态; • 如果参加运算的两个数是无符号数,可以用CF判断结果是否超出范围,无需关心OF的状态。
控制标志 (1)IF(Interrupt Flag) 中断允许标志位。IF=1,表示允许CPU响应可屏蔽中断。 IF标志可通过STI指令置位(置1),通过CLI指令复位(清零)。 (2)DF(Direction Flag) 方向标志位。在串操作指令中,若DF=0,表示串操作指令执行后地址指针自动增量,串操作由低地址向高地址进行;DF=1,表示地址指针自动减量,串操作由高地址向低地址进行。 DF标志位可通过STD指令置位,通过CLD指令复位。 (3)TF(Trap Flag) 单步标志位。TF=1,每条指令执行结束都会发生“单步”中断,用于程序调试。
4. 指令指针寄存器IP • 8086/8088 CPU中有一个16位指令指针寄存器IP,用来存放将要执行的下一条指令在代码段中的偏移地址。 • 程序运行过程中,BIU自动修改IP中的内容,使它始终指向将要执行的下一条指令。 • 程序不能直接访问IP,但是可通过某些指令修改IP的内容。例如, 执行转移指令时,会将转移的目标地址送入IP中,实现程序的转移。
1.3 8086/8088 微处理器子系统 1.3.1 8086/8088 微处理器的引脚及功能 • 8086/8088 CPU是十六位的微处理器,它向外的信号包含16条数据线,20条地址线,以及若干控制信号。 • 为了减少芯片引脚数量,部分引脚采用分时复用的方式,构成40条引脚的双列直插式封装。
40 21 20 GND Vcc(+5V) 1 AD AD 15 14 AD A /S 13 16 3 AD A /S 12 17 4 AD A /S 11 18 5 AD A /S 10 19 6 AD BHE /S 9 7 AD MN/ MX 8086 8 AD RD 7 AD HOLD( RQ / GT ) 6 0 微处理器 AD HLDA( RQ / GT ) 5 1 AD WR ( LOCK ) 4 AD M/ IO ( S ) 3 2 AD DT/ R ( S ) 2 1 AD DEN ( S ) 1 0 AD ALE(QS ) 0 0 NMI INTA (QS ) 1 INTR TEST CLK READY RESET GND 图1-6 8086微处理器的封装外形
8086/8088 CPU有两种不同的工作模式(最小模式和最大模式)。8条引脚(24~31)在两种工作模式中,具有不同的功能,最大模式下被重新定义的控制信号写在括号中。 • 引脚信号的传输有以下几种类型: • 输出:信号从CPU向外部传送; • 输入:信号从外部送入CPU; • 双向:信号有时从外部送入CPU,有时从CPU向外部传送; • 三态:除了高电平、低电平两种状态之外,CPU内部还可以通过一个大的电阻阻断内外信号的传送,CPU内部的状态与外部相互隔离,称为“悬浮态”。
地址与数据信号引脚 (1)AD15~AD0(Address Data Bus) 分时复用的地址/数据线。 (2)A19/S6~A16/S3(Address/Status) 分时复用的地址/状态线。 用作地址线时,A19~A16与AD15~AD0一起构成访问存储器的20位物理地址。CPU访问I/O端口时,A19~A16保持为“0”。 用作状态线时,S6~S3用来输出状态信息,表示当前正在使用的段寄存器(表1-1)。
2. 读写控制信号引脚 读写控制信号用来控制CPU对存储器和IO设备的读写过程: • 数据传输方向(读/写); • 传输种类(存储器还是IO设备); • 读写方式(奇地址字节/偶地址字节/字); • 存储器/IO设备是否准备好的状态信号; • 分时总线上信号的类型等。
(1)M/ (Memory/IO) 存储器或I/O端口访问选择信号,三态输出。 (2) (Read) 读信号。三态输出,低电平有效,表示当前CPU正在读存储器或I/O端口。 (3) (Write)写信号。三态输出,低电平有效,表示当前CPU正在写存储器或I/O端口。 (4)READY 准备就绪信号。由外部输入,高电平有效,表示CPU访问的存储器或I/O端口已准备好传送数据。当READY无效时,要求CPU插入一个或多个等待周期TW,直到READY信号有效为止。 (5) /S7(Bus High Enable/Status) 总线高字节有效信号。三态输出,低电平有效。非数据传送期间,该引脚用作S7,输出状态信息。
8086CPU有16根数据线: • 低8位数据线总是和偶地址的存储器或IO端口相连接, 这些存储器/IO端口称为偶体。 • 高8位的数据线与奇地址的存储器或IO端口相连接,这些存储器/IO端口称为奇体。 • 有效表示CPU正在使用高8位的数据线对奇体的存储单元或IO端口进行访问。它与最低位地址码A0配合起来表示当前总线使用情况,如表1-2。
(6)ALE(Address Latch Enable) 地址锁存允许信号,向外部输出,高电平有效。 (7) (Data Enable) 数据允许信号,三态输出,低电平有效。进行DMA传输时,被置为高阻态。 (8)DT/ (Data Transmit/Receive) 数据发送/接收控制信号,三态输出。CPU写数据到存储器或I/O端口时,输出高电平;CPU从存储器或I/O端口读取数据时,为低电平。
3. 中断控制信号引脚 这一组引脚传输中断的请求和应答信号。 (1)INTR(Interrupt Request) 可屏蔽中断请求信号 由外部输入,电平触发,高电平有效。 CPU在每条指令的最后一个时钟周期对INTR进行测试,一旦测试到中断请求,并且当前中断允许标志IF=1,则暂停执行下一条指令转入中断响应周期。
(2) (Interrupt Acknowledge) 中断响应信号。 向外部输出,低电平有效。 该信号表示CPU已经收到并且响应外部发来的INTR信号,要求请求中断的设备向CPU发送中断类型(代表该中断的一个编号)。 (3)NMI(Non Maskable Interrupt Request) 不可屏蔽中断请求信号。 由外部输入,边沿触发,正跳沿有效,不受中断允许标志的限制。这是一种比INTR级别高的中断请求。
4. DMA控制信号引脚 DMA传输是一种不经过CPU,在内存储器和IO设备之间直接传输数据的方法。进行DMA传输之前要向CPU申请使用总线并取得认可。 (1)HOLD(Hold Request) 总线请求信号。由外部输入,高电平有效。 (2)HLDA(Hold Acknowledge) 总线请求响应信号。向外部输出,高电平有效。 CPU一旦测试到有HOLD请求,就在当前总线周期结束后,使HLDA有效,立即让出总线使用权(所有三态总线处于高阻态,从而不影响外部的存储器与IO设备交换数据)。 HOLD变为无效后,CPU也将HLDA置成无效,并收回对总线的控制权。
5. 其他引脚 (1)Vcc(电源) 8086 CPU只需要单一的+5V电源,由Vcc引脚输入。 (2)CLK(Clock) 主时钟信号,输入。由8284时钟发生器产生。 (3)MN/ (Minimum/Maximum) 工作模式选择信号。由外部输入,为高电平,CPU工作在最小模式,为低电平,CPU工作在最大模式。 (4)RESET 复位信号。由外部输入,高电平有效。 • RESET复位信号通常由计算机机箱上的复位按钮产生; • RESET信号至少要保持4个时钟周期才有效。 (5)TEST 测试信号。由外部输入,低电平有效。CPU执行WAIT指令时,每隔5个时钟周期对TEST进行一次测试,若测试无效,则CPU处于踏步等待状态。有效后,CPU执行WAIT指令后面的下一条指令。
6. 8088CPU的引脚 8088 CPU的大部分引脚名称及其功能与8086相同,所不同之处仅在于: (1) 由于8088的外部数据线只有8条,因此分时复用地址数据线只有AD7~AD0,AD15~AD8专门用来传送地址而成为A15~A8。 (2) 第34号引脚在8086中是BHE#,由于8088只有8根外部数据线,不再需要此信号,在8088中它被重新定义为SS0,它与DT/R#,IO/M#一起用作最小方式下的周期状态信号。 (3)第28号引脚在8086中是M/IO#,在8088中改为IO/M#,使用的信号极性相反。