Linux(ubuntu)下30天自制os学习引导,第3.1天(如何得到 u盘的chs结构)

本文介绍了在Linux Ubuntu环境下,通过调用Int 13/AH=08h中断来获取U盘的CHS(磁头、柱面、扇区)结构。博主提供了一个程序,通过该程序可以查看U盘的详细CHS信息,并以QEMU软盘为例进行了详细解释。读者可以下载程序并分析U盘的chs数值。
摘要由CSDN通过智能技术生成

上文已经讲了如何得到u盘的drive number,但是且得到这一参数,还不足够实现对u盘的多个扇区的读取,因为你还不知道u盘的一个cylinder有多少个扇区。所以本节就来解决这样的问题,通过调用 Int 13/AH=08h中断,可以知道得到有关u盘的chs结构。

       程序比较容易,只是在写显示寄存器上的二进制时,花了一点时间 。大家只需要把程序下载下来,编译后写到 u盘上运行一下就可以知道自己u盘的chs结构了。下面对Int 13/AH=08h这个中断进行简单介绍

程序伪代码如下:

ah=0x08

dl=drive number

int 0x13

而关于u盘的chs的值则存在于dx,cx中:

dh=max head number(最大的磁头数,对于软盘则是1)

dl=number of drivers(有多少存储个盘,如果只有一个硬盘,就会显示1)

cl=maximum sector number (bits 5-0)  (最大扇区数,注意只有这个字节的 低6位,高2位为cylinder的高2位)

ch=low eight bits of maximum cylinder number(这个是关于u盘的磁道数,对于软盘则是79)

上面这样说明,可能没有画图直观,博主在下面画一个图,更清楚的说明上面参数的意思

上图可以清楚的知道我们的u盘的chs数,下面从运行程序得到数字来看看这样计算是否正常,先上一个qemu模拟软盘时,得到的chs值,因为软盘大家都比较清楚 。

从上图二进制数字中,可以看到软盘的 drive number=dl=0x00

dh代表head 的最的大max number,所以是1 (上图标错了)

cl的低6位代表最大的扇区数,cl=0b 010010 =18

而关于cylinder的数字则是上图中黄色字样: 0b 00  01001111,大家可以把二进制转换成16进制看看,正好是64+15=79


        因为cylinder 和head数是从0开始,而扇区数是从1开始 ,所以 软盘的大小正好是cxhxs=(79+1)x(1+1)x18扇区数

通过上面的分析,大家应该知道怎么使用这个中断得到u盘的chs了,下面上一张从u盘启动时,显示的chs的结果的图片,有时间的读者可以分析一下,博主的这个u盘的大小。

程序就不在这里上了,代码有点多,大家可以到百度云盘上云下载,目录为AboutUSB,运行程序的步骤也有说明

好吧,下节再见!有问题记得加群交流哦!be relax!

博主邮箱cherishsir@gmail.com

qq群:159336168

程序文件照例上传到百度云

帐号:cherishsir@gmail.com
密码:cherish


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值