- 12-5 -
его содержимое. Позже вы можете объединить этот файл с другими
частями восстанавливаемого файла при использовании вашего тексто-
вого процессора.
Но что мы должны делать, когда не весь потерянный текст можно
найти в памяти ОЗУ? Текстовый редактор WordStar, подобно боль-
шинству других программ обработки текстов, постоянно перемешивает
текст, то занося его в память, то выводя его из памяти по мере ва-
шей работы с редактируемым текстом. Если вы редактируете уже су-
ществующий файл, скажем, файл с именем TEST.TXT, текстовый редак-
тор WordStar создает некий файл с именем TEST.$$$, которое исполь-
зуется для хранения нового отредактированного текста. После того,
как вы закончили редактирование и сохранили результаты своей рабо-
ты на диске, программа переименовывает файл TEST.TXT в TEST.BAK
(производя запись поверх старого файла TEST.BAK, если таковой су-
ществовал), а файл TEST.$$$ никогда не будет виден в каталоге в
момент возврата в операционную систему MS-DOS. Если, однако, прог-
рамма завершится аварийно, вы обнаружите файл с именем TEST.$$$ в
каталоге. Если нельзя будет найти весь текст в памяти, используя
программу DEBUG, проверьте содержимое файла с расширением $$$ на
наличие в нем остального текста. Если нельзя сразу же определить
состояние вашего файла из непосредственного просмотра каталога,
возможно, вам придется обратиться к дисковой утилите (такой, как
"Norton-утилита" или "Ultra_утилита", описанные в предыдущей гла-
ве), которая может отображать скрытую на диске информацию прежде,
чем делать это. Однако, проверьте состояние диска программой
CHKDSK. Это позволяет вам узнать, есть ли на диске какие-либо пе-
ремешанные кластеры. Если такие кластеры появились на диске после
неудачно проведенного сеанса редактирования, часть потерянного
текста может оказаться в этих потерянных кластерах. Вы можете
восстановить их, задав параметр /F в команде CHKDSK, но делать это
нужно только после того, как проверили содержимое памяти ОЗУ и
сохранили перепутанный текст на диске.
Как было замечено выше, способы, которыми различные программы
текстовой обработки и текстового редактирования используют память,
сильно отличаются друг от друга. Все они работают с разными ад-
ресами в памяти. Одни занимают больше места в памяти, чем другие.
Некоторые программы требуют множества областей памяти для работы с
текстом, которые иногда называют "буферами", что еще больше услож-
няет работу. Если, однако, вы никогда раньше не пытались восста-
навливать смешанные данные из памяти, представленные выше примеры
предоставят вам полезные для этого инструменты и средства.
Восстановление программ на языке Бейсик из памяти
Проводили ли вы когда-нибудь широкие и объемные работы с ка-
кой-нибудь программой, используя интерпретатор с языка Бейсик,
чтобы потом обнаружить, что после тестирования программы встроен-
ная команда "Return to MS-DOS" (Возврат в операционную систему
MS-DOS) завершила работу интерпретатора до того,как вы успели сох-
ранить программу на диске? Если программа короткая (в 20 строк или
меньше), это небольшое огорчение, но вот если программа длинная,
непредвиденное завершение работы интерпретатора - беда.
Как только мы сможем заняться восстановлением потерянного
текста из памяти, мы должны будем сразу же заняться и восстановле-
нием "потерянных" программ на языке Бейсик, потому что они должны
целиком располагаться в памяти для удобства работы с ними интерп-
- 12-6 -
ретатора. А для тех интерпретаторов, которые всегда имеют дело с
нормальными текстовыми программа в коде 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А - второе число представляет собой разность, а следова-
тельно - длину программы
- 12-7 -
-r cx - загрузить длину программы в регистр СХ CX000
-n %test.bas - задать характеристику файла, в которой
должна сохраняться программа
-w 6b73:11ee - записать байты, начиная с начала адреса программы
Запись 009A байтов
-q - возврат в операционную систему MS-DOS
A>
После того, как вы вернулись на подсказку MS-DOS, проверьте
восстановленный файл, загрузив его в интерпретатор с языка Бейсик
и выведя его на экран. Содержимое файла должно остаться без изме-
нений.
Заключение
В данной главе были представлены некоторые средства, которые
можно использовать для восстановления данных, перемешанных в памя-
ти. Два описанных типа программ - интерпретаторы с языка Бейсик и
текстовые процессоры/текстовые редакторы - чаще всего использу-
ются в таких работах, когда данные теряются в памяти. Аналогичные
проблемы с другими программами, такими как, например, администра-
торы баз данных или программы связи, могут часто решаться с приме-
нением этих средств. Если вы теряете важные данные в памяти из-за
каких-то причин, отличных от сбоя питания или сброса системы, за-
траты вашего времени на предварительное изучение средств восста-
новления данных окупятся с лихвой.
ЧАСТЬ IV. СОВМЕСТИМОСТЬ
Глава 13. РАЗЛИЧИЯ В ВЕPCИЯХ MS-DOS
Общие рекомендации по совместимости
Прерывания MS-DOS
Вызов функций
Коды ошибок
Форматы дисков
Управление файлами
Операционная система MS-DOS
Персональный компьютер фирмы "ИБМ" IBM PC и персональный
компьютер фирмы "ИБМ" IBM PS/2
Совместимость с другими операционными системами
Заключение
Со времени появления первой версии операционной системы
MS-DOS в 1981 году разработка операционных систем продолжалась в
сторону расширения ее возможностей по подключению новых аппарат-
ных сред, решения проблем исправления ошибок и общего улучшения
ее работы.
Несмотря на то, что многие из этих улучшений привели к повы-
шению производительности вычислительных средств, они одновременно
оказались причиной нескольких осложнений, поскольку не все новые
функции были совместимы со старыми версиями операционной системы
MS-DOS. Для того, чтобы сохранить на будущее все улучшения, в
этой главе собрана информация, призванная помочь вам определить
совместимость разных версий операционной системы MS-DOS между со-
бой. Особенно полезна информация, содержащаяся в этой главе, для
тех, кто занимается разработкой собственных программ на языке Ас-
семблер.
За исключением тех команд, которые по своей природе являются
инструментами программистов (такие команды, как команда отладчика
DEBUG и команда редактора связей LINK), новые и расширенные ко-
манды операционной системы MS-DOS сравнительно редко используются
программистами. Изменения, представляющие собой особенный интерес
для программистов, включают в себя прерывания MS-DOS, вызов функ-
ций, коды ошибок, форматы гибких и жестких дисков и управление
файлами. Понять все указанные изменения довольно легко, поскольку
обращения к функциям присутствуют во всех реализациях любой из
версий операционной системы MS-DOS.
Что касается некоторых других моментов (таких, как управле-