阅读:1166回复:1
ABOUT ext int 13
我用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 多谢指点! |
|
|
沙发#
发布于: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 |
|
|