实验四 中断实验

一、实验目的               

掌握中断服务程序的编写。

二、实验电路

三、实验内容

1.实验用PC机内部的中断控制器8259A,中断源用TPC-ZK实验箱上的单脉冲电路,将单脉冲电路的输出接中断请求信号IRQ,每按一次单脉冲按键产生一次中断请求。

2.编写程序,要求每次主机响应外中断IRQ时,显示"THIS IS A 8259A INTERRUPT !",在键盘上敲任意一个键,程序退出。

四、编程提示

1.本实验用TPC-ZK实验系统的USB接口,USB接口实验箱固定接到了PC机主片中断控制器8259的IRQ3上,即进行中断实验时,所用中断类型号为0BH,编程时要根据0BH中断类型号设置中断矢量。

2. PC机主片中断控制器8259的地址为20H、21H。主片8259中断屏蔽寄存器IMR对应位(IRQ3)要清零(允许中断):

IN AL,21H

AND AL,11110111B

OUT 21H,AL

中断服务结束前要使用中断结束命令:

MOV AL,20H

OUT 20H,AL

中断结束返回DOS时将IMR对应位置1,屏蔽中断。

IN AL,21H

OR AL,08H

OUT 21H,AL

五、实验程序(必须加注释)和结果

IRO_MASK EQU 11110111B ; 中断屏蔽码,二进制表示为11110111,用于设置8259A中断控制器的中断屏蔽寄存器

DATAS SEGMENT

    MS1 DB 0DH,0AH,'THIS IS A 8259A INTERRUPT!',0DH,0AH,'$' ; 定义字符串,用于显示中断信息

    MS2 DB 0DH,0AH,'PRESS ANY KEY TO EXIT!',0DH,0AH,'$' ; 定义字符串,用于提示用户按任意键退出

    MS3 DB 0DH,0AH,'guozhihong2022900624 AND mingruizhao2022900625',0DH,0AH,'$' ; 定义字符串,可能是作者信息

    CSREG DW? ; 用于存储旧的中断向量段地址

    IPREG DW? ; 用于存储旧的中断向量偏移地址

DATAS ENDS

STACKS SEGMENT

    ; 此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV ax,DATAS

    MOV ds,AX

   

    MOV dx,OFFSET MS3

    MOV ah,09H

    INT 21H ; 显示作者信息

   

    MOV DX,OFFSET MS1

    MOV ah,09H

    INT 21H ; 显示中断信息

   

    CLI ; 关中断,禁止其他中断发生

    MOV ax,350bh

    INT 21h ; 获取旧的中断向量

    MOV ax,es

    MOV CSREG,ax ; 存储旧的中断向量段地址

    MOV IPREG,bx ; 存储旧的中断向量偏移地址

    MOV ax,cs

    mov ds,ax

    MOV dx,offset INT_PROC

    MOV ax,250bh

    INT 21h ; 设置新的中断向量

    IN al,21h

    AND al,11110111b

    OUT 21h,al ; 设置8259A中断控制器的中断屏蔽寄存器

    MOV dx,offset MS2

    MOV ah,09h

    INT 21h ; 显示提示信息

    STI ; 开中断,允许其他中断发生

AG:

    MOV ah,1

    INT 16h

    JZ AG ; 等待用户按键

EXIT:

    CLI ; 关中断

    MOV dx,IPREG

    MOV ax,CSREG

    MOV ds,ax

    MOV ax,250bh

    INT 21h ; 恢复旧的中断向量

    IN al,21h

    or al,00001000b

    OUT 21h,al ; 恢复8259A中断控制器的中断屏蔽寄存器

    MOV ax,4c00h

    INT 21h ; 程序结束,返回操作系统

INT_PROC PROC

    PUSH ax

    PUSH dx

    PUSH ds

    MOV ax,DATAS

    MOV ds,ax

    MOV dx,offset MS1

    MOV ah,09h

    INT 21h ; 显示中断信息

    MOV al,20h

    OUT 20h,al ; 发送中断结束命令给8259A中断控制器

    POP ds

    POP dx

    POP ax

    IRET ; 中断返回

INT_PROC ENDP

CODES ENDS

END START

代码注释说明

IRO_MASK EQU 11110111B:定义了一个常量,用于设置8259A中断控制器的中断屏蔽寄存器。

DATAS SEGMENT:定义了数据段,包含了要显示的字符串和用于存储旧中断向量的变量。

STACKS SEGMENT:定义了堆栈段,但代码中没有具体内容。

CODES SEGMENT:定义了代码段,包含了程序的主要逻辑。

START:程序的入口点,包含了初始化和中断处理的代码。

INT_PROC PROC:定义了中断处理程序,用于处理8259A中断控制器产生的中断。

CODES ENDS:代码段结束。

END START:程序结束。

代码执行流程

程序开始,显示作者信息。

显示中断信息。

保存旧的中断向量。

设置新的中断向量,指向自定义的中断处理程序。

设置8259A中断控制器的中断屏蔽寄存器。

显示提示信息,等待用户按键。

用户按键后,恢复旧的中断向量。

恢复8259A中断控制器的中断屏蔽寄存器。

程序结束,返回操作系统。

代码中的关键操作

CLI和STI:用于关闭和开启中断。

INT 21H:用于调用DOS系统功能,如显示字符串和获取/设置中断向量。

IN和OUT:用于与8259A中断控制器进行数据传输。

PUSH和POP:用于保存和恢复寄存器的值。

IRET:用于从中断处理程序返回。

代码中的数据结构和变量

MS1、MS2和MS3:用于存储要显示的字符串。

CSREG和IPREG:用于存储旧的中断向量段地址和偏移地址。

代码中的函数和子程序

INT_PROC:中断处理程序,用于处理8259A中断控制器产生的中断。

代码中的输入输出操作

MOV dx,OFFSET MS1和MOV ah,09H:用于显示字符串。

IN al,21h和OUT 21h,al:用于与8259A中断控制器进行数据传输。

代码中的条件判断和循环结构

JZ AG:用于等待用户按键。

代码中的异常处理

代码中没有显式的异常处理逻辑,但通过中断处理程序可以处理8259A中断控制器产生的中断。

IRQ

二、实验电路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/77153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 项目src文件结构

SCSS 组件库 SCSS为预处理器 支持除原生CSS外的其他语句 别名路径 在项目下的第一级目录就加入craco.config.js文件并且修改packpage.js 中的部分 // 扩展webpage的配置const path require(path)module.exports {// exports配置webpack:{// 配置别名alias:{:path.resolve(__d…

Cursor入门教程-JetBrains过度向

Cursor使用笔记 **前置:**之前博主使用的是JetBrains的IDE,VSCode使用比较少,所以会尽量朝着JetBrains的使用习惯及样式去调整。 一、设置语言为中文 如果刚上手Cursor,那么肯定对Cursor中的众多选项配置项不熟悉,这…

Linux上位机开发实践(SoC和MCU的差异)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 soc一般是指跑linux的芯片,而mcu默认是跑rtos的芯片,两者在基本原理方面其实差异不大。只不过,前者由于性能的原…

离线导出和安装Python库

详细介绍:离线导出和安装Python库 常用命令: 生成requirement.txt文件 pip freeze > requirement.txt离线批量下载库 pip download -d packages -r requirement.txt离线批量安装库 pip install --no-index --find-links./ -r requirement.txt

基于Vue Node.js的电影售票网站的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!

摘要 互联网技术的成熟和普及,势必会给人们的生活方式带来不同程度的改变。越来越多的经营模式中都少不了线上运营,互联网正强力推动着社会和经济发展。国人对民族文化的自信和不同文化的包容,再加上电影行业的发展,如此繁荣吸引…

利用 Python 和 AI 技术创作独特的图像艺术作品

1. 项目目标 生成艺术作品:利用 AI 模型(如 Stable Diffusion)生成具有艺术风格的图像。自定义风格:通过文本提示(prompt)控制图像的艺术风格(如赛博朋克、印象派、超现实主义等)。…

XR技术赋能艺术展演|我的宇宙推动东方美学体验化

本次广州展览现场引入我的宇宙XR体验模块,通过空间计算与动作捕捉技术,让观众在潮玩艺术氛围中体验虚拟互动,打造“看得懂也玩得动”的展演新场景。 作为科技与文化融合的推动者,我的宇宙正在以“体验科技”为媒介,为潮…

接口的集成测试步骤

一、集成测试是什么 ‌接口的集成测试‌是指在软件开发过程中,将各个模块或组件按照设计要求组合在一起,并测试它们之间的接口是否能够正确交互和协同工作的过程。集成测试是软件开发中的一个重要阶段,通常在单元测试之后进行,目的…

上门服务 APP 30 亿营收商业模式在乌干达的技术赋能与实践

不久前,非洲乌干达出现黑人女技师提供上门足疗服务的消息引发关注。据了解,当地一次40分钟的上门按摩服务仅需约40元人民币,价格仅为国内同类服务的十分之一。这一现象折射出全球健康服务行业正在经历的数字化转型浪潮。 国内领先的上门服务平…

go语言学习笔记:gin + gorm + mysql 用户增删改查案例入门

大家好,我是此林。 Golang 语言现在已经成为了编程的趋势,毕竟是大厂背书嘛,Google 研发的。 目前很多云原生项目都是基于 go 来编写的,比如: Kubernetes (K8s)​ 容器编排系统, Docker​ 容器化技术&…

探索亮数据Web Unlocker API:让谷歌学术网页科研数据 “触手可及”

本文目录 一、引言二、Web Unlocker API 功能亮点三、Web Unlocker API 实战1.配置网页解锁器2.定位相关数据3.编写代码 四、Web Scraper API技术亮点 五、SERP API技术亮点 六、总结 一、引言 网页数据宛如一座蕴藏着无限价值的宝库,无论是企业洞察市场动态、制定…

SpringBoot整合POI实现Excel文件的导出与导入

使用 Apache POI 操作 Excel文件,系列文章: 《SpringBoot整合POI实现Excel文件的导出与导入》 《SpringMVC实现文件的上传与下载》 《C#使用NPOI导出Excel文件》 《NPOI使用手册》 1、Apache POI 的介绍 Apache POI 是一个基于 Java 的开源库,专为读写 Microsoft Office 格…

构建用户友好的记账体验 - LedgerX交互设计与性能优化实践

构建用户友好的记账体验 - LedgerX交互设计与性能优化实践 发布日期: 2025-04-16 引言 在财务管理应用领域,技术实力固然重要,但最终决定用户留存的往往是日常使用体验。本文作为LedgerX技术博客的第二篇,将深入探讨我们如何通过精心的交互…

如何用AI辅助软件产品原型设计及工具推荐

以下是针对软件产品原型设计的 AI辅助工具推荐,涵盖国内外主流工具,结合功能特点、优劣势及适用场景分析,并标注是否为国内软件及付费情况: 一、国内工具推荐 1. 墨刀AI(MockingBot AI) 特点:…

MySQL的MVCC机制详解

1. 什么是MVCC? MVCC(Multi-Version Concurrency Control,多版本并发控制)是数据库系统中用于实现并发控制的一种技术。它通过保存数据在某个时间点的快照来实现,使得在同一个数据行上可以同时存在多个版本&#xff0…

C语言数字图像处理---2.31统计滤波器

本文介绍空域滤波器中的一种:统计滤波器 [定义与算法] 统计滤波(Statistic Filter)定义:基于图像处理中的邻域统计方法,对邻域内的像素信息进行统计,如基于均值和方差的信息,用于平滑或去噪图像,同时保留边缘信息。 算法步骤如下: 统计滤波器的优点和缺点主要包…

计算机视觉相机模型与标定:如何让计算机“看懂”三维世界?

计算机视觉相机模型与标定:如何让计算机“看懂”三维世界? 一、前言二、相机模型基础​2.1 针孔相机模型​2.1.1 模型原理​2.1.2 代码示例​2.2 透视变换与相机内参​2.2.1 透视变换矩阵​2.2.2 内参矩阵的作用​2.3 相机外参​2.3.1 世界坐标系与相机坐标系的转换​2.3.2 外…

DeepSpeed ZeRO++:降低4倍网络通信,显著提高大模型及类ChatGPT模型训练效率

图1: DeepSpeed ZeRO 简介 大型 AI 模型正在改变数字世界。基于大型语言模型 (LLM)的 Turing-NLG、ChatGPT 和 GPT-4 等生成语言模型用途广泛,能够执行摘要、代码生成和翻译等任务。 同样,DALLE、Microsoft Designer 和 Bing Image Creator 等大型多模…

Seq2Seq - 编码器(Encoder)和解码器(Decoder)

本节实现一个简单的 Seq2Seq(Sequence to Sequence)模型 的编码器(Encoder)和解码器(Decoder)部分。 重点把握Seq2Seq 模型的整体工作流程 理解编码器(Encoder)和解码器&#xff08…

Spring Boot集成MinIO的详细步骤

1. 安装MinIO 使用Docker部署MinIO 拉取MinIO镜像: docker pull minio/minio 这将从Docker Hub中获取最新的MinIO镜像。 创建目录: mkdir -p /home/minio/config mkdir -p /home/minio/data 这些目录将用于持久化MinIO的数据和配置文件 创建MinIO…