BIOS的磁盘读取
2010-07-10 11:00
218 查看
在真正的操作系统引导过程中,由于BIOS的限制,只能从启动磁盘读取512byte的内容到内存中。
这就要求咱们不得不在这512byte中实现加载操作系统内核到内存的代码。
INT 13 是BIOS提供给咱们的读写磁盘的中断服务号。
首先看BIOS在内存中的位置排列:
最初的1M内存,是BIOS使用的。
0x00000 -- 0x003ff: 中断向量表
0x00400 -- 0x004ff: BIOS数据区
0x00500 -- 0x07bff: 自由内存区
0x07c00 -- 0x07dff: 引导程序加载区
0x07e00 -- 0x9ffff: 自由内存区
0xA0000 -- 0xBFFFF: 显示内存区
0xc0000 -- 0xfffff: BIOS中断处理代码
由此可见,有几个选择:在加载引导程序后,可通过引导程序将系统代码加载到:
0x00500 -- 0x07bff or
0x07e00 -- 0x9ffff。 后者的空间更大些。
下面来具体看一下BIOS的磁盘读写中断服务: INT 13,其参数寄存器内容为
AH: function ID, 2--READ
DL: driver ID
CH: 磁头号
CL: sector ID
AL: How many sector will be read
By the way, the aim position is ES:BX. So we need set the value before we start the interrupt.
这就要求咱们不得不在这512byte中实现加载操作系统内核到内存的代码。
INT 13 是BIOS提供给咱们的读写磁盘的中断服务号。
首先看BIOS在内存中的位置排列:
最初的1M内存,是BIOS使用的。
0x00000 -- 0x003ff: 中断向量表
0x00400 -- 0x004ff: BIOS数据区
0x00500 -- 0x07bff: 自由内存区
0x07c00 -- 0x07dff: 引导程序加载区
0x07e00 -- 0x9ffff: 自由内存区
0xA0000 -- 0xBFFFF: 显示内存区
0xc0000 -- 0xfffff: BIOS中断处理代码
由此可见,有几个选择:在加载引导程序后,可通过引导程序将系统代码加载到:
0x00500 -- 0x07bff or
0x07e00 -- 0x9ffff。 后者的空间更大些。
下面来具体看一下BIOS的磁盘读写中断服务: INT 13,其参数寄存器内容为
AH: function ID, 2--READ
DL: driver ID
CH: 磁头号
CL: sector ID
AL: How many sector will be read
By the way, the aim position is ES:BX. So we need set the value before we start the interrupt.
相关文章推荐
- FileInputStream读取磁盘内的文件
- 利用BIOS INT 0x13读取软盘
- 读取磁盘(c#流 文件)
- BIOS系统服务 —— 直接磁盘服务
- Oracle ASM挂载磁盘时读取ASM磁盘头信息,并非读取磁盘路径
- PHP IE下载时提示”无法复制 无法读取源文件或磁盘”的解决办法
- 如何在windows程序中读取bios内容
- ASIHTTPRequest-直接读取磁盘数据流的请求体
- js读取本地磁盘文本文件并保存为JSON数据(有格式的文本)
- win7连接远程桌面问题,无法复制文件,无法读取源文件或磁盘
- CentOS下彻底删除磁盘的bios raid信息
- linux dd读取写入磁盘速度
- Silverligth项目加载问题 无法读取项目文件“SL1201.csproj”。请确认 声明中的路径正确,且磁盘上存在该文件。
- 测试磁盘读取速度
- 无法从系统读取磁盘性能信息
- 测试磁盘随机读取时间
- vxworks for x86读取bios时间的解决方法(转)
- vxworks for x86读取bios时间的解决方法
- SpringMVC从本地磁盘读取图片显示到JSP页面上
- windows下,c /c++实现磁盘扫描,结合配置文件,读取特定后缀文件目录代码