内核编程:保护模式下读取磁盘绝对扇区

在实模式下,可通过13号BIOS中断读取磁盘扇区。

但保护模式下,中断方式发生改变。中断处理程序的段基址通过IDT表中的描述符得到,而非实模式下的中断向量表。

故保护模式下,已无法使用实模式下的中断处理程序。

磁盘读写属于I/O,可通过直接的IO读写来完成,实际上BIOS的中断处理程序也是这样完成的。

以下是读取磁盘扇区的DEMO代码:

 

#include  " ../plib.h "
#define  Cs 0
#define  Hs 0
#define  Ss 1
#define  READSECTOR_TIMEOUT 10000;


unsigned 
int  readSector(unsigned  long  partitionOffset, unsigned  long  driveNumber, unsigned  long  lba, unsigned  char   * data,  int  limit)
{
    
// print("readSector start=%x ",data);
    lba  +=  partitionOffset;
    
/*
    unsigned short c = lba / (getMaxHead () * getMaxSector ()) + Cs;
    unsigned char h = (lba / getMaxSector ()) % getMaxHead () + Hs;
    unsigned char s = lba % getMaxSector () + Ss;
    print("lba=%lu,c=%u,h=%u,s=%u ",lba,c,h,s);
    return readSector (driverNumber, c, h, s, data, limit);
    
*/
 
    
// print("limit=%d, numberOfSector=%d ",limit, numberOfSector);
    unsigned  in
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值