функция 42h прерывания int 13h.HELP!

Тема в разделе "WASM.BEGINNERS", создана пользователем Leshik88, 22 апр 2008.

  1. Leshik88

    Leshik88 New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2008
    Сообщения:
    5
    Помогите пожалуйста прочитать первый сектор с жёсткого диска при помощи функции 42h прерывания int 13h. У меня ни как не получается , может какие то проблемы со структурой пакета дискового адреса . Заранее благодарен за ответ.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    код?
     
  3. Leshik88

    Leshik88 New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2008
    Сообщения:
    5
    да, нужен код , а то я в своём коде наверное какие то ошибки сделал.
     
  4. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Код (Text):
    1. ;fasm
    2.                
    3.         mov ah,0x42
    4.         mov si,EDD_Packet32
    5.         int 0x13
    6. ;...
    7.        
    8.         EDD_Packet32:
    9.             EDD32_Size db 0x10 ;размер пакета
    10.             EDD32_Reserved1 db 0;резерв
    11.             EDD32_LoadSectors db 1;количество секторов для загрузки
    12.             EDD32_Reserved2 db 0; резерв
    13.             EDD32_BufOffset dw 0x800; смещение
    14.             EDD32_BufSegment dw 0x0; сегмент
    15.             EDD32_NumberSector dq 0x1; номер сектора
    16.         EDD_Packet32End:
    Или вот с MBR Microsoft:
    Код (Text):
    1. ;fasm
    2. ;в стеке данные задом на перед.
    3. push    0
    4.         push    0
    5.         push    word  [bp+0Ah]
    6.         push    word  [bp+8]
    7.         push    0
    8.         push    7C00h
    9.         push    1
    10.         push    10h
    11.         mov ah, 42h ; 'B'
    12.         mov si, sp
    13.         int 13h     ; DISK -
    14.         popa
     
  5. Leshik88

    Leshik88 New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2008
    Сообщения:
    5
    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
     
  6. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Не писал на тасме, такшо возможно кг\ам. buf - смещение на 0 елемент твоего масива.
    тогда в EDD32_BufSegment пойдет не сегмент а смещение. Смещение если в начале данных - 0. В итоге ты читал сектор в 0х0000:0х0000-0х0000:0х0200, где находятся вектора прерывание. Ето и повалило отладчик вместе с досом.
     
  7. Leshik88

    Leshik88 New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2008
    Сообщения:
    5
    Ура!!!!!Сегодня довольный как слон, получилось считать сектор.
    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
    Только остается узнать первый ли это сектор, и по каким адресам что расположено.Огромное спасибо!
     
  8. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Узнать очень просто: скачай WinHEX с cracklab.ru, там есть редактор физических дисков(с удобным разделением на сектора). Посмотри совпадается ли то что ты читаеш с тем что выдаст WinHEX. В 0 секторе находится MBR. Статей по MBR навалом.
     
  9. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Можно и hiew'ом, если он не слишком старый: "hiew \\.\C:" откроет диск C:, "hiew \\.\PhysicalDrive0" - первый физический диск.