计算机系统(1)实验五 中断实验

简介: 计算机系统(1)实验五 中断实验

实验目的


1)学会分析和理解给定的编程问题;

2)掌握中断驱动的基本原理;

3)掌握键盘数据寄存器(KBDR)及键盘状态寄存器(KBSR)工作基本原理;

4)掌握输出数据寄存器(DDR)及输出状态寄存器(DSR)工作基本原理;

5)利用LC-3设计并编写用户程序及中断程序。


实验内容


 计算机领域中,中断就是由软硬件向处理器发送信号,处理器收到并立即处理该信号表示事件的过程。中断会暂停当前处理器正在执行的流程,然后将处理器切换到高优先级。处理器会暂存当前任务的状态,然后执行一小段称为中断处理程序(ISR)的代码来处理该事件。中断是暂时的,中断处理程序执行结束后,处理器会回到之前任务暂存的状态继续执行,中断分为两种类型:硬件中断和软件中断。

 本实验的目的是展示如何让输入输出通过执行中断处理程序的方式来暂停和恢复一个正在运行的程序,恢复后的程序就像中间什么都没有发生过,本实验使用键盘作为输入来中断正在运行的程序。


实验步骤


实现用户程序(模块A部分):


设计思路:

 要实现从键盘输入一个字符后执行中断程序,就需要将中断程序的起始地址写入键盘的中断矢量表中,且要将KBSR的中断使能位设置为1。

 具体实现如下(每一条代码的意义在注释中已经写明,此处不做赘述):


37bb7317c05e4db798cb1d075cc6c824.png

0989522a97924905b4eccc1bcc8afec2.png


实现键盘中断服务程序(模块B部分):


设计思路:

 要实现中断后的返回,就需要将用户程序中使用的寄存器数据先压入栈中,在执行完中断程序后再将压入栈中的寄存器的值返回。

 从键盘输入一个字符,先判断该字符是否为回车,如果是回车的话,从中断程序返回。若输入的字符不是回车,就执行将该字符输出10遍,再输入一个字符,将其输出10遍,直到输入回车程序返回。

 具体实现如下(每一条代码的意义在注释中已经写明,此处不做赘述):


21d7233ae8634427bff2d9c5d1732b44.png

7e384d372fa04fd4b4f1cf1bdcccf7c0.png


测试程序


未在键盘上输入时


36d967ffe88641c0b88d3496452a0681.png


输入字符’5’后,程序暂停


在键盘上输入回车后,在输出10次字符’5’后继续运行用户程序


d6ae79ca9bd94fcf83aeac0f0c5ae9e6.png


实验结论:


 通过本次实验,对LC-3的中断有了更进一步的认识。以前对中断前的准备工作不是很了解,但本次实验通过自己模拟硬件做中断前的准备的工作,也加深了自己对中断前的准备工作的了解(具体包括将寄存器的值压入栈,修改KBSR的中断使能位等)。自己将中断承程序的起始地址写入键盘中断的矢量表,也加强了自己对矢量表的理解,不光提升了对中断服务程序的理解,还加深了对trap服务子程序的了解。

 也实现了不使用trap服务子程序,自己模拟I/O设备的输入和输出。

相关文章
|
Rust JavaScript 前端开发
【Rust 实战】Rust 与 Wasm
【Rust 实战】Rust 与 Wasm
2937 0
【Rust 实战】Rust 与 Wasm
|
10月前
|
存储 Web App开发 缓存
清理C盘空间的6种方法,附详细操作步骤
释放C盘空间并不难。只要掌握合适的方法,哪怕你是电脑小白,也能轻松清理出几十GB空间。下面就为大家介绍6种实用、安全、细致的清理方法,并附上操作步骤。
|
7月前
|
机器学习/深度学习 监控 数据可视化
YOLOv8+PyQt5睡岗状态智能检测平台搭建 | 睡觉行为自动监控系统【开箱即用】
在本项目中,我们利用YOLOv8模型进行睡觉和睡岗状态检测。项目的核心功能是通过训练YOLOv8来识别不同的状态(如“睡觉”和“睡岗”)。同时,系统还提供了完整的PyQt5界面,用户可以在界面上查看实时检测结果,并且系统支持开箱即用,可以直接进行部署。
|
机器学习/深度学习 计算机视觉 iOS开发
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
883 0
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
|
存储 机器学习/深度学习 人工智能
C 408—《数据结构》易错考点200题(含解析)
408考研——《数据结构》精选易错考点200题(含解析)。
1597 27
|
机器学习/深度学习 编解码 算法
YOLOv5改进 | 主干网络 | 用EfficientNet卷积替换backbone【教程+代码 】
在YOLOv5的GFLOPs计算量中,卷积占了其中大多数的比列,为了减少计算量,研究人员提出了用EfficientNet代替backbone。本文给大家带来的教程是**将原来的主干网络替换为EfficientNet。文章在介绍主要的原理后,将手把手教学如何进行模块的代码添加和修改,并将修改后的完整代码放在文章的最后,方便大家一键运行,小白也可轻松上手实践。以帮助您更好地学习深度学习目标检测YOLO系列的挑战。
|
人工智能 JavaScript IDE
好消息,在 Visual Studio 中可以免费使用 GitHub Copilot 了!
好消息,在 Visual Studio 中可以免费使用 GitHub Copilot 了!
1452 11
|
人工智能 自然语言处理 运维
钉钉x昇腾:用AI一体机撬动企业数字资产智能化
大模型在过去两年迅速崛起,正加速应用于各行各业。尤其在办公领域,其主要模态——文字和图片,成为了数字化办公的基础内容,催生了公文写作、表格生成、文本翻译等多种应用场景,显著提升了工作效率。然而,AI引入办公场景也带来了数据安全与成本等问题。为此,钉钉与昇腾联合推出的“钉钉专属AI一体机解决方案”,通过本地化部署解决了数据安全、成本高昂及落地难等痛点,实现了从硬件到软件的深度协同优化,为企业提供了开箱即用的AI服务,推动了办公场景的智能化升级。
714 11
|
传感器
CAN 帧有哪些类型
CAN帧主要有五种类型:数据帧,用于传输数据;远程帧,用于请求数据;错误帧,表示检测到错误;过载帧,表示接收器需要延时;帧间隔,用于分隔不同的帧。
在进行多路直播时,如何保证不同视频源之间的同步性?
在进行多路直播时,如何保证不同视频源之间的同步性?
下一篇
开通oss服务