проблема: Код (Text): format coff org 0 extrn _cstart public start as '_start' use16 start: call _cstart jmp $ фасм ругается на call _cstart: error: invalid use of symbol. че за на? если use32 то все ок. а так... и еще, если пробую определять секции: section '.text' code и section '.data' data и обращаться из кода к данным (типа mov bx,szMsg), то при use16 он так же орет.. (вроде как на размерность) так как тогда использовать COFF с use16? и вообще, мне нужно вперемешку, т.е. часть кода у меня под 16, а чать под 32 бита
Т.к. use16 находится после обьявления секции, получается что 16-битный код находится внутри 32-битной секции плоского сегмента. use16 нужно вписать в обьявление секции. COFF по умолчанию устанавливает 32-битный режим и use32 тут просто ничего не значит. Сомневаюсь, что это вообще возможно в классическом COFF, т.к. многие линкеры не воспринимают смешанные секции. Лучше собирай сразу MZ. А ещё лучше покопайся на форуме фасма в ветке DOS.
МЗ конечно хорошо, но не приемлимо в моем случае расскажу суть проблемы: есть загрузчик на асме. он подготавливает дескрипторы для защищенного режима, переходит в него, загружает все сегменты селекторами тех дескрипторов (4гб лимит) а потом назад в реальный (т.е. уже в unreal).. потом мне бы хотелось уже начать писать на си (вызывая часть функций из кода этого загрузчика). сишный код соответственно должен быть 16-битный (юзаю turbo c пока). а вот в загрузчике идет такая смена разрядности: 16-32-16.. позже будет еще раз 32 (после загрузки сишным модулем ядра по адресу ~1-2 мб уже окончательно перейду в pmode и сделаю far jump на код ядра). вот такие вотъ пироги. посоветуйте че плз. мнеб хотелось как в Cottontail Bootloader тока чтоб в любой адрес памяти мог грузить