Соответствие ассемблер - FREE PASCAL

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
G_A_L
незнакомец
Сообщения: 8
Зарегистрирован: 17.02.2010 20:19:59

Соответствие ассемблер - FREE PASCAL

Сообщение G_A_L »

Есть ли версия ассемблера( отдельного ) для трансляции в объектный код, понимаемый FREE PASCAL, <имя модуля>.obj подключается в модуле на FREE PASCAL опцией {$L <имя модуля>.obj} . Все в среде MS DOS. Исходный текст ассемблерных файлов оттранслирован неизвестным ассемблером, но легко подключается классическим борланд паскалем. Сам FREE PASCAL не понимает объектный код файла <имя модуля>.obj.
SII
новенький
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Сообщение SII »

Классический Борланд Паскаль использует объектники формата OMF, который в 16-разрядной системе был стандартом. В 32-разрядных Виндах стандартом является COFF, ну а в Линухе -- ELF, хотя в Винде существует и OMF32 (но его вроде только Турбо Ассемблер производить умеет, а он уж миллион лет как не поддерживается). По всей вероятности, Фри Паскаль просто не понимает столь древний код.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

.obj это объектный формат данных компиляторов Borland (Turbo Assembler, C/C++). Если есть документация на .obj файлы, то можно попробовать прикрутить их поддержку в компилятор.

FreePascal использует объектный формат данных GNU tools (с расширением .o). Такие файлы создаются ассемблером 'as', входящим в комплект Cygwin и MinGw
SII
новенький
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Сообщение SII »

Ну, вот и объяснение. ГНУсные инструменты клепают Эльфы, а не ОМФ. Описание ОМФ нагуглить не проблема, а вот прикрутить поддержку...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Эльфы только в линуксе. Для винды GNU as производит самый натуральный coff, хоть и с расширением .o.
SII
новенький
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Сообщение SII »

Ну, всё равно не ОМФ, а Борланд Паскалю именно он нужен.
G_A_L
незнакомец
Сообщения: 8
Зарегистрирован: 17.02.2010 20:19:59

Сообщение G_A_L »

Да . . . . Мне бы без си и windows , переранслироваться в MS DOS. А так , правильно ли, что сейчас уже нельзя ничего найти для MS DOS, чтобы перевести ассемблерную программу в объектный код для FREE PASCAL? С уважением, ответьте
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Если программа написана на 16-битном ассемблере для MS-DOS, то скорее всего она без полного переписывания не состыкуется с 32-битным FPC, даже если удастся найти подходящий по выходном формату транслятор.
Аватара пользователя
and
постоялец
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Сообщение and »

Я запутался: так исходник asm есть? Или только obj?
Если исходник есть, то не вариант ли вставить его как asm-процедуру (-ы)?
G_A_L
незнакомец
Сообщения: 8
Зарегистрирован: 17.02.2010 20:19:59

Сообщение G_A_L »

Для вставки в исходный текст приходится перерабатывать исходный текст достаточно много для процедуры- сам модуль резко увеличивается в размерах. Да и программа требует переработки для ассемблерной вставки.
А есть ли досовский ассемблер 32 - разрядный с объектным кодом, который понимает Free Pascal?
И еще одна странность - в win2000 запуск и трансляция во free pascal модуля проходит нормально- без ошибок, при запуске той же оболочки под ms dos в формате записи (record) появляются ошибки, не позволяющие продолжить трансляцию дальше.
Если есть ассемблер под ms dos 32- разрядный , где его можно поискать.
SII
новенький
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Сообщение SII »

ДОС -- 16-разрядная система, никаких 32-разрядных трансляторов там никогда и не было. Позднее появились расширители ДОС, но это уже надстройки над системой. В любом случае, 16-разрядный код просто так 32-разрядным не станет, нужна ручная переделка.
Ответить