ycxu
驱动牛犊
驱动牛犊
  • 注册日期2001-10-08
  • 最后登录2002-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1166回复:1

ABOUT ext int 13

楼主#
更多 发布于:2001-12-29 15:12
我用ah=42h读物理盘,参数已经设置好,但dpmi调用ext int 13不成功或死机,下面是ext int 13 和我对相应参数的设置,是否有错误?谢谢!
INT 13 - IBM/MS INT 13 Extensions - EXTENDED READ
    AH = 42h
    DL = drive number
    DS:SI -> disk address packet (see #00272)
Return: CF clear if successful
    AH = 00h
    CF set on error
    AH = error code (see #00234)
    disk address packet\'s block count field set to number of blocks
    successfully transferred
Format of disk address packet:
Offset    Size    Description    (Table 00272)
00h    BYTE    10h (size of packet)
01h    BYTE    reserved (0)
02h    WORD    number of blocks to transfer (max 007Fh for Phoenix EDD)
04h    DWORD    -> transfer buffer
08h    QWORD    starting absolute block number
        (for non-LBA devices, compute as
        (Cylinder*NumHeads + SelectedHead) * SectorPerTrack +
        SelectedSector - 1
我定义结构体
typedef struct i13ap
{
   BYTE sizeofpacket;
   BYTE reserved;
   WORD numberofblocks;
   DWORD transfer_buffer;
   DWORD LOLBA;
   DWORD HILBA;
}INT13AP;
INT13AP INT13;
INT13.transfer_buffer=(DWORD)lpBuffer;
将该结构体的地址付给ds:si
   callStruct.esi = LOWORD(&INT13);    // Offset of struct buffer
   callStruct.ds  = HIWORD(&INT13);    // Segment of struct
buffer
多谢指点!


Laura
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-12-31 11:53
我猜你错误的原因可能是参数包的内容设置不正确,特别是第一字节的大小域,必须设置为0x10h
typedef struct i13ap
{
   BYTE sizeofpacket;
   BYTE reserved;
   WORD numberofblocks;
   DWORD transfer_buffer;
   DWORD LOLBA;
   DWORD HILBA;
}INT13AP;
INT13AP INT13;
INT13.sizeofpacket=0x10;
INT13.sizeofpacket=0x0;
INT13.numberofblocks=??;
INT13.transfer_buffer=(DWORD)lpBuffer;

//下面的DS:SI的赋值是否正确还看看你的callStruc.si
//这里的DS:SI应该赋给伪变量_DS,_SI

将该结构体的地址付给ds:si
   callStruct.si = LOWORD(&INT13);    // Offset of struct buffer
   callStruct.ds  = HIWORD(&INT13);    // Segment of struct
buffer






Tom_lyd
游客

返回顶部