前置知识
I/O端口
I/O 接口与端口_微机原理i/o接口与端口的区别-CSDN博客
8086系统中的I/O端口编制方式_8086微机系统对存储器和io端口是如何编址的-CSDN博客
汇编语言中OUT和IN的用法_百度知道 (baidu.com)
总结:
- 由于种种原因,I/O设备将会通过接口来与总线相连,从而实现与CPU通信。这里的接口可以理解为一个中转站。
- CPU要和 I/O 设备数据传送,在接口中必须设置特定寄存器(一个或多个)供给 CPU 直接存取访问。这些个寄存器就是所谓的端口。
- 一个接口里可以有多个端口,例如控制端口,数据端口等等
- 端口会进行编址,从而可以像访问内存地址一样来访问端口
- i8086采用独立编址方式,通过IN/OUT指令实现端口的读取写入
当然,现在的计算机中很少通过端口来访问I/O设备了,大部分使用更先进的技术
8253芯片
微机 —— 可编程定时器/计数器 8253/8254 - 柯星 - 博客园 (cnblogs.com)
总结:
- 8253可通过编程手段来实现定时/计数,可通过端口访问到
- 要编程控制8253,首先需要按照指定格式写入控制字,写入的端口为43h。随后选择对应的通道(计数器)写入计算初值(地址为40H-42H,例如通道0就是40H)
- 想要实现重复计时,一般都是使用模式3工作
中断向量表,自定义中断,8259芯片
汇编_修改中断向量表_自定义中断-CSDN博客(虽然这篇博文是以DOS为例,但是主要的知识点依然是共通的)
操作系统开发系列—8.时钟中断 - 是非猫 - 博客园 (cnblogs.com)
总结:
- 修改中断向量表就是修改一下中断向量
- 需要自己实现一个中断服务例程(别忘了用iret返回)
- 时钟中断在地址20H处(8乘4=20H)
- 需要对8259芯片做一些设置,例如打开定时器中断(IQR0),屏蔽从8259的中断(手动在设置一下确保不会出错)
- bios会将EOI设置为非自动模式,所以在中断服务例程中要手动发送EOI
实验流程
首先设置虚拟地址+初始化寄存器+上滚清屏
随后修改中断向量
之后设置时钟中断
然后完成中断服务例程(换行打印helo,world!)
最后补上0和结束符,实现MBR的格式