计算机系统(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设备的输入和输出。

相关文章
|
Java Apache
解决gradle下载慢的问题
解决gradle下载慢的问题
8534 0
|
前端开发 数据库 数据安全/隐私保护
【项目实战】登录与注册业务的实现(前端+后端+数据库)
【项目实战】登录与注册业务的实现(前端+后端+数据库)
2889 0
【项目实战】登录与注册业务的实现(前端+后端+数据库)
|
域名解析 缓存 网络协议
CentOS-7.2部署DNS域名解析服务器并进行相关配置测试
CentOS-7.2部署DNS域名解析服务器并进行相关配置测试
722 0
CentOS-7.2部署DNS域名解析服务器并进行相关配置测试
|
7月前
|
存储 机器学习/深度学习 人工智能
C 408—《数据结构》易错考点200题(含解析)
408考研——《数据结构》精选易错考点200题(含解析)。
500 27
|
9月前
|
Python
Python 中一些常见的数据类型
Python 中一些常见的数据类型
491 8
|
10月前
|
传感器
CAN 帧有哪些类型
CAN帧主要有五种类型:数据帧,用于传输数据;远程帧,用于请求数据;错误帧,表示检测到错误;过载帧,表示接收器需要延时;帧间隔,用于分隔不同的帧。
|
11月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
Kubernetes 应用服务中间件 nginx
debian11使用kubeadm安装k8s
debian11使用kubeadm安装k8s
254 1
Cmake生成指定vs版本的工程文件
本文简单总结了使用 cmake 生成 visual studio 工程文件的过程
|
存储 Java 数据库
如何在Spring Boot中实现多租户数据隔离
如何在Spring Boot中实现多租户数据隔离