![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Farhod |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 25.3.2002 |
Чем отличается exe файл от com файла ?
|
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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. |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль |
А какому формату (и при каких условиях) надо отдать предпочтение?
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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. |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago |
А нельзя ли с этого места подробнее? -------------------- 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 |
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва |
Когда 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. |
|||
|
||||
![]() ![]() ![]() |
Правила раздела «Флейм» | |
|
Добро пожаловать в «Флейм». В разделе не действуют многие правила:
Строго запрещено:
Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт. Глас Винграда:
Глас Философии:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Флейм | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |