Помощь - Поиск - Пользователи - Календарь
Полная версия: Загружен ли Паскаль?
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Shults99
Вопрос: Как определить из программы загружен Турбо Паскаль в память или нет? Знаю, что он грузится в младшие адреса памяти и, по-моему сюда DSeg:0000.
Но как вычислить там он или нет - увы?
Thnki
volvo
Shults99, другими словами, ты хочешь выяснить, запущена ли твоя программа из IDE Турбо Паскаля или без него?
Shults99
Да. Програ запущена как exe-шник уже скомпилированный или из среды Turbo Pascal
volvo
Тогда ты этого сделать скорее всего не сможешь. Только разве что по объему доступной кучи: MemAvail (IDE забирает часть кучи под свои нужды)...
Shults99
Цитата
Верхняя граница памяти DOS
              HeapEnd  -->-----------------------------
                          ¦                            ¦
                          ¦  свободная память        ¦
                          ¦                            ¦
              HeapPtr  -->¦............................¦
                          ¦ динамически распределяемая ¦
                          ¦      область памяти        ¦
                          ¦      (растет вверх) ^      ¦
              HeapOrg  -->+----------------------------+<--  OvrHeapEnd
                          ¦      оверлейный буфер      ¦
                          +----------------------------+<--  OvrHeapOrg
                          ¦    стек (растет вниз) v  ¦
              SSeg:SPtr -->¦............................¦
                          ¦      свободный стек      ¦
              SSeg:0000 -->+----------------------------+
                          ¦  глобальные переменные    ¦
                          ¦............................¦<-------
                          ¦  типизированные константы ¦        ¦
              DSeg:0000 -->+----------------------------+        ¦
                          ¦  кодовый сегмент          ¦        ¦
                          ¦    модуля System          ¦        ¦
                          ¦............................¦        ¦
                          ¦  кодовый сегмент          ¦        ¦
                          ¦    первого модуля          ¦        ¦
                          ¦............................¦        ¦
                          L-----------------------------    содержимое
                          .  кодовый сегмент          .      образа
                          .  других  модулей        .    файла .EXE
                          -----------------------------        ¦
                          ¦............................¦        ¦
                          ¦  кодовый сегмент          ¦        ¦
                          ¦ последнего  модуля        ¦        ¦
                          +----------------------------+        ¦
                          ¦  кодовый сегмент          ¦        ¦
                          ¦  главной программы        ¦        ¦
                          +----------------------------+<--------
                          ¦ префикс сегмента программы ¦
                          ¦        (PSP)              ¦
              PrefixSeg -->L-----------------------------
Shults99
на рисунке отсюда (сорри, не копируется нормально )здесь
показан же внизу PrefixSeg...?
"содержимое файла .EXE" - это и есть скомпилированный exe файл? Проверить там что-то есть или нет - и фсё huh.gif
volvo
Цитата(Shults99 @ 27.06.05 20:08)
"содержимое файла .EXE" - это и есть скомпилированный exe файл? Проверить там что-то есть или нет - и фсё huh.gif

Но это ТВОЙ EXE-файл, то есть твоя программа !!! Какое отношение она имеет к IDE Турбо Паскаля? Она запускается и ей передается управление...

Все, что касается "сегментов кода" и "сегментов данных" и к чему ты имеешь доступ через CSeg/DSeg имеются в виду именно сегменты твоей программы. О существовании IDE она даже не догадывается...
volvo
Хотя есть одна идея:
begin
writeln(paramstr(0));
readln
end.

Запусти эту программу из IDE и без нее. Чувствуешь разницу? ;)
Guest
Я запускаю с вставкой
Код
begin
 writeln(paramstr(0));
 readln
end.

и без неё и получаю разные ответы.
Такое же я получаю и без этой вставки, когда запускаю из среды ТР и просто exe файлом. Можь я что-то не понимаюю..
smile.gif Вообще-то здесь не надо мудрить и искать сложные ответы. Прога из заданий контрольной работы техникума )))
volvo
Так напиши сюда, что ты получаешь с этой "вставкой" из IDE, и что - при самостоятельном запуске EXE файла... И попробуй догадаться в чем разница...
Guest
ok
Shults99
:D :D
Кажется, проблема решена... Ну, что же.. препады сами узнают новый подход..

Но всё-таки если говорить о чистоте экперимента, то я не "удовлетворил" препадов.
Вот текст задачи: (сначала предлагается запустить прогу из IDE и экзешником и увидеть различия, а потом - ) "допишите оператор, определяющий наличие Турбо Паскаля в оперативной памяти и выдающий соответствующее выражение на экран: "Турбо Паскаль загружен" или "Турбо Паскаль не загружен""
4 тоже хорошая оценка.
В учебнике дается таблица, где показано заполнение памяти и ссответствующие идентификаторы.
Системные программы======== Указатели
Ещё не распределенная память== HeapEnd
Динамически распределяемая=== HeapPtr
Оверлейный буфер ========= HeapOrg
-/- -/-
Сегмент данных основной===== Sseg:SPtr
программы
-/- -/- ===========сегменты модуля (команд на них не написано)
Турбо Паскаль Системные программы =====младшие адреса памяти
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.