OSDev

для всех
Текущее время: 27 апр 2024, 16:36

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 26 янв 2013, 13:24 

Зарегистрирован: 24 авг 2011, 19:12
Сообщения: 15
Ребят, не знал где точно на форуме тему создать, так что пишу тут.
У меня проблема над которой бьюсь уже N дней времени ...
Не могу создать корректно lib файл используя пакет masm для работы в MS-DOS 6.22
Пробовал разные версии masm. Так же разные ключи для утилит ml.exe lib.exe и так далее.
Может знает кто как правильно создать lib файл для реального режима адресации (16-bit) и как подключить его в главном модуле программы?
Хочу чтобы в итоге было:
main.asm - исходник главного модуля
mylib.asm - исходник процедур которые подключаются из главного модуля директивой includelib
На выходе хочу получить *.exe файл который запускается под MS-DOS

Что я не делал пишет то invalid library, то на сегменты ругается, то ... короче HELP большими буковками!
Покажите как правильно написать простейшую прогу HELLO WORLD! на примере двух модулей. Желательно с указанием на важные и ключевые моменты чтобы я нуб понял смысл =)

Заранее спасибо!
P.S.
Книжки листал, ничего путного не нашел.
Google так же.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 янв 2013, 13:55 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Подробностей не помню, ибо давно уже не пишу под ИА-32...

Чтобы иметь возможность собрать программу из нескольких объектных модулей, в исходниках надо пользоваться директивами PUBLIC и EXTERN, описания их в документации точно есть, поэтому приводить не буду. Далее исходники транслируются МАСМом, в результате получаются объектные файлы. После этого все объектники скармливаются компоновщику (линкеру), и он уже делает из них EXE, DLL, COM или какой там он может (и попросите у него) файл.

Пакет МАСМ уже давно не поддерживает создание 16-разрядных программ. Когда я последний раз его использовал (лет 5 назад, наверное), сам транслятор был способен транслировать 16-разрядные программы, но компоновщик связать их уже не мог, поэтому я пользовался сторонним компоновщиком -- UniLink'ом. Возможно, библиотеки создать не удаётся по той же причине: библиотекарь может "забыть", как работать с 16-разрядным кодом.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 янв 2013, 14:03 

Зарегистрирован: 24 авг 2011, 19:12
Сообщения: 15
Возможно вы правы, потому что для 32 - битных программ всё получается. А вот с 16 проблеммы (((
Интересно, как то же тот же Кип Ирвин транслировал свои программы в Irvine16.lib )))
Буду дальше ломать голову, очень хочется пописать под DOS )
А на счёт объектных файлов, это да, так можно. Сначала транслировать в obj несколько файлов, а потом в exe. Так то получается.
Спасибо вам за ответ.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 янв 2013, 15:18 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Может, он пользовался более древней версией?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 янв 2013, 16:27 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Я под DOS, тем более на masm'е сто лет не писал. Но если следовать простой логике, то это должно выглядеть примерно так:
Код:
masm mylib.asm;
lib mylib.lib +mylib.obj;

masm main.asm;
link main.obj;

В исходниках, как сказал SII, естественно пользуемся директивами public/extrn.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 янв 2013, 17:27 

Зарегистрирован: 24 авг 2011, 19:12
Сообщения: 15
Я сейчас попробую...в смысле, попробую с extrn и public директивами. Но, вообще то, мне кажется, что по умолчанию все процедуры являются public если я пользуюсь упрощенными директивами .model small .code .data и .stack хотя я не уверен. Пойду пробовать


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 янв 2013, 17:40 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Иди читай документацию.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 янв 2013, 17:44 

Зарегистрирован: 24 авг 2011, 19:12
Сообщения: 15
pavia писал(а):
Иди читай документацию.

Какой раздел и какой именно документации?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 янв 2013, 14:38 

Зарегистрирован: 24 авг 2011, 19:12
Сообщения: 15
Вопрос открыт, пока положительных результатов нет (
Как получить 16 разрядную lib у ??? (какими средствами, ключами, директивами и тд и тп)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 янв 2013, 17:00 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Возьми версию 6.11 отсюда
http://old-dos.ru/files/file_122.html
В этом пакете есть все нужные утилиты, включая LIB.EXE

Поверх него можншь поставить обновление Update 6.11-6.11d
Она работает под DOS.
Файл Update 6.11-6.14 это обновление до версии 6.14, он компилирует программы для DOS и Windows, но сам работает только под Windows.
Я лично работал только с TASM, про MASM ничего сказать не могу.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB