中断体验:观察自定义中断的安装及触发

简介: 【说明】中断机制是一种重要的解决问题的手段。针对初学者不能对中断的相关技术有直观的认识,特设计了这个学习活动。

【说明】中断机制是一种重要的解决问题的手段。针对初学者不能对中断的相关技术有直观的认识,特设计了这个学习活动。

【知识准备】中断向量表;中断处理过程;中断安装程序

【体验步骤】
步骤1 自定义78h号中断的中断处理例程,并将其安装到内存中

;文件名: ptest.asm
assume cs:code
code segment
start:mov ax,cs
      mov ds,ax
      mov ax,0
      mov es,ax
      ;安装中断例程
      lea si, do_78h
      mov di,200h
      mov cx,offset do78h_end - offset do_78h
      cld
      rep movsb
      ;设置中断向量表
      mov word ptr es:[78h*4],200h
      mov word ptr es:[78h*4+2],0
      mov ax,4c00h
      int 21h
      ;定义中断例程:显示"flying";
 do_78h: jmp short istart
       msg db 'flying!-Piao Guo....'
istart:
       push ds
       push es
       push si
       push di
       push ax
       push cx

       mov ax, cs
       mov ds, ax
       mov si, 202h
       mov ax,0b800h
       mov es,ax
       mov di,160*24
       mov ah, 11001111b ;闪烁红底加亮白字
       mov cx,offset istart - offset msg
    s: mov al,[si]
       mov es:[di],ax  ;字符与属性一起移入

       inc si
       add di,2
       loop s
       pop cx
       pop ax
       pop di
       pop si
       pop es
       pop ds
      iret
do78h_end:nop
code ends
end start

编译、连接及运行过程如下:
这里写图片描述

请说出来:运行以后什么也看到,程序的作用是什么?

步骤2 编程序,触发中断78h

;文件名: pa.asm
assume cs:code, ss:stack
stack segment stack
       db  16 dup (0)
stack ends
code segment
start: int 78h
       mov ax,4c00h
       int 21h
code ends
end start

编译、连接、运行程序:
这里写图片描述

请说出:在运行pa时,发生了什么?为什么?

步骤3 在debug中载入pa.exe并单步运行,观察寄存器的变化
重点关注:CS、IP,以及标志寄存器中IF的值,如图,EI(允许)或DI(关闭)
这里写图片描述

一边观察,一边说出运行中涉及的中断的机制

步骤4 在debug中调用int 78h
按下面操作工作:
这里写图片描述

请说出,调用int 78时发生了什么?

步骤5:关闭DOSBOX,再打开,不做步骤1,直接从步骤2开始重做上面的工作。

请说出:你看到了什么?为什么会是这样?

目录
相关文章
|
SQL 机器学习/深度学习 存储
七大经典技术场景!Apache Flink 在多维领域应用的 40+ 实践案例
随着 Apache Flink 自身的发展,越来越多的企业选择 Apache Flink 应用于自身的业务场景,如底层平台建设、实时数仓、实时推荐、实时分析、实时大屏、风控、数据湖等场景中,解决实时计算的需求。
七大经典技术场景!Apache Flink 在多维领域应用的 40+ 实践案例
Cron表达式范例:每隔5秒执行一次:*/5 * * * * ?
Cron表达式范例: 每隔5秒执行一次:*/5 * * * * ? 每隔1分钟执行一次:0 */1 * * * ? 每天23点执行一次:0 0 23 * * ? ...
6541 0
|
安全 机器人 开发者
Sora的五大应用场景
【2月更文挑战第16天】Sora的五大应用场景
1013 2
Sora的五大应用场景
|
Java
@Max和@Min注解失效
Springboot 2.3及以上版本不再内置hibernate-validator 6.0.13.Final添加上述依赖可解决。
398 3
|
存储 前端开发 JavaScript
Redisson 分布式锁的正确使用
你会正确使用分布式锁吗?
2440 0
Redisson 分布式锁的正确使用
|
存储 缓存 前端开发
基于B/S架构的实验室管理系统(云LIS平台源代码)
云LIS系统集成了样本管理、检测项目管理、质控管理、报告管理、数据分析、两癌筛查等多个方面的功能,为实验室提供了一站式的信息化解决方案。系统采用.Net Core新的技术框架、DEV报表、前端js封装、分布式文件存储、分布式缓存等技术,支持LIS独立部署、Docker部署等多种方式,方便用户根据自身需求进行定制和扩展。
643 1
基于B/S架构的实验室管理系统(云LIS平台源代码)
|
数据采集 JavaScript 前端开发
python动态加载内容抓取问题的解决实例
python动态加载内容抓取问题的解决实例
python动态加载内容抓取问题的解决实例
|
JSON 开发工具 开发者
CMake进阶教程:深入FetchContent与ExternalProject模块
CMake进阶教程:深入FetchContent与ExternalProject模块
1294 0
|
网络协议 NoSQL C语言