MBR с помощью DOS!

Тема в разделе "WASM.ASSEMBLER", создана пользователем Chuvaka4x, 24 мар 2007.

  1. Chuvaka4x

    Chuvaka4x New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2007
    Сообщения:
    15
    У кого-нибудь есть инфа как сделать прогу для чтения MBR с помощью функций DOS (скажем при помощи int25h)?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    mov ah, 2 ; AH = Function (read sectors)
    mov al, 1 ; AL = Number of sectors to read (1-128)
    xor ch, ch ; CH = Cylinder number (0-1023)
    mov cl, 1 ; CL = Sector number (1-17)
    xor dx, dx ; DH = Head number (0-15)
    ; DL = Drive number (0-A:, 1-B:)
    mov dl, 80h ; 80 = first HDD
    mov bx, offset buffer
    int 13h
     
  3. Chuvaka4x

    Chuvaka4x New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2007
    Сообщения:
    15
    По int13h не подходит, BIOS поддерживает только 8gb жестяки.!!!
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    lol, MBR всегда первый сектор. Даже если диск на 100 терабайт, биос сможет прочитать первый сектор
    Читай мануалы...
     
  5. Chuvaka4x

    Chuvaka4x New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2007
    Сообщения:
    15
    Машина виснет!!!!!!!!! Bios поддерживает, но только ее расширенные сервисы, а не int13h! int 25h чтение абсолютного сектора, но как сделать?
     
  6. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    INT 25 читает сектора _логических_ дисков. Если нужна таблица разделов, пользуйте функции BIOS.

    НЕ может такого быть в принципе, т.к. эти функции используются ДОС и всё работает. Читайте доки по прерываниям лучше.
     
  7. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    Chuvaka4x подожжи, подожжи.. int 13 юзают все (которые я встречал) бутсекторы, это получаются у тя они не работают? какая тогда ось? приатач свой mbr
     
  8. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Код (Text):
    1. INT 13 - DISK - READ SECTOR(S) INTO MEMORY
    2.         AH = 02h
    3.         AL = number of sectors to read (must be nonzero)
    4.         CH = low eight bits of cylinder number
    5.         CL = sector number 1-63 (bits 0-5)
    6.              high two bits of cylinder (bits 6-7, hard disk only)
    7.         DH = head number
    8.         DL = drive number (bit 7 set for hard disk)
    9.         ES:BX -> data buffer
    10. Return: CF set on error
    11.             if AH = 11h (corrected ECC error), AL = burst length
    12.         CF clear if successful
    13.         AH = status (see #00234)
    14.         AL = number of sectors transferred (only valid if CF set for some BIOSes)
    Проверьте, всё ли так делаете
     
  9. Chuvaka4x

    Chuvaka4x New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2007
    Сообщения:
    15
    Да!Все так, но висит жестко. DOS 6.22.Win XP SP2. Но какая разница в винде?Если у кого есть рабочий исходник с int 13h - скиньте в ящик.
     
  10. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
  11. Chuvaka4x

    Chuvaka4x New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2007
    Сообщения:
    15
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Chuvaka4x
    смотри мой первый пост
     
  13. Chuvaka4x

    Chuvaka4x New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2007
    Сообщения:
    15
    Не идет!!1Висим!
     
  14. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Код (Text):
    1. ideal
    2. model tiny
    3. codeseg
    4. org 100h
    5. start:
    6.                 mov     bx,offset buffer
    7.                 mov     dx,80h
    8.                 mov     ax,0201h
    9.                 mov     cx,1
    10.                 int     13h
    11.  
    12.                 jc      error
    13.  
    14.                 mov     ah,3Ch
    15.                 mov     dx,offset filename
    16.                 xor     cx,cx
    17.                 int     21h
    18.  
    19.                 jc      error
    20.  
    21.                 mov     bx,ax
    22.                 mov     ah,40h
    23.                 mov     cx,200h
    24.                 mov     dx,offset buffer
    25.                 int     21h                     ; Write file
    26.  
    27.  
    28.                 jc      print
    29.                 mov     ah,3Eh
    30.                 int     21h                     ; Close file
    31.  
    32.                 mov     dx,offset done_msg
    33.                 jmp     print
    34. error:
    35.                 mov     dx,offset err_msg
    36. print:
    37.                 mov     ah,9
    38.                 int     21h
    39.                 ret
    40.  
    41. filename        db      'MBR.DMP',0
    42. done_msg        db      13,10,'Done.$'
    43. err_msg         db      13,10,'*** Error ***$'
    44. buffer          dw      256 dup (?)
    45.  
    46. end     start
    Проверено, работает.
    ЗЫ! Не понимаю, как можно утверждать что эти функции не работают, если твой комп грузится, ДОС и винда работают и ты сейчас здесь.
     
  15. Chuvaka4x

    Chuvaka4x New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2007
    Сообщения:
    15
    А если такую шнягу делать из винды,этта что int13h + драйвер ядра?
     
  16. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    если такую шнягу делать из винды, то CreateFile( "\\\\.\\PhysicalDriveX", ...)
     
  17. pasta

    pasta New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2007
    Сообщения:
    15
    Не может такого быть, любой бутстрап юзает int 13h с ah=02 везде, где только может дотянуться. И если только надо прочитать сектор выше 8 гигов, тогда пользует ext int13.
    Так что "рабочий пример" - посмотреть любой загрузчик, что внесистемный (который в MBR и лежит), что осевые бутстрапы.
    Глянь вот тут: http://wasm.ru/forum/viewtopic.php?id=19756