![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Shults99 |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вопрос: Как определить из программы загружен Турбо Паскаль в память или нет? Знаю, что он грузится в младшие адреса памяти и, по-моему сюда DSeg:0000.
Но как вычислить там он или нет - увы? Thnki -------------------- |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Shults99, другими словами, ты хочешь выяснить, запущена ли твоя программа из IDE Турбо Паскаля или без него?
|
Shults99 |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
Да. Програ запущена как exe-шник уже скомпилированный или из среды Turbo Pascal
-------------------- |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Тогда ты этого сделать скорее всего не сможешь. Только разве что по объему доступной кучи: MemAvail (IDE забирает часть кучи под свои нужды)...
|
Shults99 |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Верхняя граница памяти DOS HeapEnd -->----------------------------- ¦ ¦ ¦ свободная память ¦ ¦ ¦ HeapPtr -->¦............................¦ ¦ динамически распределяемая ¦ ¦ область памяти ¦ ¦ (растет вверх) ^ ¦ HeapOrg -->+----------------------------+<-- OvrHeapEnd ¦ оверлейный буфер ¦ +----------------------------+<-- OvrHeapOrg ¦ стек (растет вниз) v ¦ SSeg:SPtr -->¦............................¦ ¦ свободный стек ¦ SSeg:0000 -->+----------------------------+ ¦ глобальные переменные ¦ ¦............................¦<------- ¦ типизированные константы ¦ ¦ DSeg:0000 -->+----------------------------+ ¦ ¦ кодовый сегмент ¦ ¦ ¦ модуля System ¦ ¦ ¦............................¦ ¦ ¦ кодовый сегмент ¦ ¦ ¦ первого модуля ¦ ¦ ¦............................¦ ¦ L----------------------------- содержимое . кодовый сегмент . образа . других модулей . файла .EXE ----------------------------- ¦ ¦............................¦ ¦ ¦ кодовый сегмент ¦ ¦ ¦ последнего модуля ¦ ¦ +----------------------------+ ¦ ¦ кодовый сегмент ¦ ¦ ¦ главной программы ¦ ¦ +----------------------------+<-------- ¦ префикс сегмента программы ¦ ¦ (PSP) ¦ PrefixSeg -->L----------------------------- -------------------- |
Shults99 |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
на рисунке отсюда (сорри, не копируется нормально )здесь
показан же внизу PrefixSeg...? "содержимое файла .EXE" - это и есть скомпилированный exe файл? Проверить там что-то есть или нет - и фсё ![]() -------------------- |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата(Shults99 @ 27.06.05 20:08) "содержимое файла .EXE" - это и есть скомпилированный exe файл? Проверить там что-то есть или нет - и фсё ![]() Но это ТВОЙ EXE-файл, то есть твоя программа !!! Какое отношение она имеет к IDE Турбо Паскаля? Она запускается и ей передается управление... Все, что касается "сегментов кода" и "сегментов данных" и к чему ты имеешь доступ через CSeg/DSeg имеются в виду именно сегменты твоей программы. О существовании IDE она даже не догадывается... |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Хотя есть одна идея:
begin Запусти эту программу из IDE и без нее. Чувствуешь разницу? ;) |
Guest |
![]()
Сообщение
#9
|
Гость ![]() |
Я запускаю с вставкой
Код begin writeln(paramstr(0)); readln end. и без неё и получаю разные ответы. Такое же я получаю и без этой вставки, когда запускаю из среды ТР и просто exe файлом. Можь я что-то не понимаюю.. ![]() |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Так напиши сюда, что ты получаешь с этой "вставкой" из IDE, и что - при самостоятельном запуске EXE файла... И попробуй догадаться в чем разница...
|
Guest |
![]()
Сообщение
#11
|
Гость ![]() |
ok
|
Shults99 |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
:D :D
Кажется, проблема решена... Ну, что же.. препады сами узнают новый подход.. Но всё-таки если говорить о чистоте экперимента, то я не "удовлетворил" препадов. Вот текст задачи: (сначала предлагается запустить прогу из IDE и экзешником и увидеть различия, а потом - ) "допишите оператор, определяющий наличие Турбо Паскаля в оперативной памяти и выдающий соответствующее выражение на экран: "Турбо Паскаль загружен" или "Турбо Паскаль не загружен"" 4 тоже хорошая оценка. В учебнике дается таблица, где показано заполнение памяти и ссответствующие идентификаторы. Системные программы======== Указатели Ещё не распределенная память== HeapEnd Динамически распределяемая=== HeapPtr Оверлейный буфер ========= HeapOrg -/- -/- Сегмент данных основной===== Sseg:SPtr программы -/- -/- ===========сегменты модуля (команд на них не написано) Турбо Паскаль Системные программы =====младшие адреса памяти Сообщение отредактировано: Shults99 - 29.06.2005 6:02 -------------------- |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 2:01 |