Как изменить загрузку с диска на сиди или дивиди?

Тема в разделе "WASM.OS.DEVEL", создана пользователем s2004, 1 дек 2007.

  1. s2004

    s2004 New Member

    Публикаций:
    0
    Регистрация:
    24 апр 2007
    Сообщения:
    12
    Код (Text):
    1. entry _start
    2. _start:
    3. ;--------------------------------------------------------------------------
    4. ; настраиваем регистры, перносим код в другое адресное пространство
    5. ;--------------------------------------------------------------------------
    6.   cli                            ; Запретить прерывания
    7.   xor     ax,ax                  ; Инициализируем следующие
    8.   mov     ss,ax                  ; регистры:
    9.   mov     sp,#0x7C00             ; ax = 0
    10.   mov     si,sp                  ; sp = 0x7C00h
    11.   push    ax                     ; si = 0x7C00h
    12.   pop     es                     ; es = 0
    13.   push    ax                     ; ss = 0
    14.   pop     ds                     ; ds = 0
    15.   sti                            ; Разрешить прерывания
    16.   cld                            ; Установить repne по возрастанию
    17.   mov     di,#0x600              ; di = 0x600
    18.   mov     cx,#0x100              ; cx = 0x100
    19.   repne                          ; Переслать 512 байт в 0:0x600
    20.   movsw                          ; эта пересылка кода нужна, т.к. по этому
    21.                                  ; адресу будет грузится mbr
    22.  
    23.   mov     ax,#_done              ; Это странное преобразование
    24.   add     ax,#0x600              ; нужно только для того, чтобы
    25.   push    ax                     ; продожить выполнение программы,
    26.   ret                            ; но уже по адресу (0x600 + _done)
    27.  
    28. ;--------------------------------------------------------------------------
    29. ; новая точка входа уже по адресу (0x600 + _done)
    30. ; настройка изображеныя, вывод сообщения на экран, ожидание нажатия
    31. ; клавиши пробел
    32. ;--------------------------------------------------------------------------
    33. _done:
    34.   mov     ax,#0x0003              ; установить текстовый режим 80x25
    35.   int     0x10                    ; одновременно это приводит к очистке экрана
    36.  
    37.   mov     ah,#1                   ; делаем невидимым курсор
    38.   mov     cx,#0x2000
    39.   int     0x10
    40.  
    41.   mov     si,#msg_hello + 0x600   ; выводим сообщение на экран
    42.   call    show_str
    43.  
    44. press_key:
    45.   mov     ah,#0                   ; вызывать прерывание обработки
    46.   int     0x16                    ; ввода данных с клавиатуры
    47.   cmp     ah,#0x39                ; это скан-код пробела?
    48.   je      load_mbr                ; если да, то переходим к загрузке
    49.   jmp     press_key               ; иначе, ждём следующего нажатия
    50. ;--------------------------------------------------------------------------
    51. ; загрузка кода mbr жёсткого диска (master::ide0) по адресу 0:0x7c00
    52. ;--------------------------------------------------------------------------
    53. load_mbr:
    54.   mov     ah,#0x02                ; 0x02 - функция чтения с диска
    55.   mov     al,#0x01                ; 0x01 - кол-во считываемых секторов
    56.   mov     bx,#0x7c00              ; es:bx - адрес буфера для операции чтения
    57.   mov     ch,#0x00                ; 0x00 - номер дорожки (цилиндра)
    58.   mov     cl,#0x01                ; 0x1 - номер стартового сектора
    59.   mov     dh,#0                   ; номер головки чтения/записи
    60.   mov     dl,#0x80                ; 0x80 - номер диска (master::ide0)
    61.   int     0x13
    62.   jmp     far 0:0x7c00            ; Передаем управление
    63.  загруженному коду
    64.  
    65. msg_hello:
    66.   .byte   13,10
    67.   .ascii  "Linux Gazette ... сделаем работу с Linux немного веселее!"
    68.   .byte   13,10
    69.   .byte   0
    70.  
    71. show_str:
    72.   lodsb                           ; вывод сообщения на экран
    73.   cmp     al,#0x00                ; в режиме телетайпа
    74.   je      end_show_str            ; переход, если конец
    75.                                   ; сообщения
    76.   push    si                      ; запоминаем указатель
    77.   mov     bx,#7
    78.   mov     ah,#0x0e
    79.   int     0x10                    ; вывод на экран
    80.  
    81.   pop     si                      ; восстанавливаем указатель
    82.   jmp     show_str                ; продолжаем вывод сообщения
    83. end_show_str:
    84.   ret
    и вывод сообщения непроисходит ошибку указывает.
     
  2. wan1786

    wan1786 New Member

    Публикаций:
    0
    Регистрация:
    6 дек 2007
    Сообщения:
    19
    Этот код из биоса?
     
  3. s2004

    s2004 New Member

    Публикаций:
    0
    Регистрация:
    24 апр 2007
    Сообщения:
    12
    Это boot.asm входит в операционку, а всё таки ответа по существу никто не знает или где посмотреть?
     
  4. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    s2004
    а что ты еще ожидал? у тебя же:
    mov dh,#0 ; номер головки чтения/записи
    mov dl,#0x80 ; 0x80 - номер диска (master::ide0)

    это вообще откуда ты такой код откопал?!
    номер загрузочного устройства BIOS тебе уже в dl передаст ;)
    щас взял кнопиха отрыл iso в hiew'е, вот код загрузчика:

    Код (Text):
    1. 0018895: 8816A572                    mov         [72A5],dl
    2. 0018899: B8014B                       mov         ax,04B01 ;"K"
    3. 001889C: 8A16A572                   mov         dl,[72A5]
    4. 00188A0: BE9080                       mov         si,08090 ;"АР"
    5. 00188A3: CD13                         int         013
    6. 00188A5: 725C                         jb          000018903  ---↓ (3)
    надеюсь, принцип ясен? ;)
     
  5. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    в догонку. кури "Bootable CD-ROM Format Specification"
    http://bochs.sourceforge.net/techspec/el-torito.pdf.gz
    на cd/dvd нет mbr ;)
     
  6. s2004

    s2004 New Member

    Публикаций:
    0
    Регистрация:
    24 апр 2007
    Сообщения:
    12
    А вот в чём дело, а я то быть или не быть :)
     
  7. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    s2004
    в твоем коде строка:
    mov dl,#0x80 ; 0x80 - номер диска (master::ide0)

    принудительно грузиться с ide0,
    хотя у меня например загрузочный хард совсем не ide0 ;)
    номер устройства BIOS сама передаст тебе в регистре dx,
    так что париться с этим не нужно ;)

    но вообще в твоем коде прорва ошибок ;)
    если интересно пришлю свою статью о том,
    как писать загрузчики ;)
     
  8. s2004

    s2004 New Member

    Публикаций:
    0
    Регистрация:
    24 апр 2007
    Сообщения:
    12
    Пришли статью с удовольствием прочту.
     
  9. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    http://nezumi.org.ru/zq-asm.MBR.zip
    она не совсем о загрузке c CD, точнее, даже совсем не об этом ;) но...
    а так... бери любой загрузочный CD/DVD и дери оттуда загрузчик. он очень просто дизасмится. сам загрузчик (без знания формата CD) ищется по сигнатуре int 13/jc xx
     
  10. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    kaspersky
    где бы их найти?
     
  11. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    zq-asm.mbr.stuff.zip там же
     
  12. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    спасибо
     
  13. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    kaspersky
    А можно выложить на сервак неархивированные документы? А то у нас на работе прокся блокирует zip, rar, exe. txt, pdf и прочие доки качать могу. gz вроде не блокирует, можно было бы и его.