中断

中断:Interrupt
是一种程序随机切换的方式

中断的典型应用:

  1. 实现CPU与外界信息交换的握手联络:实现CPU和外部设别的并行工作、提高CPU的效率
  2. 故障处理:硬件故障
  3. 实时处理
  4. 程序调度
  5. 软中断(程序自愿中断)

中断的分类:

  1. CPU 中断
  2. 软件中断
  3. 硬件中断

几个中断的概念

  • 中断向量: 中断服务的入口
  • 中断单级/多级:多个中断服务程序
  • 开/关(清)中断:开中断(STI,Set Interrupt)就是允许响应中断请求,关中断(CLI, Clean Interrupt) 就是拒绝响应中断请求。
  • 中断请求: IR(Interrupt Request): 请求进行中断,由外部设备、软件发出
  • 中断响应: INTA(INTerrupt Accept): CPU 发出,可以进行中断。
  • 中断返回:返回到进入中断程序之前的程序(继续之前的程序执行)

8259 芯片

Intel 8259芯片: 可编程中断控制器芯片

可以级联,单片支持8个中断向量设置 (本实验仪中只能使用一个, KK+ 连接 IR0, 且设置了ICW4 只接受 IR0)

和实验 3.2 没有中断的复杂模型机的区别: 更多的操作(至少包括 STI, CLI, IRET)

挂接 8259 芯片

CPU和8259挂接图

接线图

注意:

  1. 8259 作为一个外部设备挂接在 IOY3 上
  2. 控制总线 INTA 与 8259 相连

当外部中断请求有效(IR),CPU允许中断(EI, 也就是 经过了STI),在一条指令执行完时,将响应中断。
CPU响应中断时会向 8259 发送 $\overline{INTA}$

实现堆栈

需要保存中断之前执行的地址,也为了实现多中断、中断嵌套(本实现没有实现) 需要实现堆栈。

中断响应微程序

T4 节拍如果有 EI(Enable Interrupt)和INTR(Interrupt Request)通过 P<4>校验产生程序分支

SP就是栈

  • 22: 从栈中取地址给AR
  • 23:PC 存到主存中
  • 24:栈中地址到A
  • 25:A + 1 存到 SP

这一步是将当前正在执行的程序地址暂存到栈中

  • 26:入口到AR (向量中所指的入口)
  • 27:MEM -> PC

这是开始执行中断服务程序

机器指令代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$P 00 60; LDI R0 13H
$P 01 13
$P 02 30; OUT CH0,R0
$P 03 C0; ICW1: 边沿触发、单片模式、需要ICW4
$P 04 60
$P 05 30; OUT CH0, R0 ICW2 VEC 30
$P 06 30; 设置中断向量为30~37
$P 07 C1
$P 08 60
$P 09 03
$P 0A 30; ICW4, 非缓冲,86模式,自动EOI
$P 0B C1
$P 0C 60
$P 0D FE
$P 0E 30
$P 0F C1; OCW1 只允许 IR0 请求
$P 10 63;初始化堆栈指针 A0H
$P 11 A0
$P 12 70; STI 开中断

; programe the 8259 chip
 
$P 13 20 ; IN R0 00H
$P 14 00
$P 15 30; LOOP: OUT R0 40H (OUT UNIT) 模拟主程序执行
$P 16 40
$P 17 E0; JMP LOOP
$P 18 15

$P 20 80; CLI 关中断
$P 21 21; IN R1 00H
$P 22 00
$P 23 04; ADD R1, R0
$P 24 30; OUT 40H,R0
$P 25 40;
$P 26 70; STI 开中断
$P 27 B0; IRET 中断返回
$P 30 20; 中断向量