上文已经讲了如何得到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