无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 2874|回复: 3
打印 上一主题 下一主题

[求助] 扩展INT13H调用

[复制链接]
跳转到指定楼层
1#
发表于 2012-5-21 11:05:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
扩展INT13H的调用,在网上找了很多资料,但是测试时总不能成功。

看了下 1JF9Y (井底蛙)的汇编源代码,SI 用于指向 磁盘地址数据包 ,但网上的资料全部是 DS:DI 指向磁盘地址数据包。网上的资料是错的吧???

我在虚拟机VM中启动DOS,用DEBUG跟踪,测试时,把DS:SI指向我构造的磁盘地址数据包,能成功把硬盘第一扇区读到 0:7C00处,但是尝试读硬盘 1 扇区时,总也不成功,把 7C 改成7F也能读到7F00处。但是改成别的总也不成功。 用DEBUG的D命令显示内存,看不到想要的内容,但看寄存器的返回值,INT13成功执行了。

以下是磁盘地址数据包的示例:  
10 00 01 00 00 7c 00 00 00 00 00 00 00 00 00
资料上 10 00 是固定的 01表示块大小,暂时指定为1块(扇区)  00 00 7C 00 是内存缓冲区,此处是如何表示的? 是 00 00 : 7C 00 这样吗? 改7C为7F是成功的,但是改成 00 00 7C FF 之类的总也不成功?

还有把后面的 00 00 00 00 00 00 00 00 硬盘地址尝试改成 01 00 00 00 00 00 00 00 试图读1扇区,不改动7C00的缓冲区也不成功是怎么回事?
2#
发表于 2012-5-21 11:29:15 | 只看该作者
第一个问题,如果我没记错的话,DI 是错的,SI 是正确的。

第二个问题,00 7C FF 00 就是 00FF:7C00,而 00 00 7C FF 就是 FF7C:0000,所以,是你自己汇编基础概念含糊不清造成的。

第三个问题,读扇区 1 失败,有点意外。这可能是 BIOS 的 bug。你可以试试从扇区 0 开始读,读两个扇区,这样就有可能绕过 BIOS 的 bug。
回复

使用道具 举报

3#
 楼主| 发表于 2012-5-21 14:18:16 | 只看该作者
磁盘地址数据包 Disk Address Packet (DAP)
    DAP 是基于绝对扇区地址的, 因此利用 DAP, Int13H 可以轻松地逾
越 1024 柱面的限制, 因为它根本就不需要 CHS 的概念.
    DAP 的结构如下:


struct DiskAddressPacket   {
    BYTE PacketSize; // 数据包尺寸(16字节)
    BYTE Reserved;    // ==0
    WORD BlockCount; // 要传输的数据块个数(以扇区为单位)
    DWORD BufferAddr; // 传输缓冲地址(segment:offset)
    QWORD BlockNum;    // 磁盘起始绝对块地址
};

多谢不点的回复,在此表示感谢。
是我太粗心了,搞错了DAP的结构,所以才会犯低级的错误。
要传输的数据块个数类型是 WORD,自己测试的时候一直把它当成了BYTE 。 所以后面的数据缓冲区地址跟磁盘起始绝对块地址全部搞错了。  

在看1JF9的源码时,仍然因为粗心没有找到问题的根本原因,一直以为 00 00 7C 00表示的是缓冲区地址,实际上 最前面的00 跟01 00是一起的 用于表示传输的数据块的个数, 00 7C 00 00 这样表示的才是缓冲区地址,导致了误会。 基础的东西还是没有问题的,只是一开始测试总也不成功,后来看1JF9的源码时,注意到了SI,然后就直接用1JF9的地址包给测了一下,当时并没注意到自己到地址包的定义理解有误。
回复

使用道具 举报

4#
 楼主| 发表于 2012-5-21 14:23:26 | 只看该作者
10 00 01 00    00 7c 00 00   00 00 00 00 00 00 00 00

这样才是正确的磁盘地址数据包。
10 00 前两个字节是固定的。
01 00 两个字节(WORD) 用于表示要传输的数据块个数 以扇区为单位
00 7C 00 00 : 数据缓冲区地址,  偏移地址:段地址 ,低位在前,高位在后。
00 00 00 00 00 00 00 00 : 8字节,用于表示硬盘绝对地址(LBA地址)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-7-10 13:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表