Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74090
  • 博文数量: 9
  • 博客积分: 176
  • 博客等级: 入伍新兵
  • 技术积分: 142
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-29 09:52
文章分类

全部博文(9)

文章存档

2015年(3)

2012年(6)

我的朋友

分类: LINUX

2015-05-26 16:49:59

上一篇博文简单写了系统的启动过程(其实真正的启动过程还是很复杂的,需要做很多搬运的工作还有初始化的工作),从那个流程图里可以看到,最开始执行的程序是BIOS程序,网上有一些流传出来的BIOS代码,但是这部分代码是比较晦涩难懂的,也可以看成是一个小型的操作系统;BIOS代码估计搞嵌入式的比较容易理解,像我们这类软件人员还是不要深入到这泥潭里了,对于Linux操作系统来说,BIOS的任务只是在一开始有用,后面就不那么需要它了。

那么BIOS对操作系统的作用在哪里呢?BIOS有点儿像是催化酶,它负责让操作系统和计算机硬件发生反应,反应开始后它的任务就完成了,操作系统进入保护模式后,原有的BIOS中断向量表将被覆盖,系统不再需要BIOS中断例程了。在网上找了一个BIOS中断向量的列表,粘贴过来备忘吧。

中断

描述

INT 00h

CPU: 除零错,或商不合法时触发

INT 01h

CPU: 单步陷阱,TF标记为打开状态时,每条指令执行后触发

INT 02h

CPU: , 时发生内存错误触发。

INT 03h

CPU: 第一个未定义的中断向量, 约定俗成仅用于调试程序

INT 04h

CPU: 算数溢出。通常由INTO指令在置溢出位时触发。

INT 05h

在按下Shift-BOUND指令检测到范围异常时触发。

INT 06h

CPU: 非法指令。

INT 07h

CPU: 没有时尝试执行浮点指令触发。

INT 08h

IRQ0: 可编程中断控制器每 55 毫秒触发一次,即每秒 18.2 次。

INT 09h

IRQ1: 每次键盘按下、按住、释放。

INT 0Ah

IRQ2:

INT 0Bh

IRQ3:

INT 0Ch

IRQ4:

INT 0Dh

IRQ5: 硬盘控制器(PC/XT 下)或

INT 0Eh

IRQ6: 需要时由呼叫。

INT 0Fh

IRQ7:

h

显示服务 - BIOS或操作系统设定以供软件调用。

AH=00h

设定显示模式

AH=01h

设定游标形态

AH=02h

设定游标位置

AH=03h

获取游标位置与形态

AH=04h

获取光笔位置

AH=05h

设定显示页

AH=06h

清除或卷轴画面()

AH=07h

清除或卷轴画面()

AH=08h

读取游标处字符与属性

AH=09h

更改游标处字符与属性

AH=0Ah

更改游标处字符

AH=0Bh

设定边界颜色

AH=0Eh

TTY模式下写字符

AH=0Fh

取得目前显示模式

AH=13h

写字符串

INT 11h

返回设备列表。

INT 12h

获取常规内存容量。

h

低阶磁盘服务。

AH=00h

复位磁盘驱动器。

AH=01h

检查磁盘驱动器状态。

AH=02h

读扇区。

AH=03h

写扇区。

AH=04h

校验扇区。

AH=05h

格式化磁道。

AH=08h

取得驱动器参数。

AH=09h

初始化硬盘驱动器参数。

AH=0Ch

寻道。

AH=0Dh

复位硬盘控制器。

AH=15h

取得驱动器类型。

AH=16h

取得软驱中盘片的状态。

INT 14h

串口通信例程。

AH=00h

初始化串口。

AH=01h

写出字符。

AH=02h

读入字符。

AH=03h

状态。

INT 15h

其它(系统支持例程)。

AH=4FH

键盘拦截。

AH=83H

事件等待。

AH=84H

读游戏杆。

AH=85H

SysRq 键。

AH=86H

等待。

AH=87H

块移动。

AH=88H

获取扩展内存容量。

AH=C0H

获取系统参数。

AH=C1H

获取扩展 BIOS 数据区段。

AH=C2H

指针设备功能。

AH=E8h, AL=01h (AX = E801h)

获取扩展内存容量(自从 1944 年引入的新功能),可获取到 64MB 以上的内存容量。

AH=E8h, AL=20h (AX = E820h)

查询系统地址映射。该功能取代了 AX=E801h AH=88h

INT 16h

键盘通信例程。

AH=00h

读字符。

AH=01h

读输入状态。

AH=02h

Shift 键(修改键)状态。

AH=10h

读字符(增强版)。

AH=11h

读输入状态(增强版)。

AH=12h

Shift 键(修改键)状态(增强版)。

INT 17h

打印服务。

AH=00h

打印字符。

AH=01h

初始化打印机。

AH=02h

检查打印机状态。

INT 18h

执行磁带上的 BASIC 程序:真正的”IBM 兼容机在 ROM 里内置 BASIC 程序,当引导失败时由 BIOS 调用此例程解释执行。(例:打印“Boot disk error. Replace disk and press any key to continue...”这类提示信息)

INT 19h

之后载入操作系统。

INT 1Ah

实时钟服务。

AH=00h

读取实时钟。

AH=01h

设置实时钟。

AH=02h

读取实时钟时间。

AH=03h

设置实时钟时间。

AH=04h

读取实时钟日期。

AH=05h

设置实时钟日期。

AH=06h

设置实时钟闹铃。

AH=07h

重置实时钟闹铃。

INT 1Bh

Ctrl+Break,由 IRQ 9 自动调用。

INT 1Ch

预留,由 IRQ 8 自动调用。

INT 1Dh

不可调用:指向视频参数表(包含视频模式的数据)的指针。

INT 1Eh

不可调用:指向软盘模式表(包含关于软驱的大量信息)的指针。

INT 1Fh

不可调用:指向视频图形字符表(包含从 80h FFh 字符的数据)的信息。

INT 41h

地址指针:硬盘参数表(第一硬盘)。

INT 46h

地址指针:硬盘参数表(第二硬盘)。

INT 4Ah

实时钟在闹铃时调用。

INT 70h

IRQ8: 由实时钟调用。

INT 74h

IRQ12: 由鼠标调用

INT 75h

IRQ13: 由数学协处理器调用。

INT 76h

IRQ14: 由第一个 IDE 控制器所呼叫

INT 77h

IRQ15: 由第二个 IDE 控制器所呼叫











































































































































































阅读(1993) | 评论(0) | 转发(0) |
0

上一篇:Linux内核学习记录(2) 内核加载过程

下一篇:没有了

给主人留下些什么吧!~~