第一章 微型计算机系统概述
1. 微型计算机系统组成
- 微处理器:运算器、控制器、寄存器
- 微型计算机:输入输出接口、总线、内存
微型计算机系统:由硬件和软件共同组成的完整的计算机系统编程
2. 系统总线
- 地址总线AB
-
-
- 数据总线DB
-
-
-
- 控制总线CB
- 协调系统中各部件的操做,有输出控制、输入状态等信号
控制总线决定了系统总线的特色,例如功能、适应性等异步
3. 基于8088CPU的PC微机系统结构
4. 微处理器(CPU)内部结构
指令处理单元(控制器):对机器指令译码,产生指令执行所需的控制信号,并按照指令规定的时序将控制信号传送到CPU内部各器件或传送到总线。oop
算术逻辑单元(运算器):接收到控制器发出的各类运算控制信号后,执行相应运算,并影响相应标志位。测试
寄存器组:CPU内用于暂时存放数据、地址的存储单元,CPU从内存读取指令、在内存中读写数据,均须要这些寄存器完成寻址、暂存的功能。其中标志寄存器可以间接影响程序执行流程编码
- 8088的内部结构从功能分红两个单元
- 总线接口单元BIU——管理8088与系统总线的接口,负责CPU对存储器和外设进行访问
- 执行单元EU——负责指令的译码、执行和数据的运算
- 两个单元相互独立,分别完成各自操做
两个单元能够并行执行,实现指令取指和执行的流水线操做
8088 CPU 外部特性与IBM PC总线结构

1. 8088的两种组态模式
- MN/MX*接高电平为最小组态模式
MN/MX*接低电平为最大组态模式设计
2. 8088最小组态的引脚信号
1. 数据和地址引脚
- AD7~AD0
- 地址/数据分时复用引脚,双向、三态
- 在访问存储器或外设的总线操做周期中,这些引脚在第一个时钟周期输出存储器或I/O端口的低8位地址A7~A0
- 其余时间用于传送8位数据D7~D0
- A15~A8(Address)
中间8位地址引脚,输出、三态
这些引脚在访问存储器或外设时,提供所有20位地址中的中间8位地址A15~A8
- A19/S6~A16/S3(Address/Status)
- 地址/状态分时复用引脚,输出、三态
- 这些引脚在访问存储器的第一个时钟周期输出高4位地址A19~A16
- 在访问外设的第一个时钟周期所有输出低电平无效
- 其余时间输出状态信号S6~S3
- S6始终为低;
- S5为标志寄存器的中断容许标志的状态位,它在每个时钟周期开始时被修改;
- S4和S3用以指示是哪个段寄存器正在被使用,00为ES,01为SS,10为CS,11为DS。
在DMA方式时这4条线处于高阻状态指针
2. 读写控制引脚
- ALE(Address Latch Enable)
- IO/M*(Input and Output/Memory)
- WR*(Write)
- 写控制,输出、三态、低电平有效
- 有效时,表示CPU正在写出数据给存储器或I/O端口
- RD*(Read)
- 读控制,输出、三态、低电平有效
- 有效时,表示CPU正在从存储器或I/O端口读入数据
- READY
- 存储器或I/O口就绪,输入、高电平有效
- 在总线操做周期中,8088CPU会在第3个时钟周期的前沿(降低沿)测试该引脚
若是测到高有效,CPU直接进入第4个时钟周期
若是测到无效,CPU将插入等待周期Tw
- CPU在等待周期中仍然要监测READY信号,有效则进入第4个时钟周期,不然继续插入等待周期Tw
- DEN*(Data Enable)
- 数据容许,输出、三态、低电平有效
- 有效时,表示当前数据总线上正在传送数据,可利用他来控制对数据总线的驱动
- DT/R*(Data Transmit/Receive)
- 数据发送/接收,输出、三态
- 该信号代表当前总线上数据的流向
高电平时数据自CPU输出(发送)
低电平时数据输入CPU(接收)
- SS0*(System Status 0)
最小组态模式下的状态输出信号
- INTR(Interrupt Request)
- 可屏蔽中断请求,输入、高电平有效
- 有效时,表示请求设备向CPU申请可屏蔽中断
- 该请求的优先级别较低,并可经过关中断指令CLI清除标志寄存器中的IF标志、从而对中断请求进行屏蔽
- INTA*(Interrupt Acknowledge)
- 可屏蔽中断响应,输出、低电平有效
- 有效时,表示来自INTR引脚的中断请求已被CPU响应,CPU进入中断响应周期
- 中断响应周期是连续的两个,每一个都发出有效响应信号,以便通知外设他们的中断请求已被响应、并令有关设备将中断向量号送到数据总线
- NMI(Non-Maskable Interrupt)
- HOLD
- 总线保持(即总线请求),输入、高电平有效
- 有效时,表示总线请求设备向CPU申请占有总线
- HLDA(HOLD Acknowledge)
- 总线保持响应(即总线响应),输出、高电平有效
- 有效时,表示CPU已响应总线请求并已将总线释放
- 此时CPU的地址总线、数据总线及具备三态输出能力的控制总线将全面呈现高阻,使总线请求设备能够顺利接管总线
- 待到总线请求信号HOLD无效,总线响应信号HLDA也转为无效,CPU从新得到总线控制权
- RESET
- 复位请求,输入、高电平有效
- 该信号有效,将使CPU回到其初始状态;当它再度返回无效时,CPU将从新开始工做
8088/86复位后
CS=FFFFH、IP=0000H,
因此程序入口在物理地址FFFF0H
CLK(Clock)
时钟输入
5. 其它引脚
- MN/MX*(Minimum/Maximum)
组态选择,输入
TEST*
测试,输入、低电平有效
6. 8088的基本总线时序
- 总线时序描述CPU引脚如何实现总线操做
9. 8088最大组态的总线造成
系统地址总线
- 采用三态透明锁存器74LS373和三态单向缓冲器74LS244
- 系统数据总线
经过三态双向缓冲器74LS245造成和驱动
- 系统控制总线
主要由总线控制器8288造成
MEMR、MEMW、IOR、IOW、INTA*
第五章 半导体存储器及接口
1. 半导体存储器的分类
- 读写存储器RAM:SRAM.DRAM,NVRAM
- 只读存储器ROM
- 每一个存储单元具备一个惟一的地址,可存储1位(位片结构)或多位(字片结构)二进制数据
- 存储容量(bits)与地址、数据线个数有关:
芯片的存储容量=2^M×N
=存储单元数×存储单元的位数
- 地址译码电路结构
单译码,双译码
片选和读写控制逻辑
片选端CS或CE
有效时,能够对该芯片进行读写操做
输出OE
控制读操做。有效时,芯片内数据输出
该控制端对应系统的读控制线
写WE
控制写操做。有效时,数据进入芯片中
该控制端对应系统的写控制线
4. 随机存取存储器
- 静态RAM(SRAM)

- SRAM的基本存储单元是触发器电路
- SRAM通常采用“字结构”存储矩阵
- SRAM芯片2114外部特性:
10根地址线A9~A0
4根数据线I/O4~I/O1
片选CS
读写WE
- SRAM芯片6264外部特性
28个引脚:
13根地址线A12~A0
8根数据线D7~D0
片选CS1、CS2
读写WE、OE*
- 动态RAM
- 每一个存储单元存放一位,芯片内每一个位单元具备独立地址
- 须要8个存储芯片构成一个字节单元,每一个
- DRAM芯片4116外部特性
-
-
-
-
-
-
- DRAM 4116的刷新:采用“仅行地址有效”方法刷新
- DRAM芯片2164外部特性
-
- EPROM 2716
- 11根地址线A10~A0
8根数据线DO7~DO0
片选/编程CE/PGM
读写OE
编程电压VPP
- EPROM 2764
- 13根地址线A12~A0
8根数据线D7~D0
片选CE
编程PGM
读写OE*
编程电压VPP
- EEPROM
用加电方法,进行在线(无需拔下,直接在电路中)擦写(擦除和编程一次完成)
- EEPROM 2717A
- 11根地址线A10~A0
8根数据线I/O7~I/O0
片选CE
读写OE、WE
状态输出RDY/BUSY
- EEPROM 2864A
- 13根地址线A12~A0
8根数据线I/O7~I/O0
片选CE
读写OE、WE*
6. 半导体存储器与CPU的链接
- 存储芯片的数据线
- 若芯片的数据线正好8根:
一次可从芯片中访问到8位数据,所有数据线与系统的8位数据总线相连
- 若芯片的数据线不足8根:一次不能从一个芯片中访问到8位数据,“位扩充”

- 存储芯片的地址线
- 芯片的地址线一般应所有与系统的低位地址总线相连
- 寻址时,这部分地址的译码是在存储芯片内完成的,咱们称为“片内译码”
- 存储芯片的片选端
- 存储系统常需利用多个存储芯片扩充容量,也就是扩充了存储器地址范围
- 进行“地址扩充”,须要利用存储芯片的片选端对多个存储芯片(组)进行寻址
- 这个寻址方法,主要经过将存储芯片的片选端与系统的高位地址线相关联来实现
- 这种扩充简称为“地址扩充”或“字扩充”
译码和译码器
全译码
- 全部的系统地址线均参与对存储单元的译码寻址
- 包括低位地址线对芯片内各存储单元的译码寻址(片内译码),高位地址线对存储芯片的译码寻址(片选译码)
- 采用全译码,每一个存储单元的地址都是惟一的,不存在地址重复
- 译码电路可能比较复杂、连线也较多
部分译码
- 只有部分(高位)地址线参与对存储芯片的译码
- 每一个存储单元将对应多个地址(地址重复),须要选取一个可用地址
- 可简化译码电路的设计
- 但系统的部分地址空间将被浪费
线选译码
- 只用少数几根高位地址线进行芯片的译码,且每根负责选中一个芯片(组)
- 虽构成简单,但地址空间严重浪费,必然会出现地址重复
- 一个存储地址会对应多个存储单元
- 多个存储单元共用的存储地址不该使用
- 存储芯片的读写控制线
- 芯片OE*与系统的读命令线相连
当芯片被选中、且读命令有效时,存储芯片将开放并驱动数据到总线
- 芯片WE*与系统的写命令线相连
当芯片被选中、且写命令有效时,容许总线数据写入存储芯片
7. 存储芯片与CPU的配合
- 总线驱动
- CPU的总线驱动能力有限
- 单向传送的地址和控制总线,可采用三态锁存器和三态单向驱动器等来加以锁存和驱动
- 双向传送的数据总线,能够采用三态双向驱动器来加以驱动
- 时序配合
- 寻址空间(20位地址线)
220=1M bytes的存储器寻址空间
分段的概念
- 分段组织
段寄存器的16位值左移4位,获得的20位值加上16位的偏移量。
- 字与字节访问
AD0 信号和BHE信号组合,选择奇偶字节或字。
第6章 基本输入输出接口
I/O接口概述
- I/O接口是位于系统与外设间、用来协助完成数据传送和控制任务的逻辑电路
- PC机系统板的可编程接口芯片、I/O总线槽的电路板(适配器)都是接口电路
- 信号转换
对信号的形式和数据的格式进行变换
微机直接处理:数字量、开关量、脉冲量
- 数据缓冲
对输入输出数据进行缓冲和锁存
输出锁存缓冲环节,输入锁存缓冲环节
- 对I/O端口进行寻址
与CPU和I/O设备进行联络
I/O接口的典型结构
1. 接口电路的内部结构
- 数据寄存器、状态寄存器和控制寄存器占有的I/O地址常依次被称为数据端口、状态端口和控制端口,用于保存数据、状态和控制信息
- 两类编排形式
优势:
缺点:
优势:
缺点:
-
-
程序不易阅读(不易分清访存和访问外设)
4. 8088/8086的输入输出指令
输入指令
IN AL,i8 ;字节输入,直接寻址
IN AL,DX ;字节输入,间接寻址
IN AX,i8 ;字输入,直接寻址
IN AX,DX ;字输入,间接寻址
输出指令
OUT i8,AL ;字节输出,直接寻址
OUT DX,AL ;字节输出,间接寻址
OUT i8,AX ;字输出,直接寻址
OUT DX,AX ;字输出,间接寻址
1. 8088/8086的I/O端口
- 8086用于寻址外设端口的地址线为16条,端口最多为216=65536(64K)个,端口号(端口地址)为0000H ~ FFFFH
- 每一个端口地址对应一个字节空间
- 寻址方式
- 直接寻址:只用于寻址00H ~ FFH前256个端口,操做数i8表示端口号
- 间接寻址:可用于寻址所有64K个端口,DX寄存器的值就是端口号,对端口号大于FFH的端口只能采用间接寻址方式
- 数据交换
next: mov dx,8000h ;DX指向数据端口
in al,dx ;从输入端口读开关状态
not al ;反相
out dx,al ;送输出端口显示
call delay ;调子程序延时
jmp next ;重复
2. 查询传送方式及其接口
- CPU须要先了解(查询)外设的工做状态,而后在外设能够交换信息的状况下(就绪)实现数据输入或输出
- 对多个外设的状况,则CPU按必定顺序依次查询(轮询)
- 查询传送的特色是:工做可靠,适用面宽,但传送效率低
//查询输入接口程序示例
mov dx,8000h ;DX指向状态端口
status: in al,dx ;读状态端口
test al,01h ;测试标志位D0
jz status ;D0=0,未就绪,继续查询
inc dx ;D0=1,就绪,DX指向数据端口
in al,dx ;从数据端口输入数据
//查询输出接口程序示例
mov dx,8000h ;DX指向状态端口
status: in al,dx ;读取状态端口的状态数据
test al,80h ;测试标志位D7
jnz status ;D7=1,未就绪,继续查询
inc dx ;D7=0,就绪,DX指向数据端口
mov al,buf ;变量buf送AL
out dx,al ;将数据输出给数据端口
//查询方式的EEPROM编程
next: mov al,55h ;写入内容=55H
mov [bx],al ;写入存储单元
nop ;空操做指令,起延时做用
nop
next1: in al,dx ;查询状态口
test al,01h ;测试D0
jz next1 ;D0=0,芯片还在写入
inc bx ;D0=1,写毕,指针移动
loop next ;循环至所有字节写完
3. 中断传送方式
- 中断请求 =>中断响应=>关中断=>断点保护=>中断识别=>现场保护=>中断服务=>恢复现场=>开中断=>中断返回
- 中断传送是一种效率更高的程序传送方式
- 进行传送的中断服务程序是预先设计好的
中断请求是外设随机向CPU提出的
4. DMA传送方式
- CPU对DMA控制器进行初始化设置
- 外设、DMAC和CPU三者经过应答信号创建联系:CPU将总线交给DMAC控制
- DMA传送
DMA读存储器:存储器 → 外设
DMA写存储器:存储器 ← 外设
- 自动增减地址和计数,判断传送完成否
传送方式的比较
- 无条件传送:慢速外设需与CPU保持同步
- 查询传送: 简单实用,效率较低
- 中断传送:外设主动,可与CPU并行工做,但每次传送须要大量额外时间开销
- DMA传送:DMAC控制,外设直接和存储器进行数据传送,适合大量、快速数据传送
第7章 中断控制接口
1. 8088中断系统
- 8088的中断系统采用向量中断机制
- 可以处理256个中断
- 用中断向量号0~255区别
可屏蔽中断还须要借助专用中断控制器Intel 8259A实现优先权管理
1. 8088的中断类型
- 内部中断:除法错中断、指令中断、溢出中断、单步中断
外部中断:非屏蔽中断、可屏蔽中断
2. 8088的中断响应过程

- 8088各类中断源的优先权,其实是指被识别出来的前后
多种中断同时请求时,最早响应的则多是单步中断或NMI中断

3. 8088的中断向量表
- 中断向量:中断服务程序的入口地址(首地址)
- 逻辑地址含有段地址CS和偏移地址IP(32位)
- 每一个中断向量的低字是偏移地址、高字是段地址,需占用4个字节
- 8088微处理器从物理地址00000H开始,依次安排各个中断向量,向量号也从0开始
- 256个中断占用1KB区域,就造成中断向量表
向量号为N的中断向量的物理地址=N×4
2. 内部中断服务程序
1. 内部中断服务程序
编写80H号中断服务程序
功能:显示以“0”结尾字符串的功能
,利用显示器功能调用INT 10H,
字符串缓冲区首地址为入口参数,
DS:DX(段地址:偏移地址)传递参数
intoff dw ?//偏移
intseg dw ?//段基址
intmsg db ‘A Instruction Interrupt !’//字符串
db 0dh,0ah,0
//保存中断向量
mov ax,3580h//AH=35H,AL=中断向量号
int 21h //DOS功能调用INT 21H
mov intoff,bx ;保存偏移地址
mov intseg,es ;保存段基地址
//设置中断向量
//设置中断向量(DOS功能调用INT 21H)
push ds
mov dx,offset new80h
mov ax,seg new80h
mov ds,ax
mov ax,2580h//AH=25,AL=中断向量号
int 21h
pop ds
//调用中断服务程序,设置入口参数: //DS=段地址(已设置)
//; DX=偏移地址
mov dx,offset intmsg
int 80h ;调用80H中断服务程序
//主程序结束
mov dx,intoff
mov ax,intseg
mov ds,ax
mov ax,2580h
int 21h
mov ax,4c00h
int 21h
//进入中断服务程序
new80h proc
sti ;开中断
push ax ;保护寄存器
push bx
push si
mov si,dx
//显示字符串
new1:mov al,[si]
cmp al,0
jz new2
mov bx,0
mov ah,0eh
int 10h
inc si
jmp new1
//退出中断服务程序
new2: pop si ;恢复寄存器
pop bx
pop ax
iret ;中断返回
new80h endp
3. 8259A中断控制器
1. 8259A的内部结构和引脚
- 中断控制
- 中断请求寄存器IRR
保存8条外界中断请求信号IR0~IR7的请求状态
Di位为1表示IRi引脚有中断请求;为0表示无请求
- 中断服务寄存器ISR
保存正在被8259A服务着的中断状态
Di位为1表示IRi中断正在服务中;为0表示没有被服务
- 中断屏蔽寄存器IMR
保存对中断请求信号IR的屏蔽状态
Di位为1表示IRi中断被屏蔽(禁止);为0表示容许
- 与处理器接口

- 中断级连
- 设置优先权方式
- 普通全嵌套方式
- 特殊全嵌套方式
- 优先权自动循环方式
- 结束中断处理方式
- 8259A利用中断服务寄存器ISR判断:
某位为1,表示正在进行中断服务;
该位为0,就是该中断结束服务。
- 自动中断结束方式
- 普通中断结束方式,配合全嵌套优先权方式使用
- 特殊中断结束方式,配合循环优先权方式使用
- 屏蔽中断源方式
- 普通屏蔽方式
将IMR的Di位置1,则对应的中断IRi被屏蔽
- 特殊屏蔽方式
将IMR的Di位置1,对应的中断IRi被屏蔽的同时,使ISR的Di位置0
- 中断触发方式
- 数据线链接方式
- 初始化命令字ICW
- 初始化命令字ICW最多有4个
- 8259A在开始工做前必须写入
- 必须按照ICW1~ICW4顺序写入
- ICW1和ICW2是必须送的
- ICW3和ICW4由工做方式决定
中断控制器的初始化程序段
//初始化主片8259A
mov al,11h ;写入ICW1
out 20h,al
jmp intr1
intr1: mov al,08h ;写入ICW2
out 21h,al
jmp intr2
intr2: mov al,04h ;写入ICW3
out 21h,al
jmp intr3
intr3: mov al,1h ;写入ICW4
out 21h,al
//初始化从片8259A
mov al,11h ;写入ICW1
out 0a0h,al
jmp intr5
intr5: mov al,70h ;写入ICW2
out 0a1h,al
jmp intr6
intr6: mov al,02h ;写入ICW3
out 0a1h,al
jmp intr7
intr7: mov al, 01h ;写入ICW4
out 0a1h,al
- 操做命令字OCW
- OCW共有3个:OCW1~OCW3
- 写入时没有顺序要求,须要哪一个OCW就写入那个OCW
应用注意事项
/*8259A的IRQ0(向量号为08H)中断请求来自定时器8253,每隔55ms产生一次
本程序的08H号中断服务程序,每次中断显示一串信息,显示10次
*/
intmsg db ‘A 8259A Interrupt !’
db 0dh,0ah,0
counter db 0
mov ax,3508h
int 21h
push bx ;保存偏移地址
push es ;保存段基地址
//设置中断向量
cli
push ds
mov dx,offset new08h
mov ax,seg new08h
mov ds,ax
mov ax,2508h
int 21h
pop ds
//设置中断寄存器
in al,21h
push ax
and al,0feh ;容许IRQ0
out 21h,al
mov counter,0 ;设置中断次数初值
sti ;开中断
//循环等待中断
start1: cmp counter,10
jb start1 ;中断10次退出
//子程序结束
cli
pop ax
out 21h,al
pop dx
pop ds
mov ax,2508h
int 21h
sti
mov ax,4c00h
int 21h
//进入中断服务程序
new08h proc
sti ;开中断
push ax ;保护寄存器
push bx
push ds
mov ax,data
mov ds,ax ;设置数据段DS
//中断处理
inc counter
mov si,offset intmsg ;显示信息
call dpstri
//
mov al,20h
out 20h,al
pop ds ;恢复寄存器
pop bx
pop ax
iret ;中断返回
new08h endp
//显示字符串
dpstri proc ;显示字符串子程序
push ax
push bx
dps1: lodsb
cmp al,0
jz dps2
//显示字符串
mov bx,0
mov ah,0eh
int 10h
jmp dps1
dps2: pop bx
pop ax
ret
dpstri endp
第8章 定时计数控制接口
8253/8254定时计数器
- 3个独立的16位计数器通道
- 每一个计数器有6种工做方式
- 按二进制或十进制(BCD码)计数
- 计数器结构分析
- 计数初值存于预置寄存器;
- 在计数过程当中,减法计数器的值不断递减,而预置寄存器中的预置不变。
- 输出锁存器用于写入锁存命令时,锁定当前计数值
- 计数器的3个引脚
- 注意
第9章 DMA控制接口
DMA控制器8237A
- 每一个8237A芯片有4个DMA通道,就是有4个DMA控制器
- 每一个DMA通道具备不一样的优先权
- 每一个DMA通道能够分别容许和禁止
- 每一个DMA通道有4种工做方式
- 一次传送的最大长度可达64KB
多个8237A芯片能够级连,扩展通道数
1. 8237A的内部结构和引脚
- 请求与响应信号
- DREQ0~DREQ3:DMA通道请求
- HRQ:总线请求
- HLDA:总线响应
- DACK0~DACK3:DMA通道响应
- DMA传送控制信号
- A0~A7:地址线。输出低8位存储器地址。
DB0~DB7:数据线。输出高8位存储器地址
- ADSTB:地址选通
- AEN:地址容许。
- MEMR*:存储器读
- MEMW*:存储器写
- IOR*:I/O读
- IOW*:I/O写
- READY:准备好
- EOP*:过程结束。DMA传送过程结束,输出一个低有效脉冲。
- 处理器接口信号
- DB0~DB7:数据线。
- A0~A3:地址线。
- CS*:片选
- IOR*:I/O读。读取8237A内部寄存器。
- IOW*:I/O写。写入8237A内部寄存器。
- CLK:时钟。控制芯片内部操做和数据传输。
- RESET:复位。使8237A处于初始状态。
8237A的两种工做状态
- 空闲周期:
做为接口电路,受CPU控制的工做状态
有效周期:
做为DMAC控制DMA传送的工做状态

2. 8237A的工做时序·空闲周期
DMA传送时序
- S1状态——输出16位存储器地址
AEN输出高电平,表示DMA传送
- S2状态——输出DMA响应信号和控制信号
DMA读:MEMR和IOW有效
DMA写:IOR和MEMW有效
- S3和Sw状态——检测数据传送是否可以完成,决定是否插入等待状态Sw
S4状态——完成数据传送
3. 8237A的工做方式
- DMA传送方式
- 单字节传送方式:一次传送一个字节,效率略低,
DMA传送之间CPU有机会从新获取总线控制权
- 数据块传送方式:一次请求传送一个数据块,效率高,
整个DMA传送期间CPU长时间没法控制总线
- 请求传送方式
DREQ信号有效就连续传送数据
DREQ信号无效,DMA传送被暂时停止,8237A释放总线,CPU可继续操做
- 级连方式
- DMA传送类型
· DMA读 · DMA写 · DMA检验
- DMA通道的优先权方式
- 固定优先权方式——优先权固定:0,1,2.。。
- 循环优先权方式——优先权循环变化
自动初始化方式
4. 8237A的寄存器
通道寄存器(4个通道分别具备):基地址寄存器、基字节数寄存器、现行地址寄存器、现行字节数寄存器。
状态、命令寄存器:命令寄存器、状态寄存器、请求寄存器、方式寄存器、屏蔽寄存器、临时寄存器