微机原理
标签(空格分隔): 计算机基础
第7章. 输入/输出与中断
- 把介于主机和外设之间的一种缓冲电路称为I/O接口电路,简称I/O接口
- 主机与I/O设备之间交换信息有:
- 数据信息
- 数字量(计算机可以直接发送,接受 和处理的数据。以二进制形式表示的数或ASCII码表示的数符)
- 模拟量(通过传感器采集到的现场数据, 经过A/D转换后才能输入计算机)
- 开关量(经过相应的电平转换才能与计算机连接,以为二进制数)
- 状态信息(反映了当前设备的工作状态)
- 控制信息(CPU通过接口与外设交换信息是,只能通过
IN
,OUT
指令来传送数据)
- 数据信息
- 每个接口电路中都包含一组寄存器,称为I/O端口(port),用来保存CPU和外设之间传送的数据分为:
- 数据端口(双向)
- 状态端口(输出)
- 控制端口(输入)
- 每个端口都有一个地址(端口地址)
- I/O端口的编址方式有:
- I/O端口与内存单元统一编址(所有访问内存的指令都可以访问I/O端口)(先是存储器,然后是I/O端口)
- I/O端口与内存单元独立编址(端口地址和内存地址长度不同,存储器地址空间不受I/O端口地址空间影响)
- I/O端口的地址译码(一个接口芯片内部有若干个可寻址的端口,有片选信号线和用于端口寻址的地址线)
- CPU与外设之间数据传送的方式
- 程序传送
- 无条件传送方式(CPU对外设控制时不用考虑其状态)
- 查询传送方式(考虑状态)
- 中断传送(CPU与外设可以并行工作,适合少量数据传送)
- 直接存储器存取(DMA)(适合大批量数据传送,直接进行数据传送,传送过程无需CPU介入,需要接口芯片DMA控制器
DMAC
(包括控制状态寄存器,地址寄存器,字节计数器),传送时CPU放弃总线控制权)
- 单字节传输
- 块传输
- 请求传输
- 程序传送
- CPU执行程序时,出现中断请求,CPU暂停正在执行的程序,赚取处理该事件,并在处理完毕后返回断点处继续执行被暂停的程序,这一过程称为
中断
- 断点处指返回主程序时执行的第一条指令的地址
- 为实现中断功能设置的硬件电路和与之对应的软件称为
中断系统
- 中断源
- 硬件中断源
- 软件中断源
- 中断处理过程
- 中断请求
- 中断响应(一旦进入中断处立即清除请求信号)
- 保护断点(关中断,将标志寄存器内容入栈保存,将CS和IP内容入栈保存)
- 中断处理(执行中断服务程序)
- 中断返回(中断服务程序的最后有一条中断返回指令)(恢复断点)
- 中断优先级用于处理多个中断请求
- 中断优先级的确定:
- 软件查询
- 硬件排队电路(可编程中断控制器)
- 中断嵌套
- 8086/8088可以处理
256
种不同类型的中断,分为:
- 外部中断(由外设请求引起)
- 内部中断(CPU内部由于执行指令时引起)
- 中断源优先次序: 软件中断(除单步中断外),非屏蔽中断,可屏蔽中断,单步中断
- 中断向量表: 存放中断向量的一个特定的内存区域。
- 中断向量: 中断服务程序的入口地址
- 每个终端服务程序的入口地址占4个存储单元,低地址存放IP,高地址存放CS
- 8086系统中中断向量表位于内存的前1KB(256*4=1024)
00000H ~ 003ffH
- 0 ~ 4: 专用中断,依次为:除法出错,单步中断,NMI,断点中断,溢出中断(00000H~00013H)
- 5 ~ 31: 系统保留(00014H~0007FH)
- 32 ~ 255: 共软中断INT n,或可屏蔽中断INTR使用
- 21H的中断一用作DOS的系统功能调用
- 中断服务程序入口地址 = 中断类型号*4
- 中断服务程序的设计:
- 关中断
- 保护现场
- 开中断
- 中断服务
- 恢复现场
- 中断返回
第四章 8086指令系统
- 指令格式
位数 | 符号 | 意义 |
---|---|---|
0 ~ 2 | R/M | 存住其中操作数的偏移地址 |
3 ~ 5 | REG | 寄存器 |
6 ~ 7 | MOD | 寻址方式字节,规定指令操作数类型 |
8 | W | 操作数类型,0 表示字节,1 表示字 |
9 | D | 操作数传送方向(0 表示源操作数,1 表示目的操作数 |
10 ~ 15 | OPCODE | 操作码 |
* REG字段编码表
REG | W=1(字操作) | W=0(字节操作) |
---|---|---|
000 | AX | AL |
001 | CX | CL |
010 | DX | DL |
011 | BX | BL |
100 | SP | AH |
101 | BP | CH |
110 | SI | DH |
111 | DI | BH |
* MOD 字段编码表
MOD | 寻址方式 |
---|---|
00 | 存储器寻址,没有位移量 |
01 | 存储器寻址, 有8位位移量 |
10 | 存储器寻址, 有16位位移量 |
11 | 寄存器寻址,没有位移量 |
* MOD与R/M字段组合的寻址方式
MOD=11存储器寻址 | MOD=11 | MOD=11 | MOD!=11 | MOD!=11 | MOD!=11 | MOD!=11存储器寻址和偏移地址的计算公式 |
---|---|---|---|---|---|---|
R/M | W=1 | W=0 | R/M | MOD=00 | MOD=01 | MOD=10 |
000 | AX | AL | 000 | [BX+SI] | [BX+SI+D8] | [BX+DI+D16] |
001 | CX | CL | 001 | [BX+DI] | [BX+DI+D8] | [BX+DI+D16] |
010 | DX | DL | 010 | BP+SI | BP+SI+D8 | BP+SI+D_16 |
011 | BX | BL | 011 | [BP+DI] | [BP+DI+D8] | [BP+DI+D16] |
100 | SP | AH | 100 | [SI] | [SI+D8] | [SI+D16] |
101 | BP | CH | 101 | [DI] | [DI+D8] | [DI+D16] |
110 | SI | DH | 110 | D16 | [BP+D8] | [BP+D16] |
111 | DI | BH | 111 | [BX] | [BX+D8] | [BX+D16] |
- 数据传送指令
MOV
- 目的操作数可以是存储器,寄存器(不能IP)和段寄存器(不能CS)
- 能实现: 存储单元之间的传送,立即数至段寄存器的传送,段寄存器之间的传送
- CS可以作为源操作数
POSH
,POP
,堆栈操作指令
- 现移后入: 先改变SP的值,在进行数据的操作
- 数据交换指令
XCHG
, 交换源操作数和目的操作数的数据
- 两者不能同时为存储器
- 段寄存器的内容不能参与交换
- 字节转换指令 `