【汇编语言】13-BIOS和DOS的内置中断例程


公粽号「专注Linux」,专注Linux内核开发

本期源码,欢迎star:
https://github.com/ZYKWLJ/assembly4-homework

本系列将讲解《汇编语言》一书,本节讲解**【汇编语言】13-内中断之int中断**。


本节速览
1.BIOS 是指?
2.BIOS 的功能有那些?
3.给出CPU从加电到整个计算机运行直到被OS接管的全流程?从此,你对计算机的整体理解有了哪些新认识?
4.我们可以编程改变FFFF:O处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。?
5.int19h中断例程,可以由DOS提供吗?
6.使用BIOS和DOS提供的中断例程,可以很方便的进行屏幕输出,请你梳理本节的几个字符打印过程,体会通过内置中断例程进行输出的流程?

导读:

上一章-【汇编语言】13-内中断之int中断 中,我们讲解了int中断指令的运用,并自己动手编写实践。然而,在计算机主板、操作系统自身内部,本身就有提供的一系列优质中断例程,供我们使用。 本节,我们就来详细讲解这些例程。

一、BIOS

1.定义

所谓BIOS,全称为基本输入输出系统,本质是系统ROM主板中的一套固化程序。

2.组成成分

BIOS这套系统程序,包含如下内容:

(1)硬件系统检测初始化程序

(2)外部中断内部中断的中断例程

(3)用于对硬件设备进行I/O操作中断例程;

(4)其他和硬件系统相关中断例程。

二、DOS内置中断例程

操作系统DOS也提供了中断例程,从操作系统的角度来看,DOS的中断例程就是操作系统 给程序员提供的编程资源。

和硬件设备相关的DOS中断例程中,一般都调用了BIOS的中断例程。


我们可以直接使用int 中断号来完成BIOSDOS对应中断的调用,已完成某些工作调用!

三、BIOS和DOS的中断例程安装过程

前面的课程中 ,我们都是自己编写中断例程,将它们放到安装程序中然后运行安装程序将它们安装到指定的内存区中。此后,别的应用程序才可以调用。

那么,这里的BIOS和DOS中的中断例程是如何工作的呢?需要我们做什么?

这需要梳理出,计算机CPU从加电到运行的整个过程

四、CPU从加电到运行的整个过程

(1) 开机后,CPU 一加电,初始化(CS)=0FFFFH(IP)=0,自动从 FFFF:0 单元开始执行程序。 FFFF:0 处有一条转跳指令,CPU 执行该指令后,转去执行 BIOS 中的硬件系统检测初始化程序。

(2) 初始化程序将建立 BIOS 所支持的中断向量,即将 BIOS 提供的中断例程的入口地址登记在中断向量表中
注意,对于 BIOS 所提供的中断例程,只需将入口地址登记在中断向量表中即可因为它们是固化到 ROM 中的程序,一直在内存中存在。

(3) 硬件系统检测和初始化完成后,调用 int 19h 进行操作系统的引导从此将计算机交由操作系统控制。

(4) DOS 启动后除完成其他工作外,还将它所提供的中断例程装入内存并建立相应的中断向量。


以下是全流程图:

CPU从加电到计算机正式被OS接管的全流程

FAQ

判断下面说法的正误:

(1)我们可以编程改变FFFF:O处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。

(2)int19h中断例程,可以由DOS提供。


答案

五、BIOS中断例程实战

1. 中断中的多个子程序

一般来说,一个供程序员调用的中断例程往往包含多个子程序,中断例程内部用传递进来的参数决定执行哪一个子程序。BIOS和DOS提供的中断例程,都用ah传递内部子程序的编号。

2. int 10

int 10是BIOS提供的中断例程,其中包含了多个·屏幕输出相关的子程序。

一、int 10中断例程2号子程序,设置光标位置功能:

int 10中断例程设置光标位置功能

其中,(ah)=2表示调用第10h号中断例程的2号子程序,功能为设置光标位置,可以提供光标所在的行号(80* 25字符模式下:024)、`列号`(80*25字符模式下:079),和页号作为参数。


(bh)=0(dh)=5(dl)=12,设置光标到第0页,第5行,第12列。

二、int 10中断例程9号子程序,光标位置显示字符功能。

**int 10中断例程9号子程序**,光标位置显示字符功能。


(ah)=9表示调用第10h号中断例程的9号子程序,功能为在光标位置显示字符,可以提供要显示的字符颜色属性页号字符重复个数作为参数。


其中,bl中的颜色属性为:

bl中的颜色属性

这和显存中的属性字节一致。

3.bh 中页号的含义:

内存地址空间中,B8000H~BFFFFH32kB的空间,为80*25彩色字符模式的显示缓冲区。一屏的内容在显示缓冲区中共占4000个字节。

显示缓冲区分为8页,每页4KB(=4000B),显示器可以显示任意一页的内容。一般情况下,显示第0页的内容。也就是说,通常情况下,B8000H~B8F9FH中的4000个字节的内容将出现在显示器上。

4.编程实战

在屏幕的光标下面显示80个红底高亮闪烁绿色的“a”

源码:

assume cs:code
code segment
  
    mov ah,9           ;在光标位置显示字符
    mov al,'a'         ;字符
    mov bl,11001010b   ;颜色属性
    mov bh,0           ;第0页
    mov cx,80          ;字符重复个数
    int 10h

    mov ax,4c00h
    int 21h
code ends
end

结果如下视频:

注意,这里没有设定光标位置,所以默认在现在的输出下面。如果我们想设定光标位置,也可以,使用int 10中断的2号子程序。源码如下:

;使用BIOS的10号中断例程,在屏幕指定位置显示80个红底高亮闪烁绿色的“a”
assume cs:code
code segment
    ;这里可以选择是否置光标,不置,就是默认下滚。
    mov ah,2           ;置光标
    mov bh,0           ;第0页
    mov dh,12           ;dh 中放行号
    mov dl,0          ;dl 中放列号
    int 10h

    mov ah,9           ;在光标位置显示字符
    mov al,'a'         ;字符
    mov bl,11001010b   ;颜色属性
    mov bh,0           ;第0页
    mov cx,80          ;字符重复个数
    int 10h

    mov ax,4c00h
    int 21h
code ends
end  

结果如下:

六、DOS中断例程实战

int21h中断例程是DOS提供的中断例程,其中包含了DOS提供给程序员在编程时调用的子程序。

1.int 21号中断,4c号
Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值