Код для работы с Ж\Д и сопутствующие вопросы от незнайки

Тема в разделе "WASM.BEGINNERS", создана пользователем ajak, 17 авг 2009.

  1. ajak

    ajak New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2007
    Сообщения:
    463
    Код (Text):
    1. ; Пример 9.2. Чтение и сохранение в файле главного загрузчика жесткого диска
    2. text    segment            
    3. assume  cs:text, DS:data   
    4. begin:  mov AX,data    
    5.     mov DS,AX
    6. ;Чтение главного загрузчика
    7.     mov AH,02h      ;(1) Функция чтения секторов  
    8.     mov AL,1        ;(2) Прочитаем 1 сектор
    9.     mov CH,0        ;(3) Номер цилиндра
    10.     mov CL,1        ;(4) Номер сектора
    11.     mov DH,0        ;(5) Номер поверхности
    12.     mov DL,80h      ;(6) Код жесткого диска
    13.     mov BX, offset mboot; Буфер для прочитанного
    14.     int     13h     ;(7) Переход в BIOS
    15. ; Создадим файл для сохранения прочитанного
    16.     mov AH,3Ch      ;(8) Функция DOS создания файла
    17.     mov CX,0        ;(9) Файл будет без атрибутов
    18.     mov DX,offset fname ;(10) Смещение имени файла
    19.     int 21h     ;(11) Переход в DOS
    20.     mov BX,AX       ;(12) Сохраним в BX дескриптор файла
    21. ; Запишем в файл данные из буфера mboot
    22.     mov AH,40h      ;(13) Функция записи в файл
    23.     mov CX,512      ;(14) Число выводимых байтов
    24.     mov DX, offset mboot;(15) Смещение буфера
    25.     int 21h     ;(16) Переход в DOS
    26. data segment           
    27. mboot   db 512 dup(0)       ;
    28. fname   db 'mboot.dat',0    ;
    29. data    ends
    30.        
    31. stk segment stack  
    32.     db 256 dup(0)  
    33. stk     ends       
    34.  
    35.     end begin
    Хотелось бы получить ответ на интересные для меня вопросы
    1) Почему это код выкидывает с ошибкой- доступ в винту закрыт
    2) Что нужно сделать чтобы получить доступ к винту
    3) Винда обращается к такой же функции BIOS при работе или она использует для этого порты в/в.
    4) Как ещё программно можно управлять винтом не черз BIOS номер 13
     
  2. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    1. Потому что под windows нельзя получить доступ к загрузочному сектору жесткого диска. К дискете - без проблем.
    2. Запустить программу под чистым ДОСом, например, с дискеты.
     
  3. wasm_test

    wasm_test wasm test user

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

    Порты. Биос не используется (почти, вроде).
    Написать код под винду, а не под дос
     
  4. ajak

    ajak New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2007
    Сообщения:
    463
    А в винде его вообще никак не запустить чтоль :"(
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Легко, в Win98.
     
  6. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    ajak
    Берешь дискету, создаешь загрузочный диск MS-DOS,
    (правой кнопкой на значке дискеты в проводнике).

    потом записываешь на него свою программу, загружаешься с него.
     
  7. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    Ну из под винды можно работать с дисками как с файлами....Открыл/записал/закрыл...Правда Виста и 7-ка уже закрыли ету возможность,но ХРю на 3-м паке нормально пишет куда надо.

    Код (Text):
    1. WCHAR      Name[] = L"\\\\.\\C:";     // вроде так нужно путь указать
    2. DWORD      RetLen;
    3.  
    4.         Buffer = (PWORD)malloc( 32*1024 );   // сюда пишем что записать то хочем на диск
    5.     hFile =CreateFile(
    6.                 Name,
    7.                 GENERIC_READ | GENERIC_WRITE,
    8.                 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
    9.                 NULL,
    10.                 OPEN_EXISTING,
    11.                 0,
    12.                 0);
    13.  
    14.     WriteFile(                  
    15.                 hFile,
    16.             Buffer,
    17.             32*1024,
    18.             &RetLen,
    19.             NULL );
    20. CloseHandle( hFile );
     
  8. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    сори не заметил что для ДОСа вопрос был....