Вопрос: Как определить из программы загружен Турбо Паскаль в память или нет? Знаю, что он грузится в младшие адреса памяти и, по-моему сюда DSeg:0000. Но как вычислить там он или нет - увы? Thnki
volvo
27.06.2005 23:46
Shults99, другими словами, ты хочешь выяснить, запущена ли твоя программа из IDE Турбо Паскаля или без него?
Shults99
27.06.2005 23:54
Да. Програ запущена как exe-шник уже скомпилированный или из среды Turbo Pascal
volvo
28.06.2005 0:00
Тогда ты этого сделать скорее всего не сможешь. Только разве что по объему доступной кучи: MemAvail (IDE забирает часть кучи под свои нужды)...
Shults99
28.06.2005 0:04
Цитата
Верхняя граница памяти DOS HeapEnd -->----------------------------- ¦ ¦ ¦ свободная память ¦ ¦ ¦ HeapPtr -->¦............................¦ ¦ динамически распределяемая ¦ ¦ область памяти ¦ ¦ (растет вверх) ^ ¦ HeapOrg -->+----------------------------+<-- OvrHeapEnd ¦ оверлейный буфер ¦ +----------------------------+<-- OvrHeapOrg ¦ стек (растет вниз) v ¦ SSeg:SPtr -->¦............................¦ ¦ свободный стек ¦ SSeg:0000 -->+----------------------------+ ¦ глобальные переменные ¦ ¦............................¦<------- ¦ типизированные константы ¦ ¦ DSeg:0000 -->+----------------------------+ ¦ ¦ кодовый сегмент ¦ ¦ ¦ модуля System ¦ ¦ ¦............................¦ ¦ ¦ кодовый сегмент ¦ ¦ ¦ первого модуля ¦ ¦ ¦............................¦ ¦ L----------------------------- содержимое . кодовый сегмент . образа . других модулей . файла .EXE ----------------------------- ¦ ¦............................¦ ¦ ¦ кодовый сегмент ¦ ¦ ¦ последнего модуля ¦ ¦ +----------------------------+ ¦ ¦ кодовый сегмент ¦ ¦ ¦ главной программы ¦ ¦ +----------------------------+<-------- ¦ префикс сегмента программы ¦ ¦ (PSP) ¦ PrefixSeg -->L-----------------------------
Shults99
28.06.2005 0:08
на рисунке отсюда (сорри, не копируется нормально )здесь показан же внизу PrefixSeg...? "содержимое файла .EXE" - это и есть скомпилированный exe файл? Проверить там что-то есть или нет - и фсё
volvo
28.06.2005 0:36
Цитата(Shults99 @ 27.06.05 20:08)
"содержимое файла .EXE" - это и есть скомпилированный exe файл? Проверить там что-то есть или нет - и фсё
Но это ТВОЙ EXE-файл, то есть твоя программа !!! Какое отношение она имеет к IDE Турбо Паскаля? Она запускается и ей передается управление...
Все, что касается "сегментов кода" и "сегментов данных" и к чему ты имеешь доступ через CSeg/DSeg имеются в виду именно сегменты твоей программы. О существовании IDE она даже не догадывается...
volvo
28.06.2005 0:49
Хотя есть одна идея:
begin writeln(paramstr(0)); readln end.
Запусти эту программу из IDE и без нее. Чувствуешь разницу? ;)
Guest
28.06.2005 10:58
Я запускаю с вставкой
Код
begin writeln(paramstr(0)); readln end.
и без неё и получаю разные ответы. Такое же я получаю и без этой вставки, когда запускаю из среды ТР и просто exe файлом. Можь я что-то не понимаюю.. Вообще-то здесь не надо мудрить и искать сложные ответы. Прога из заданий контрольной работы техникума )))
volvo
28.06.2005 11:44
Так напиши сюда, что ты получаешь с этой "вставкой" из IDE, и что - при самостоятельном запуске EXE файла... И попробуй догадаться в чем разница...
Guest
28.06.2005 12:24
ok
Shults99
29.06.2005 9:11
:D :D Кажется, проблема решена... Ну, что же.. препады сами узнают новый подход..
Но всё-таки если говорить о чистоте экперимента, то я не "удовлетворил" препадов. Вот текст задачи: (сначала предлагается запустить прогу из IDE и экзешником и увидеть различия, а потом - ) "допишите оператор, определяющий наличие Турбо Паскаля в оперативной памяти и выдающий соответствующее выражение на экран: "Турбо Паскаль загружен" или "Турбо Паскаль не загружен"" 4 тоже хорошая оценка. В учебнике дается таблица, где показано заполнение памяти и ссответствующие идентификаторы. Системные программы======== Указатели Ещё не распределенная память== HeapEnd Динамически распределяемая=== HeapPtr Оверлейный буфер ========= HeapOrg -/- -/- Сегмент данных основной===== Sseg:SPtr программы -/- -/- ===========сегменты модуля (команд на них не написано) Турбо Паскаль Системные программы =====младшие адреса памяти
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.