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

ext int 13

楼主#
更多 发布于:2001-12-28 15:32
请问如何用DPMI 调用扩展的int 13中断?
我已经用int 31调用int 13读写<8g硬盘成功。但是现在要完成〉8g的硬盘读写,所以我选用ext int 13,但是如何调用ext int 13实现呢?
多谢!!!
Laura
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-12-28 16:45
INT 13H,
AH = 4X的为扩展INT13
根据DPMI的调用约定将参数一一填写后就可以调用扩展INT13.
但是推荐用IOS调用.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
ycxu
驱动牛犊
驱动牛犊
  • 注册日期2001-10-08
  • 最后登录2002-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-12-29 15:10
我用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
游客

返回顶部