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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чем отличается exe файл от com файла ? 
:(
    Опции темы
Farhod
Дата 18.4.2002, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 25.3.2002




Чем отличается exe файл от com файла ?
PM MAIL   Вверх
Chingachguk
Дата 18.4.2002, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва




com-файл состоит из одного сегмента, в котором располагаются данные, код и стек. Это наиболее простая и удобная модель памяти, не требующая от операционной системы при загрузке почти ничего, кроме помещения по выровненному на параграф адресу кода и передачи управления на точку cs:100h. Идея унаследована от оси CP/M и в каком-то виде существует в современной flat-модели для Windows, Unix... Грубо говоря, программа как бы работает на процессоре с 64K памяти и находится в этой памяти одна ;)

exe-файл позволяет иметь дело с таким понятием, как "сегмент". Логически разделенные куски памяти, например разные блоки данных, находятся в разных участках памяти("сегментах"). Под дос это именно так и есть, а вот для win-программ exe-файл с точки зрения кода - это тот же com-файл, но содержащий множество информации по адресам системных функций и т.д.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
neutrino
Дата 18.4.2002, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль




А какому формату (и при каких условиях) надо отдать предпочтение?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Chingachguk
Дата 18.4.2002, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва




Все зависит от задачи.

Если речь идет о дос, то com файл легче писать, он более удобен для понимания, меньше настраивать адреса, ... Особенно он хорош для небольших утилит, драйверов, небольших программ, резидентов, вирусов - словом, там, где Вам нужен полный контроль над выполнением программы.

Для небольших задач (например, программа сбора данных с установки, подключенной к компьютеру, архиватор, нестандартный поиск в файлах, математические расчеты) пригодны как com-файлы, так и exe с моделью памяти small(один сегмент кода и один для данных + стек). Собственно, паскалевский LARGE-exeшник без собственных юнитов или оверлеев и есть такая модель(грубо говоря). Принципиальной разницы между com и exe в этом случае я не вижу ;)

Для задач, требующих больших массивов для обработки подходит модель с одним сегментом кода и несколькими - данных.

Для тяжелых интерфейсных программ, например БД, обычно используют многомодульный(многосегментный) вариант exe-файла. Те же игры с большим количеством информации типа doom.

Однако следует помнить, что из простого com-файла можно организовать, выделяя память, сколько угодно новых сегментов как кода, так и данных.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Vit
Дата 18.4.2002, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago




Цитата(Chingachguk @ 18.4.2002, 08:15)
Однако следует помнить, что из простого com-файла можно организовать, выделяя память, сколько угодно новых сегментов как кода, так и данных.

А нельзя ли с этого места подробнее?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Chingachguk
Дата 18.4.2002, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва




Цитата

Vit Дата сообщения: 18.4.2002,17:40
Цитата (Chingachguk @ 18.4.2002,08:15)
Однако следует помнить, что из простого com-файла можно организовать, выделяя память, сколько угодно новых сегментов как кода, так и данных.

А нельзя ли с этого места подробнее?


Когда com-файл получает управление, вся доступная память принадлежит ему. Допустим, если он попытается прочитать значение доступной памяти, то получит 0.

С помощью функций DOS:

       mov  ah,48h
       mov  bx,0100h
       int  21h                ; Try to allocate 1000h bytes

Он может выделить (занять) память, получив сегментный адрес ее в случае успеха(фактически, как пишут в си, MK_FP(seg_of_New_Block,0) ) - получить указатель с нулевым смещением на выделенный блок (вот почему существует модель HUGE).

Он также может и поменять его размер с помощью ф-ции 4ah int 21h DOS, указав опять-таки сегмент, полученный ранее... Может освободить занятые блоки.

Теперь мы имеем полный набор функций для работы с динамической памятью: можем управлять этими блоками. Например, нам нужен массив длиной 10000 байт - что ж, мы выделяем такой блок и работаем с ним через дальный указатель (то, что в паскале записывается как ^p).

С кодом сложнее, но не намного. Допустим, мы хотим исполнить некоторый код, оформленный как com-файл и сохраненный на диске. Наши действия:

- Освобождаем всю память, выданную нам DOS, оставляя себе необходимое место, например - 5 килобайт. Не забывем о стеке - его тоже надо перенести;
- Выделяем блок размером в 64K, получив сегмент его от DOS;
- Загружаем по указателю (Seg,100h) весь ком-файл с диска;
- Передаем управление на точку seg:100h.

Следует заметить, что указанные действия выполнить гораздо проще через специальную ф-цию дос 48h - Execute Program. Для этого надо всего лишь освободить память и вызвать ее.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила раздела «Флейм»
Sneg0k

Добро пожаловать в «Флейм».

В разделе не действуют многие правила:

  • Можно оффтопить(умеренно)
  • Можно общаться на темы, не только связанные с программированием.

Строго запрещено:

  • Размещать рекламу
  • Обсуждать политику
  • Оскорблять друг-друга и переходить на личности
  • Наезжать, провоцировать других участников форума
  • Материться
  • Троллить

Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт.


Глас Винграда:


Глас Философии:


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Флейм | Следующая тема »


 




[ Время генерации скрипта: 0.0698 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.