当前位置: 首页 > news >正文

【微机接口】中断系统:中断的应用

日时钟中断:

系统日时钟中断源是系统8254 0#计数器,每55ms有一次中断请求。

 中断类型码为08H

系统日时钟中断(8型中断服务子程序)处理流程:

(1)开中断保护现场,40H->DS

(2)对日时钟计数器进行一次加1计数

(3)执行INT 1CH

1CH为日时钟的外扩中断,用户可开发新的1CH中断

(4)向主8259A发出常规中断结束命令

MOV AL,20H

OUT 20H,AL

(5)恢复现场,执行IRET指令

例:利用PC系列机上的8254的0号定时计数器引发的日时钟中断,设计程序:每隔1S在PC终端屏幕上显示一行字符串'HELLO!',显示10行结束

(1)保存原来系统的1CH中断向量到数据段OLD1C双字单元

(2)置换1CH中断向量使其指向自己的中断服务子程序

(3)中断服务子程序每执行18次显示一次字符串

(4)在返回操作系统前恢复原来保存的1CH中断向量

数据段:

DATA SEGMENT USE16

MESG    DB   'HELLO!',0DH,0AH,'$'

OLD1C  DD   ?      ;保存1CH原本的中断向量,双字

ICOUNT DB 18    ;中断计数初值?

COUNT DB 10     ;显示行数

DATA ENDS

代码段:

CODE SEGMENT USE16

            ASSUME CS:CODE,DS:DATA

BEG:  MOV AX,DATA

             MOV DS,AX

             CLI  ;关中断

CLI关中断是防止在WRITE1C如果有日时钟中断的话,会访问1CH,所以会出现一边读一边写的情况,可能会出现问题。

READ1C不关中断也可以,因为如果在读取的过程中有日时钟中断,那么会执行默认的1CH,即什么也不做,没有影响。

             CALL READ1C;读取原本1CH的中断向量到OLD1C

             CALL WRITE1C;写入新的中断向量

             STI ;开中断

SACN:CMP COUNT,0

              JNZ SACN ;是否已经显示10行,否则一直在这等待

              CLI

              CALL RESET;恢复1CH中断向量

              STI

              MOV AH,4CH

              INT 21H

中断服务子程序SERVICE

SERVICE  PROC

                  PUSHA

                  PUSH  DS

                  MOV AX,DATA

                  MOV DS,AX     ;因为在写入1CH中断向量时,把代码段段基址赋给了DS,因为下面用到了数据段的变量,为了能够正确找到变量,所以需要把数据段段基址赋给DS,以防DS存的是代码段的段基址。

                  DEC ICOUNT

                  JNZ EXIT         ;ICOUNT初值为18,每次进入SERVICE中断服务子程序时,ICOUNT都要减1,当减到0时打印1行,并且把ICOUNT初值还原为18,COUNT减1;否则直接退出中断服务子程序

                 MOV ICOUNT,18

                 DEC COUNT 

                 MOV AH,9

                 MOV DX,OFFSET MESG

                 INT 21H

EXIT:        POP DS

                 POPA

                 IRET 

SERVICE ENDP               

 READ1C子程序:

READ1C   PROC

                  MOV  AH,35H

                  MOV  AL,1CH 

                  INT 21H

                  MOV WORD PTR OLD1C,BX

                  MOV WORD PTR OLD1C+2,ES

                  RET

READ1C  ENDP

WRITE1C PROC子程序:

WRITE1C PROC 

              PUSH DS        ;在写中断向量时,会把中断服务程序的段基址赋给DS,但是DS原本存放的是数据段段基址,所以要在写中断向量的时候保护DS

              MOV AX,SEG SERVICE

              MOV DS,AX 

              MOV DX,OFFSET SERVICE

              MOV AH,25H

              MOV AL,1CH

              INT 21H

              POP DS

              RET

WRITE1C  ENDP              

RESET子程序:

RESET PROC

;这里不保护DS的原因是之后的代码中不会在用到代码段的变量了。

             MOV  DX,WORD PTR OLD1C 

             MOV  DS,WORD PTR OLD1C+2

             MOV AH,25H

             MOV AL,1CH

             INT 21H

             RET

RESET ENDP

 

相关文章:

  • Spring MVC入口Servlet原理简介说明(HttpServletBean,FrameworkServlet,DispatcherServlet)
  • 【附源码】Python计算机毕业设计社区卫生预约挂号系统
  • 【C++】顺序表,链表,栈的练习(千万要会做)每日小细节007
  • k8s编程operator——client-go基础部分
  • MySQL纯代码复习
  • 零基础入门学习Web开发:HTML篇(一)
  • 【云原生】docker 搭建ElasticSearch7
  • ubuntu安装openresty
  • 前端爱心代码跟个风
  • 【数据结构】C语言实现顺序栈 OJ题 —— 有效的括号
  • Hive笔记
  • 趣味益智小游戏 三子棋+五子棋 优化版(可任意选择棋盘大小)
  • MySQL : 彻底搞懂一条SQL的执行过程
  • 【成为红帽工程师】第三天 web服务器
  • 【Node.js实战】一文带你开发博客项目(API 对接 MySQL)
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • .pyc 想到的一些问题
  • 【Amaple教程】5. 插件
  • Android系统模拟器绘制实现概述
  • CentOS 7 防火墙操作
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Gradle 5.0 正式版发布
  • JavaScript中的对象个人分享
  • java第三方包学习之lombok
  • Java教程_软件开发基础
  • Java面向对象及其三大特征
  • java小心机(3)| 浅析finalize()
  • JSDuck 与 AngularJS 融合技巧
  • Laravel Telescope:优雅的应用调试工具
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • npx命令介绍
  • pdf文件如何在线转换为jpg图片
  • Promise面试题,控制异步流程
  • select2 取值 遍历 设置默认值
  • Spring Cloud中负载均衡器概览
  • 聊聊flink的TableFactory
  • 前端之React实战:创建跨平台的项目架构
  • 深度学习在携程攻略社区的应用
  • 我的面试准备过程--容器(更新中)
  • 我建了一个叫Hello World的项目
  • 原生js练习题---第五课
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • (10)STL算法之搜索(二) 二分查找
  • (2)Java 简介
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (arch)linux 转换文件编码格式
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (附源码)计算机毕业设计高校学生选课系统
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (三) diretfbrc详解
  • (数据结构)顺序表的定义
  • (一) springboot详细介绍