Помогите пожалуйста прочитать первый сектор с жёсткого диска при помощи функции 42h прерывания int 13h. У меня ни как не получается , может какие то проблемы со структурой пакета дискового адреса . Заранее благодарен за ответ.
Код (Text): ;fasm mov ah,0x42 mov si,EDD_Packet32 int 0x13 ;... EDD_Packet32: EDD32_Size db 0x10 ;размер пакета EDD32_Reserved1 db 0;резерв EDD32_LoadSectors db 1;количество секторов для загрузки EDD32_Reserved2 db 0; резерв EDD32_BufOffset dw 0x800; смещение EDD32_BufSegment dw 0x0; сегмент EDD32_NumberSector dq 0x1; номер сектора EDD_Packet32End: Или вот с MBR Microsoft: Код (Text): ;fasm ;в стеке данные задом на перед. push 0 push 0 push word [bp+0Ah] push word [bp+8] push 0 push 7C00h push 1 push 10h mov ah, 42h ; 'B' mov si, sp int 13h ; DISK - popa
rudik, огромное спасибо за ответ!Но я пишу программу на Tasm когда я переделал твой первый код, зашёл в реальный режим процессора, запустил пошагово в отладчике, и когда у меня выполнилась функция пеня выбрасило с отладчика, и просмотреть содержимое буфера не смог.Может переделал неправильно? buf db 512 dup () EDD_Packet struc EDD32_Size db 10h ;размер пакета EDD32_Reserved1 db 00h;резерв EDD32_LoadSectors db 01h;количество секторов для загрузки EDD32_Reserved2 db 00h; резерв EDD32_BufOffset dw 00h; смещение EDD32_BufSegment dw buf; сегмент EDD32_NumberSector dq 01h; номер сектора EDD_Packet ends EDD_Packet32 EDD_Packet < 10h,00h,01h,00h,offset buf, ,01h> ;структурная переменная .code mov ah,42h mov si,offset EDD_Packet32 int 13h
Не писал на тасме, такшо возможно кг\ам. buf - смещение на 0 елемент твоего масива. тогда в EDD32_BufSegment пойдет не сегмент а смещение. Смещение если в начале данных - 0. В итоге ты читал сектор в 0х0000:0х0000-0х0000:0х0200, где находятся вектора прерывание. Ето и повалило отладчик вместе с досом.
Ура!!!!!Сегодня довольный как слон, получилось считать сектор. DAP struc DAP_Size db 10h ;размер пакета DAP_Reserved1 db 00h;резерв DAP_LoadSectors db 01h;количество секторов для загрузки DAP_Reserved2 db 00h; резерв DAP_BufOffset dw 00h; смещение DAP_BufSegment dw 00; сегмент DAP_NumberSector dq 00h; номер сектора DAP ends .data buf db 512 dup (20h) Packet DAP < 10h,00h,01h,00h,00,00,00h> mov ax,offset buf mov packet.DAP_BufOffset,ax xor ax,ax mov ax,seg buf mov packet.DAP_BufSegment,ax xor ax,ax mov ah,42h mov si,offset Packet int 13h Только остается узнать первый ли это сектор, и по каким адресам что расположено.Огромное спасибо!
Узнать очень просто: скачай WinHEX с cracklab.ru, там есть редактор физических дисков(с удобным разделением на сектора). Посмотри совпадается ли то что ты читаеш с тем что выдаст WinHEX. В 0 секторе находится MBR. Статей по MBR навалом.
Можно и hiew'ом, если он не слишком старый: "hiew \\.\C:" откроет диск C:, "hiew \\.\PhysicalDrive0" - первый физический диск.