На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 11 / Восстановление программ на языке Бейсик из памяти Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Восстановление программ на языке Бейсик из памяти

Проводили ли вы когда-нибудь широкие и объемные работы с какой-нибудь программой, используя интерпретатор с языка Бейсик, чтобы потом обнаружить, что после тестирования программы встроенная команда "Return to MS-DOS" (Возврат в операционную систему MS-DOS) завершила работу интерпретатора до того,как вы успели сохранить программу на диске? Если программа короткая (в 20 строк или меньше), это небольшое огорчение, но вот если программа длинная, непредвиденное завершение работы интерпретатора - беда.


Как только мы сможем заняться восстановлением потерянного текста из памяти, мы должны будем сразу же заняться и восстановлением "потерянных" программ на языке Бейсик, потому что они должны целиком располагаться в памяти для удобства работы с ними интерпретатора. А для тех интерпретаторов, которые всегда имеют дело с нормальными текстовыми программа в коде ASCII, применяются описанные ранее технические средства по восстановлению текста из памяти. Но это не относится к интерпретаторам, которые имеют дело с программами, работающими в "защищенном" режиме или с так называемыми, "лексемными" программами. Лексемные программы с точки зрения интерпретатора представляют собой последовательность шестнадцатиричных значений команд и абсолютных целых значений. Так как программа в коде ASCII состоит из ряда двухцифровых ASCII - значений для каждого символа или числа, это значительно увеличивает размер файла.


Интерпретаторы с языка Бейсик фирмы "Майкрософт" - "Microsoft BASIC" и фирмы "ИБМ" - "IBM BASIC" являются самым распространенными примерами интерпретаторов, работающих с лексемными программами. И хотя эти интерпретаторы могут читать программы в стандартном формате в коде ASCII, по умолчанию они находятся в состоянии работы с лексемными программами. Интерпретаторы преобразуют программу в коде ASCII, который затем загружается интерпретатором. Проблема, связанная с попыткой восстановления потерянной лексемной программой на языке Бейсик в памяти, заключается в том, что в действительности невозможно ее расшифровать при помощи команды D (отобразить на экране) из программы, отладки DEBUG. Поэтому следует пользоваться другим методом.


В предложенном ниже примере показано, как следует восстанавливать программу, используя интерпретаторы с языка Бейсик фирмы "Майкрософт" и "ИБМ" в персональном компьютере IBM PC. Для других интерпретаторов языка Бейсик или для других персональных машин требуются разновидности этой же процедуры, но представленный ниже пример предлагает несколько советов по решению проблемы восстановления программ в других персональных компьютерах.


Сразу же после потери программы первым шагом должна быть загрузка программы DEBUG. Согласно техническому руководству на эту систему адрес сегмента на языке Бейсик (места, где начинается наша программа) может быть найден в позиции 0050:0010. Используйте команду D для вывода на экран дисплея первых двух значений этого адреса. Эти значения меняются в зависимости от версии операционной системы MS-DOS, версии интерпретатора языка Бейсик и размера памяти в вашей системе. Изучите предложенный ниже исходный текст программы и пояснения.


A>debug
-d 0050:0010 l2
0050:0010 73 6B    - адрес сегмента на языке Бейсик
-d 6b73:30 l2 - изучить сегмент (изменить на обратные байты)
6B73:0030 EF 11    - это начальный адрес потерянной программы
-f 6b73:11ee l1 ff - введите значение FF в начальный адрес  (поте-
   рянной  программы  со смещением) - 1 (и снова
   измените на обратные два  начальных  адресных
   байта)
-d 6b73:358 l2 - найти конечный  адрес  (потерянной  программы  со
   смещением 0358)
6B73:0358 88 12    - это конечный адрес
-h 1288 11ee - вычислить количество байтов,  используемых програм-
   мой (то же изменить  на  обратный  2-байтовый
   конечный адрес)
2476 009А - второе число представляет собой разность,  а  следова-
   тельно - длину программы
-r cx      - загрузить длину программы в регистр СХ CX000
-n  %test.bas       - задать характеристику файла, в которой
   должна сохраняться программа
-w 6b73:11ee -    записать байты, начиная с начала адреса программы
Запись 009A байтов
-q     - возврат в операционную систему MS-DOS
A>

После того, как вы вернулись на подсказку MS-DOS, проверьте восстановленный файл, загрузив его в интерпретатор с языка Бейсик и выведя его на экран. Содержимое файла должно остаться без изменений.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz