Boot сектор

Discussion in 'WASM.OS.DEVEL' started by CED2011, Jan 15, 2011.

  1. CED2011

    CED2011 New Member

    Blog Posts:
    0
    Joined:
    Jan 15, 2011
    Messages:
    8
    Как сделать загрузочный сектор, способный загружать простые стандартные COM программы.
     
  2. KIV

    KIV Member

    Blog Posts:
    0
    Joined:
    Jul 16, 2009
    Messages:
    231
    просто загрузить COM программу - легко. достаточно написать функции чтения файлов из ФС.
    другое дело то, что эти программы будут пользоваться int 0x21 для системных вызовов и вам придётся делать свою реализацию DOS.
     
  3. CED2011

    CED2011 New Member

    Blog Posts:
    0
    Joined:
    Jan 15, 2011
    Messages:
    8
    Напишы как ето реализовать
     
  4. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 17, 2003
    Messages:
    2,409
    Location:
    Fryazino
    Ничего трудного.
    Возьми любой код загрузчика, да хоть от виндоуса.

    Прочитать про файлы COM и DOS

    Настраиваешь стек. Читаешь сектора при помощи int 13h.

    Затем настраиваешь сегментные регистры и делаешь jmp NewCS:100h.
    А да не забудь правильно настроить с NewCS:000h по NewCS:FFh.

    А вообще возьми книгу Абель АССЕМБЛЕР И ПРОГРАММИРОВАНИЕ ДЛЯ IBM PC
    Там расписано как загрузить COM файл.
     
  5. Phantom_84

    Phantom_84 New Member

    Blog Posts:
    0
    Joined:
    Jun 6, 2007
    Messages:
    820
    Жи, Ши...

    Все верно, загружаешь com-файл как обычный бинарник с выравниванием минимум на 16-байтную границу, настраиваешь регистры ds, es, и ss с уменьшенным на 256 байт базовым адресом, обнуляешь sp и делаешь push 0, после чего передаешь управление в тот же сегмент по смещению 0x100, предварительно разместив в начале сегмента парковочный код. У меня есть нечто подобное, только не для бутсектора. Для бутсектора будет как-то так:
    Code (Text):
    1. org     7С00h
    2. ; здесь или дальше пишешь код загрузки com-файла по адресу 7E00h
    3. mov     ax, 7D0h
    4. xor     bx, bx
    5. cli
    6. mov     ss, ax
    7. mov     sp, bx
    8. sti
    9. push    bx
    10. mov     ds, ax
    11. mov     es, ax
    12. jmp     7D0h:100h
    13.  
    14. rb      7D00h-$
    15. xor     ax, ax
    16. mov     ds, ax
    17. mov     word [ds:472h], 1234h
    18. jmp     0FFFFh:0
    19.  
    20. rb      7DFEh-$
    21. dw      0AA55h