bios中断

ddatsh

dev #asm asm

BIOS中断

BIOS 和 DOS 存在于实模式下,通过建立在中断向量表(Interrupt Vector Table,IVT)中的软中断指令 int 中断号来调用

中断向量表

中断服务程序入口地址的偏移量与段基址,一个中断向量占据4字节空间。中断向量表是8086系统内存中最低端1K字节空间,作用就是按照中断类型号从小到大的顺序存储对应的中断向量,总共存储256个中断向量

在中断响应过程中,CPU通过从接口电路获取的中断类型号(中断向量号)计算对应中断向量在表中的位置,并从中断向量表中获取中断向量,将程序流程转向中断服务程序的入口地址

由于中断向量表可以在操作系统层面灵活修改,不同系统的中断向量表可能不同

intel在CPU的保护模式下,占用了0x00 ~ 0x1F共32个中断号,Linux下从0x20开始用于系统自身的中断,包括8259芯片的中断重置

实模式中断

在实模式下,中断向量表占据内存最低的1KB,共256个表项。每个表项4子节,包含一个2子节的段地址和2子节的偏移,即中断处理程序的入口地址

中断号 描述
00h CPU: 除零错,或商不合法时触发
01h CPU: 单步陷阱,TF标记为打开状态时,每条指令执行后触发
02h CPU: 非可屏蔽中断, 如 开机自我测试 时发生内存错误触发
03h CPU: 第一个未定义的中断向量, 约定俗成仅用于调试程序
04h CPU: 算数溢出。通常由INTO指令在置溢出位时触发
05h 在按下Shift-Print Screen或BOUND指令检测到范围异常时触发
06h CPU: 非法指令
07h CPU: 没有数学协处理器时尝试执行浮点指令触发
08h IRQ0: 可编程中断控制器每 55 毫秒触发一次,即每秒 18.2 次
09h IRQ1: 每次键盘按下、按住、释放
0Ah IRQ2:
0Bh IRQ3: COM2/COM4
0Ch IRQ4: COM1/COM3
0Dh IRQ5: 硬盘控制器(PC/XT 下)或 LPT2
0Eh IRQ6: 需要时由软碟控制器呼叫
0Fh IRQ7: LPT1
11h 返回设备列表
12h 获取常规内存容量
16h 从键盘缓冲区中读取一个键盘输入
18h 执行磁带上的 BASIC 程序
“真正的”IBM 兼容机在 ROM 里内置 BASIC 程序
当引导失败时由 BIOS 调用此例解释执行
(例:Boot disk error. Replace disk and press any key to continue…”)
19h 加电自检之后载入操作系统

显示服务(Video Service——INT 10H)

使用 INT 10H 中断服务程序时,先指定 AH 寄存器为下表编号其中之一,该编号表示欲调用的功用,而其他寄存器的详细说明,参考表后文字,当一切设定好之后再调用 INT 10H

功能 功能代码 参数 返回
设置显示模式 AH=00H AL=显示模式 AL=显示模式标志/CRT控制模式字节
设置文本方式光标 AH=01H CH=行扫描开始,CL=行扫描结束 通常一个字符单元有8个扫描行(0-7)。所以,CX=0607H是一个正常的光标,CX=0007H是一个完整块光标。 如果设置CH的第5位,这通常意味着“隐藏光标”,所以CX=2607H是一种无形光标。 有些视频卡有16条扫描线(00H-0Fh)。 有些视频卡不使用CH的第5位,对于这种情况,可以尝试行扫描开始大于行扫描结束(如:CX=0706h)
设置光标位置 AH=02H BH=页码,DH=行,DL=列
获取光标位置和形状 AH=03H BX=页码 AX=0,CH=行扫描开始,CL=行扫描结束,DH=行,DL=列
读取光笔位置(VGA系统不工作) AH=04H AH=状态(0=无触发,1=触发) BX=X像素,CH=Y像素,CL=像素行模式(0FH-10H) DH=字符Y,DL=字符X
选择活动显示页 AH=05H AL=页码
向上滚动窗口 AH=06H AL=滚动的行(0=清除,被用于CH,CL,DH,DL) BH=背景颜色和前景颜色 CH=高行数,CL=左列数,DH=低行数,DL=右列数
向下滚动窗口 AH=07H 参考向上滚动
读光标所在位置的字符和属性 AH=08H BH=页码 AH=颜色,AL=字符
在当前光标位置写字符和属性 AH=09H AL=字符,BH=页码,BL=颜色,CX=多次打印字符
在光标位置写入字符 AH=0AH AL=字符,BH=页码,CX=多次打印字符
设置背景/边框颜色 AH=0BH,BH=00H BL=背景/边框颜色(边框颜色只能在文本模式设置)
设置调色板 AH=0BH,BH=01H BL=调色板ID(只使用于CGA,但现在的显示卡都支持多个或所有模式。)
写图形像素 AH=0CH AL=颜色,BH=页码 CX=x,DX=y 无
读图形像素 AH=0DH BH=页码,CX=x,DX=y AL=颜色
电传打字机输出 AH=0EH AL=字符,BH=页码,BL=颜色(只适用于图形模式)
获取当前显示模式 AH=0FH AH=屏幕字符的列数 AL=显示模式(参见功能00H中的说明) BH=页码
写字符串(EGA+,最低PCAT) AH=13H AL=写模式,BH=页码,BL=颜色 CX=字符串长度,DH=行,DL=列 ES:BP=字符串偏移量

AH=00H 显示模式列表

AL 文字/图形 分辨率 颜色
00 文字 40*25 2
01 文字 40*25 16
02 文字 80*25 2
03 文字 80*25 16
04 图形 320*200 2
05 图形 320*200 4
06 图形 640*200 2

AH=01H光标属性

CH的第7位必须是 0,第 5、6 位表示光标属性

CH位6 CH位5 属性
0 0 正常
0 1 隐形
1 0
1 1 闪烁缓慢

AH=06颜色属性

二进制数 颜色 例子 二进制数 颜色 例子
0000 黑色 black 1000 灰色 gray
0001 蓝色 blue 1001 淡蓝色 light blue
0010 绿色 green 1010 淡绿色 light green
0011 青色 cyan 1000 淡青色 light cyan
0100 红色 red 1100 淡红色 light red
0101 紫红色 magenta 1101 淡紫红色 light magenta
0110 棕色 brown 1110 黄色 yellow
0111 银色 light gray 1111 白色 white

AH=0CH/0DH显示范围

显示模式 X座标 Y 座标 颜色bit数
4 0~319 0~199 0、1
5 0~319 0~199 0~3
6 0~639 0~199 0、1

AH=13H写字符串

AL= 显示输出方式