|
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的地址包给测了一下,当时并没注意到自己到地址包的定义理解有误。 |
|