Чем компилить прогу, которая будет запускаться без операционной системы в РМ?

Тема в разделе "WASM.ASSEMBLER", создана пользователем zStorm, 7 окт 2005.

  1. zStorm

    zStorm New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    44
    Адрес:
    Ukraine
    В даном случае вопрос стоит поставить поконкретнее-чем компилить операционную систему? Boot сектор компилил на TASM, перекидывал в начало винта с помощью WinHex. Щас пишу ядро, которое должно запускатьса уже в готовом PM в модели памяти flat(переход в PM берет на себя загружчик). Если ядро компилить в масме с использованием .model flat, то создаеться ехе, в котором все оффсеты смещены на 00401000h(проверено дизасемблеров W32Dasm v10), а com файл, в котором оффсеты>=100h возможен только с .model tiny

    Или следует сразу написать свой ассемблер, который будет компилить проги для моей оськи, кинуть его на подопытный винт и заставить загружчик загружать его вместо ядра? А потом с его помощью накодить оську на голом месте?



    Просто было нечем заняться, вот и решил замутить сначала бут-сектор, а потом меня как затянуло...
     
  2. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    nasm, fasm должны компилять в bin

    без особого формата
     
  3. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    FASM рулит давным давно! В нем можно все очень легко заделать и не мутить с какими-то там масм'овскими моделями, и, конечно же, там же можно и оффсет выставить спокойно через org 0



    На нем кажется MenuetOS пишется, если не ошибаюсь
     
  4. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    ...почти в один момент
     
  5. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    я для бута писал на фасм одно удовольствие какие угодно орги и в бин.
     
  6. zStorm

    zStorm New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    44
    Адрес:
    Ukraine
    Спасибо за советы.

    Посмотрел я на фасм, вроде просто супер. Особенно радует не привязанность компилируемого файла к какой-то платформе, да еще и исходники вместе с компилером идут...Зашибись.

    Но ко мне опять подкралась недоверчивость, не поверил что оффсеты там можно выставить любые. Опасения оправдались.

    Код:



    format binary

    use32

    org 7c00h

    mov eax,some_data



    some_label:

    jmp some_label

    some_data db 0h



    Что выдал W32Dasm v10:



    :00000000 B8077C0000 mov eax, 00007C07

    :00000005 EBFE jmp 00000005

    :00000007 0000 add dh, bh



    Во второй строчке по идее должно было быть записано jmp 00007c05h, а с оффсетом на some_data в первой строке все вроде в порядке. Я так и не могу понять-ето можно как-то исправить, указать компилеру что org должен действовать и на оффсеты на код, или придетьса все время писать в проге строчки типа

    jmp some_label+7c00h



    Тестировал етот пример и на фасм 1.58 и на 1.64

    Если знаете, как исправить ситуацию помогите pls, а то расставаться с таким прекрасным компилером из-за оффсетов на код не хочеться



    nasm еще не пробовал. А вещь стоящая?
     
  7. zStorm

    zStorm New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    44
    Адрес:
    Ukraine
    Вроде я понял в чем проблема... :)

    Ето не фасм пишет jmp 00000005h ,а дизасемблер в качестве операнда указывает оффсет в файле :)

    Или я не угадал?
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    zStorm

    Угадал, дело в том, что дизассемблер не может знать, какая база у кода. Либо берёт из заголовка её, либо нужно указывать вручную. Например, в Hiew - Ctrl+Shift+F5
     
  9. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    zStorm

    не вижу тут особой проблемы. Раз это просто бинарник, ну и откомпили его как .com обыкновенный, а там ужо внутри и настроишь все сегменты и всё что нужно, если к тому же это ядерный модуль. Вообще посмотри как в винде сделано, сначала загрузчик br загружет ntloader, который в свою очередь явлеяется ничем иным, как односегментным бинарником, устанавливает защищённый режим, готовит память, и потом уже загружает ntoskrnl.exe и всё остальное, потому как понимает pe формат. Сделай многоэтапную загрузку, раз так хочется, ну а если нет, то только вариант, который я тебе сказал, с обыкновенным .com файлом.
     
  10. Twilight

    Twilight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    6


    Не угадал. это именно фасм пишет (как впрочем и другие ассемблеры), так как для near jmp - операндом служит смещение относительно текущего адреса.
     
  11. Storm

    Storm New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    3
    Адрес:
    Ukraine
    8) яссно

    Спасибо всем за ответы