《汇编语言(第四版)》 . 王爽著 . 清华大学出版社 . 2019
¶实验 15 安装新的 int9 中断例程
¶外中断
外中断源有两类:
1)可屏蔽中断
CPU 可以不响应,是否响应取决于标志寄存器 IF 位的设置,当 CPU 检测到可屏蔽中断信息时,若 IF=1,则 CPU 在执行完当前指令后响应中断,引发中断过程;若 IF=0,则不响应可屏蔽中断
在中断过程中将 IF 置 0 可以禁止其他的可屏蔽中断,若需要处理则可将 IF 置 1
1 | sti ;设置 IF=1 |
几乎所有由外设引发的外中断都是可屏蔽中断,也是我们主要讨论的对象
可屏蔽中断基本上与内中断的中断过程相同,只是其中断类型码是通过数据总线送入 CPU 的
2)不可屏蔽中断
CPU 必须响应的外中断,检测到不可屏蔽中断信息时,在执行完当前指令后立即响应,引发中断过程,对于 8086CPU,其中断类型码固定为 2
通过对键盘输入的处理来理解 PC 机是如何处理外设输入的
理解以下过程
键盘产生扫描码(通码与断码:断码 = 通码 + 80h)- 扫描码送入处理键盘输入的端口 60h - 引发九号中断 - 执行int 9 中断例程
¶编写 int 9 中断例程
1 | cs:code,ss:stack |
¶检测点 15.1
(1)
pushf
call dword ptr ds:[0]
无需再设置标志寄存器的 IF 与 TF 位
(2)
找到修改中断向量表的程序段
先用 cli 指令将 IF 置 0,禁止其他的可屏蔽中断,在程序段执行后再用 sti 将 IF 置 1
1 | ;在中断向量表中设置新的 int 9 中断例程的入口地址 |
¶安装新的 int 9 中断例程
注意与前面程序的区别,安装程序返回后地址将丢失,新 int 9 中断例程与原 int 9 中断例程的入口地址皆不可保存在安装程序中,于是我们将原 int 9 中断例程的入口地址放在 0000:0200
处,将新 int 9 中断例程放在 0000:0204
处
1 | cs:code |
¶实验任务
1 | cs:code |
¶汇编语言实验合集
实验 1 查看 CPU 和内存,用机器指令和汇编指令编程
实验 2 用机器指令和汇编指令编程
实验 3 编程、编译、连接、跟踪
实验 4 [bx] 和 loop 的使用
实验 5 编写、调试具有多个段的程序
实验 6 实践课程中的程序
实验 7 寻址方式在结构化数据访问中的应用
实验 8 分析一个奇怪的程序
实验 9 根据材料编程
实验 10 编写子程序
课程设计 1
实验 11 编写子程序
实验 12 编写 0 号中断的处理程序
实验 13 编写、应用中断例程
实验 14 访问 CMOS RAM
实验 15 安装新的 int9 中断例程
实验 16 编写包含多个功能子程序的中断例程
实验 17 编写包含多个功能子程序的中断例程
课程设计 2