---- 整理自狄泰软件唐佐林老师课程
查看所有文章链接:(更新中)深入浅出操作系统 - 目录
文章目录
1. 实践内容
- 预备工作
- 8259A初始化,读写IMR寄存器,发送EOI控制字,等
- 实践一
- 自定义软中断的实现(内部中断处理)
- 实践二
- 时钟中断的响应和处理(外部中断处理)
1.1 预备工作
- 编写延时函数(Delay)
- 编写8259A初始化函数(Init8259A)
- 编写8259A中断屏蔽寄存器读写函数(ReadIMR,WriteIMR)
- 编写8259A中断结束符写入函数(WriteEOI)
1.1.1 Init8259A
参看上一节:《36 - 8259A控制编程》
1.1.2 读写IMR寄存器
- 使用OCW1设置IMR的目标值
- 写入对应端口(0x21或0xA1)
1.1.3 汇编小贴士
- 汇编语言中支持 预处理语句(如:%include)
- 与C语言中的情况类似,汇编预处理语句常用于文本替换
- 示例:语句重复(%rep)
1.1.4 准备工作的代码
1.2 实践一
- 自定义保护模式下的软中断(0x80)
- 0x80中断使用后,在屏幕上打印字符串
- 示例:
1.2.1 实现思路
1.2.2 中断描述符表
- 注意事项
- x86处理器一共支持256个中断类型,因此中断描述符表中需要有256个描述符与之对应
1.2.3 内部中断实现
1.3 实践二
- 处理外部时钟中断(主8259A-IR0引脚上的中断请求)
- 接收到时钟中断后,在屏幕上循环打印0~9
1.3.1 实现思路
- 注意事项:
由于8259A初始化为手动结束的方式,因此,外部中断服务程序中需要手动发送结束控制字
1.3.2 发送中断结束命令字
1.3.3 时钟中断处理
2. 小结
- 中断处理前需要先对8259A进行初始化(ICW1~ICW4)
- 中断描述符表需要包含256个描述符
- 处理外部中断时:
- 处理器和8259A需要同时设置为响应外部中断
- 考虑是否手动发送结束控制字(中断手动结束)