BIOS数据区和其他固定数据区
来源:互联网 发布:易游网络验证山寨 编辑:程序博客网 时间:2024/04/28 14:06
源地址:http://blog.csdn.net/x86ipc/article/details/5303760
<<PC技术内幕>> 第6章 BIOS数据区笔记
CPU、BIOS以及普通的适配卡都占用了大量的固定数据区来在首兆字节地址空间执行各种功能。无论是何种操作系统或者硬件设计。这些地址在所有的80X86 IBM兼容机上非常常见。
固定数据区包括CPU中断向量表、保存在中断向量表内的数据以及BIOS和适配卡数据。
BIOS数据区
该区域含有系统BIOS ROM 用到的关键数据信息。程序可以简单地访问BIOS数据。在所有系统上这个区域都开始于内存的40h 段址处。通常可用两种方法来访问这段内存。其一是利用段址 40h 和偏移量为 0。第二种方法是使用段址 0,但偏移地址开始于 400h。通常使用这两种方法可以访问相同的信息。
BIOS数据区归纳
偏移类型
内 容
400H字计算机上0号RS232-1适配器的基地址,通常为3F8H。402H字计算机上1号RS232-1适配器的基地址,通常为2F8H。404H字计算机上2号RS232-1适配器的基地址。406H字计算机上3号RS232-1适配器的基地址。408H字计算机上0号并行打印机适配器的基地址,通常为378H。40AH字计算机上1号并行打印机适配器的基地址。40CH字计算机上2号并行打印机适配器的基地址。40EH字计算机上3号并行打印机适配器的基地址。(PS2型此值为扩展BIOS数据区段地址)410H字该字保存与计算机连接的设备编码表,BIOS中断11H(设备测定)可返回此信息。 位 0软驱安装标志,此位为0表示没有软驱。 1数字协处理器安装标志,此位为0表示未安装协处理器。 3-2系统板RAM的大小,适用于一些旧机型,PS2型未使用。00=16K,01=32K,10=48K,11=64K)。 5-4初始显示方式(00=AG,01=CGA-40,10=CGA-80,11=MDA-80)。 7-6软驱的数量,公当位0为1时有效,00=1,01=2,10=3,11=4 8DMA标志 9-11所连RS232适配器数 12连有游戏I/O 13不用(PS2型为内置MODEM安装标志,此位为0表示没有安装) 14-15所连打印机适配器数412H字节初始测试标志(红外线键盘连接错误单元/?)。413H字该字给出打印机可用RAM的容量,基本内存容量为0-10K,以千字节为单位。BIOS中断12H(内存大小测定)可返回此信息。415H字I/O通道的存储器容量(PS2型,BIOS控制标志)。417H字节这是第一个键盘状态字,通过编码,使每位均有特定的含义,具体格式如下: 位 0表示键盘右边的Shift键当前是否被按下(1表示按下,0表示未按下)。 1表示键盘左边的Shift键当前是否被按下(1表示按下,0表示未按下)。 2表明Ctrl键当前是否按下(1表示按下,0表示未按下)。 3表明Alt键当前是否按下(1表示按下,0表示未按下)。 4屏幕(Scroll)锁定开关键状态(1表示屏幕锁定处于开,0表示关)。 5数字(Num Lock)锁定开关键状态(1表示数字锁定处于开,0表示关)。 6大写字母(Caps Lock)开关键状态(1表示Caps Lock处于开,0表示关)。 7插入状态,它表明Ins键是否已按下,以使计算机进入“插入”方式,1表示插入状态正工作,0表明未动作。418H字节这是第二个键盘状态字,其格式如下: 位 0表示键盘左边Ctrl键当前是否被按下(1表示按下,0表示未按下)。 1表示键盘左边Alt键当前是否被按下(1表示按下,0表示未按下)。 2如按下Ctrl+Alt+Del键,则该位为1。 3如果系统键(Ctrl和Num Lock)接下且保持住,则该位为1,当这个系统键依次按下时,BIOS暂停处理,直至下键按下为止。但它仍响应中断。 4表明屏幕(Scrool)锁定键当前是否按下(1表示按下,0表示未按下)。 5表明数字(Num Lock)锁定键当前是否按下(1表示按下,0表示未按下)。 6表明大写字母(Caps Lock)锁定键当前是否按下(1表示按下,0表示未按下)。 7表明Ins键当前是否按下(1表示按下,0表示未按下)。419H字节为Alt和数字键盘键入的数而保留。(按住ALT+数字,可直接得到相应的ASCII码)41AH字指向键盘缓冲区首址41CH字指向键盘缓冲区尾址,当该值等于前一字的值时,说明缓冲区满。41EH32字节循环键盘缓冲区,它保存键盘键入的字符,直到程序可以接收这些字符为止,前两个字指向此缓冲区的当前是首和尾。43EH字节表示磁盘驱动器的搜索状态,0-3位分别对应于驱动器。如果这些位中有一位为0,则表示在搜索磁道之前,必须重新校准相应的驱动器。位4-6未使用,位7为中断标志位,为1表示中断发生。43FH字节表示磁盘驱动器的马达状态,0-3位分别对应于驱动器0-3,如果某位被置为1,则相应驱动器的马达正在转动。位4-6未使用,位7为1表示现行操作是写。440H字节保存一个表明驱动器马达接通多长时间的计数,每个时钟节拍,计数减1,当计数为0明马达停转(根据INT8计时)。441H字节表明磁盘工作状态,它被编码,通过使相应位置1来表示一个特定的状态,格式如下: 值 00H正确。 01H送给磁盘控制器的是无效命令。 02H在盘上未找到地址标记。 03H试图在有写保护的盘上写操作。 04H所请求扇区未找到。 08H驱动器DMA错。 09H试图使DMA对64KB存储体进行存取。 10H循环冗余校验(CRC)错。 20HNEC磁盘控制器片出现错误。 40H无效的查找操作。 80H延时,没有响应。442H7字节从NEC磁盘驱动器返回的七个字节状态信息(参见FDC)。449H字节指明当前视频方式,参见INT 10H。44AH字指明显示屏幕的当前列数。44CH字指明一个显示页面的字节数,它随时视频方式的不同而变化。80*25方式=1000H字节,40*25方式=800H字节,图形方式=4000H字节44EH字指明当前显示页面的地址,即显示在当前显示屏幕的显示页面。450H8字每个字均表示有关显示页面内当前光标的位置,每个字的第一字节表示列,第二字节表示行(改变这个字节并不能立刻改变显示)。460H字节表明光标的形状,此字节表示光标字符点阵的最下一行的行号,10H功能调用1设置此光标形状(不要直接更改此字节)。461H字节此字节表示光标字符点阵的最上一行的行号。10H功能调用1设置此光标形状(不要直接更改此字节)。462H字节表明工作显示页面号,由10H功能调用5设置。463H字表明当前工作显示板的口地址。3BCH=单色,3D4H=彩色。465H字节表明6845芯片的方式寄存器的当前值(端口:3X8H)。466H字节表示当前显示控制面板的设置。10H功能调用0BH可设置当前面板(端口:3D9H)。467H5字节PC中,这5个字节用以表示磁带控制的定时计数字、CRC寄存器字和最后输入数值字节,在AT中,这5个字节作为端口使用,从467H开始的双字长是一个指针,它指向BIOS开关使80X86由保护虚地址方式转到实地址方式时控制返回的位置。46CH双字这是BIOS作为时钟计数器的一个双字单元,时钟第步进一次,此值增加一次,其值为0,表示一天开始(午夜),当此计数器达到一天结束的值时,计数器清0,且字节470H置1。中断1AH功能调用0可从此双字单元中读取一天的时间。470H字节这是一个时钟翻转字节。当时钟计数器达到一天结束且复位时,此字节置1以表明新的一天开始。中断1AH功能调用0在读取这一天的时间后,将此字节复位。471H字节位7为1表示BREAK键按下(INT 9设置此标志)。472H字由软件设置复位功能标志或直接跳转FFFF:0重启动。 值 1234H热启动 5678H系统中止 9ABCH在制造商检测时使用。474H字节硬盘状态。 值 00H正确 01H送给磁盘控制器的是无效命令或参数。 02H在盘上未找到地址标记 03H试图在有写保护的盘上进行写操作。 04H所请求扇区未找到。 05H重新复位失败。 07H操作失效。 08HDMA错 09H试图使DMA对64K存储体进行存取。 0AH坏的扇区标志。 0BH坏磁道已清除。 0DH扇区号、格式错。 0EH控制数据地址已清除。 0FHDMA超出限制。 10H循环冗余校验CRC错。 11HECC数据错。 20HNEC磁盘控制器片出现错误。 40H无效的查找操作。 80H延时,没有响应。 AAH没准备好。 BBH发生错误,定义不正确。 CCH写错误。 E0H寄存器错误。 FFH磁盘检测失败。475H字节硬盘设备数。476H字节磁盘适配器控制。477H字节硬盘适配器端口。478H字节测试打印机0的超时值。479H字节测试打印机1的超时值。47AH字节测试打印机2的超时值。47BH字节测试打印机3的超时值(PS2型除外)。47CH字节测试0号RS232超时值。47DH字节测试1号RS232超时值。47EH字节测试2号RS232超时值。47FH字节测试3号RS232超时值。480H字指向存放键盘输入字符的循环缓冲区首址。482H字指向存放键盘输入字符的循环缓冲区尾址。484H字节显示字符的列数。其值为显示字符的列数减1(EGA以上有效)。485H字每个字符高度(EGA以上有效)。487H字节显示控制状态(EGA以上有效)1。 位 0光标仿真模式状态(1为开启)。 1单色显示系统状态(1为启用)。 2保留。 3显示系统空闲状态(1为空闲)。 4保留。 6-5显存容量(00=64K,01=128K,10=192K,11=256K)。 7显示模式可用状态。488H字节显示控制状态2(EGA以上有效)。 位 0SW1(1=关闭) 1SW2(1=关闭) 2SW3(1=关闭) 3SW4(1=关闭) 4? 5? 6? 7?489H字节显示控制状态3(MCGA或VGA有效)。 位 0VGA模式状态 1灰度模式状态 2单色显示状态 3使用默认模式 4-- 5保留 6显示状态开关 7-- 值 位7位4 0 0350线模式 0 1400线模式 1 0200线模式 1 1保留48AH字节显示适配器DCC索引。48BH字节最后磁盘数据率。 位 3-0保留。 5-4步进时间。 7-6数据传输率。48CH字节硬盘状态。48DH字节硬盘错误。48EH字节硬盘中断标志。48FH字节位0为1,表示硬盘和软盘使用一个控制卡。490H字节驱动器0介质状态。491H字节驱动器1介质状态。492H字节驱动器0的起始状态。493H字节驱动器2的起始状态。494H字节驱动器0磁道数。495H字节驱动器1磁道数。496H字节键盘类型和方式,各位含义为: 位 0E1H隐含码最后。 1E0H隐含码最后。 2右Ctrl键按下。 3右Alt键按下。 4101/102键盘 5若读标识和键盘,则强置Num Lock。 6最后的字符是第一个ID字符。 7读键盘的ID。497H字节键盘标志。 位 0-2LED状态位。 3保留。 4收到消息。 5重发接收标志。 6方式指示器更新。 7键盘传送错误标志。498H双字等待完成标志的偏移地址。49AH双字用户等待计数(低位字),以微秒为单位。49EH字用户等待计数(高位字),以微秒为单位。4A0H字节RTC等待激活标志。80表示等待时间已过。4A1H7字节这7个字节用于局域网。4A8H双字这双字指向保存视频系统的指针表。指针表格式为:偏移值 类型 指向
00H DD 视频参数
04H DD 参数保存区
08H DD 字母字符集
0CH DD 图形字符集
10H DD 第二个保存指针表
14H DD 保留
18H DD 保留
第二个指针表格式为:
偏移值 类型 功能或指向
00H DW 这个表的字节
02H DD 组合码表
06H DD 第二个字母字符集
0AH DD 用户调色板表
0EH DD 保留
12H DD 保留
16H DD 保留
4ACH8字节保留。4B4H字节键盘NMI控制标志(可变)。4B5H双字键盘中断中标志(可变)。4B9H字节端口60单字节队列(可变)。4BAH字节最后的键盘扫描码(可变)。4BBH字节NMI缓冲头位置(可变)。4BCH字节NMI缓冲头位置(可变)。4BDH16字节NMI扫描码缓冲(可变)。4CEH字日期计数(可变)。4F0H16字节?
延伸阅读
BIOS 数据区的结构及其利用
IBM 及其兼容机,在低内存地址中,存放着一系列关键的数据,比如从 0000:0000h---0000:03ffh 是中断向量表,存放着所有中断的当前入口地址,而从0040:0000h---0040:00ffh 是非常重要的BIOS数据区,共256个字节, 内部存放着有关键盘、视频显示器、磁盘、打印和通讯口等工作情况的重要数据。计算机在启动时通过对各硬件设备的检测,把有关配置情况的数据和一些系统默认值添入其中,同时它也在一定程度上控制着计算机系统的正常工作。了解其结构,可以认识计算机是怎样运行的,并且,正确地利用BIOS数据区中的部分内容,也将为我们工作带来一定的方便。用debug可以方便地查看此区域的内容:
c:/debug
-d 40:0 L90 ;列出90H个数据的内容
-d 40:8 L4 ;列出第8个字节开始的4个字节内容,0040:0000 BC 03 78 03 ;两个打印口地址。
下面举例说明怎样正确利用BIOS数据区。
一、40:08h 处数据的利用
此处的八个字节为四个并行口地址,即打印口地址,如果只有两个并行口,前两个字节一般应为03BCH 和 0378H,后面的四个字节为0。目前有些病毒破坏此处地址,使打印机联不上,了解上述原理后,如果恢复其正确地址,就可使打印机正常工作。另外有些汉卡或汉字系统出现故障时,也发生类似的情况,也可采用上面的办法解决。也就是说,当打印机联系不上时,检查并恢复此处地址,往往起到事半功倍的效果。基于此原理,如果想防止他人使用打印机(如学生实习等),也可以采取修改此处数据的办法,从而起到保护打印机的目的。具体作法如下:
c:/debug
-E 40:08 BC 03 ;修改为正确的地址,恢复打印。
-E 40:08 00 00 ;修改为其它值,禁止打印。
如果在开机后实现自动禁止使用打印机,可采用下面的办法形成一个可执行文件:
c:/debug
-A 100
381E:0100 MOV AX,0040
381E:0103 MOV DS,AX
381E:0105 MOV SI,0008
381E:0108 MOV WO[SI],0000
381E:010C INT20
381E:010E
-N noprt.com
-R CX
CX:0000
:E
-W
把此文件NOPRT.COM安装在主批处理之中即可。
二、40:13H 处数据的利用
此处的两个字节为此系统的基本内存容量,显示方法同上。对于640K基本内存的机器来说,正常时此处应为0280H,转换为10进制后为640K,其它机器可能是512K或256K等,某些引导型病毒先于DOS驻留内存,就采用了修改此字节的方法,使系统容量减少几K个字节,防止DOS查找,建立自己的安乐窝。此类病毒都可以通过查看此处数据是否正常而被发现。例如被火炬病毒感染时,此处就减少1K字节,而变为639K。
三、40:17H处数据利用
此处为键盘状态字节,当按下某些特定键时,此单元数据的相应位会发生变化,它的8位各对应一个按键,此键按下时对应位为1,否则为0,对应关系如下:
0:右Shift
1:左Shift
2:Ctrl
3:Alt
4:Scrol-Lock
5:Num-Lock
6:Caps-Lock
7:Insert
此字节即反应当前按键状态,也可控制这些键的状态,强制某位为1时,则系统认为此键已经按下。下面的例子,形成一人Cap.com文件,运行它就会使大写指示灯点亮。
c:/debug
-A
381E:0100 MOV AX,0040
381E:0103 MOV DX,AX
381E:0106 MOV SI,0017
381E:0108 MOV BYTE PTR[SI],40
381E:010B INT 20
381E:010D
-n Cap.com
-r CX
CX:0000
:D
-W
- BIOS数据区和其他固定数据区
- BIOS数据区和其他固定数据区
- BIOS数据区和其他固定数据区
- BIOS 数据区说明
- sql插入某些固定数据和其他子查询结果
- 结构和其他数据形式
- 重复数据删除:固定和可变长度数据块
- DSP/BIOS 实现实时数据调试和交换
- DSP/BIOS 实现实时数据调试和交换
- TClientDataSet和其他数据集的区别
- JsonObject 和其他类型数据的转换
- C -- 结构和其他数据形式
- ContentProvider和其他应用共享数据
- 第十四章 结构和其他数据形式
- C语言结构和其他数据形式
- C 结构和其他数据形式
- 删除固定时间内数据。
- 给固定地址写入固定的数据
- RESTful API 设计指南
- V4L2文档翻译(三)
- Princeton Algorithms: Part 1 [week 5: Geometric Searching Applications of BSTs]
- URL POST提交为没有变量名的json串格式
- SQL Server--> 问题处理 --> sql server 错误: 18456,严重性: 14,状态: 38
- BIOS数据区和其他固定数据区
- 使用libusb编译两点注意事项
- Android退出App相关技术总结
- PKU1861Kruskal算法
- 解决Eclipse出现OutOfMemory错误
- Eclipse/MyEclipse下使用SVN的用户名和密码删除
- 离散化 usaco Shaping Regions (rect1)
- poj 3278 Catch That Cow(广搜)
- V4L2文档翻译(四)