FASM+COFF+USE16 - не получается

Тема в разделе "WASM.ASSEMBLER", создана пользователем NeTxXx, 25 июн 2006.

  1. NeTxXx

    NeTxXx New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    11
    проблема:
    Код (Text):
    1.  
    2. format coff
    3. org 0
    4.  
    5. extrn _cstart
    6. public start as '_start'
    7. use16
    8. start:
    9. call _cstart
    10. jmp $
    11.  




    фасм ругается на call _cstart: error: invalid use of symbol.



    че за на? если use32 то все ок. а так...

    и еще, если пробую определять секции:

    section '.text' code

    и section '.data' data

    и обращаться из кода к данным (типа mov bx,szMsg),

    то при use16 он так же орет.. (вроде как на размерность)



    так как тогда использовать COFF с use16?

    и вообще, мне нужно вперемешку, т.е. часть кода у меня под 16, а чать под 32 бита
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Т.к. use16 находится после обьявления секции, получается что 16-битный код находится внутри 32-битной секции плоского сегмента. use16 нужно вписать в обьявление секции.





    COFF по умолчанию устанавливает 32-битный режим и use32 тут просто ничего не значит.





    Сомневаюсь, что это вообще возможно в классическом COFF, т.к. многие линкеры не воспринимают смешанные секции. Лучше собирай сразу MZ. А ещё лучше покопайся на форуме фасма в ветке DOS.
     
  3. NeTxXx

    NeTxXx New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    11
    МЗ конечно хорошо, но не приемлимо в моем случае

    расскажу суть проблемы:

    есть загрузчик на асме. он подготавливает дескрипторы для защищенного режима, переходит в него, загружает все сегменты селекторами тех дескрипторов (4гб лимит) а потом назад в реальный (т.е. уже в unreal).. потом мне бы хотелось уже начать писать на си (вызывая часть функций из кода этого загрузчика). сишный код соответственно должен быть 16-битный (юзаю turbo c пока). а вот в загрузчике идет такая смена разрядности: 16-32-16.. позже будет еще раз 32 (после загрузки сишным модулем ядра по адресу ~1-2 мб уже окончательно перейду в pmode и сделаю far jump на код ядра). вот такие вотъ пироги.

    посоветуйте че плз. мнеб хотелось как в Cottontail Bootloader тока чтоб в любой адрес памяти мог грузить