阅读:1214回复:2
ext int 13
请问如何用DPMI 调用扩展的int 13中断?
我已经用int 31调用int 13读写<8g硬盘成功。但是现在要完成〉8g的硬盘读写,所以我选用ext int 13,但是如何调用ext int 13实现呢? 多谢!!! |
|
|
沙发#
发布于:2001-12-28 16:45
INT 13H,
AH = 4X的为扩展INT13 根据DPMI的调用约定将参数一一填写后就可以调用扩展INT13. 但是推荐用IOS调用. |
|
|
板凳#
发布于: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 有什么错误吗?多谢指点! |
|
|