*** RESOURCE *** Вашему вниманию предлагается краткое описание программы RESOURCE. Сразу хочется отметить, что это описание является результатом, проб и оши- бок в попытке разобраться в программе RESOURCE.COM. Таким образом, некоторые утверждения могут оказаться ошибочными, а назначение многих функций, на момент создания этой инструкции, осталось неразгаданным. В настощее время известно, как минимум, две версии программы, которые хранятся в файлах с именами RESOURCE.COM и DIZAS.COM. Первый файл, по всей видимости, является оригинальной версией программы, а второй частично руси- фицированной. В дальнейшем речь будет идти об оригинальной версии. Программа RECOURCE, в дальнейшем ПРОГРАММА, является дизассемблером и позволяет получить текстовый файл в формате ассемблера. Как это сделать, будет рассмотрено на примере получения текстового файла из широко распостра- ненной программы DIR.COM. После запуска программы, выводится ее название и верхняя граница свободной памяти. Программа распологается в ОЗУ с адреса 100Н по 1700Н. Область памяти с адреса 1700Н по адрес 1DF3H является служебной: с адреса 1DF4H начинается область ОЗУ, используемая под таблицу меток. Файл, который мы хотим дизассемблировать, должен быть предварительно загружен в свободную область ОЗУ. Для этого перед загрузкой необходимо ука- зать смещение, для этого служит команда О<значение>. Для нашего примера, зададим О3000. Теперь все команды чтения, записи, просмотра и редактирования памяти будут выполнятся со смещением 3000Н. Например, командa D100 выведет на экран область памяти, начиная с адреса 3100Н (100Н + 3000Н). Величину смещения можно узнать по команде . В третьей строке будет указано: OFFSET=<значение>. В нашем примере: OFFSET=3000. Теперь мы можем загрузить файл DIR.COM в память, для этого необ- ходимо выполнить команду: RDIR.COM. Первый символ является признаком команды, остальные именем файла. Следует отметить, что имя следует зада- вать полностью, причем программа нормально загружает только файлы с рас- ширением COM., при задании других расширений, выдается сообщение об ошибке. После загрузки файла в ОЗУ, выводятся два значения в шестнадцати- ричном виде, для нашего примера: 3500 0500. Первое значение указывает физический адрес конца файла в ОЗУ + 1 байт, второе значение является логическим адресом и обычно указывает на конец программы в ОЗУ + 1 байт, так, если бы она была загружена с адреса 100Н. Теперь мы можем начать подготовительные операции к созданию тек- стового файла. Сначала необходимо создать таблицу меток командой: В100,500. После задания этой команды на экран будет выведен текст файла DIR.COM в дизассембрированном виде, и некоторые метки, одновременно будет создава- ться таблица меток в ОЗУ. По окончании выполнения этой команды можно убе- диться в том, что таблица меток создана командой . В первой строке будет указано: SYMTBL=1DF4 208C (для нашего примера). Второе значение указывает физический адрес конца таблицы меток в ОЗУ. В начале оба значе- ния были равны 1DF4. Тут сразу необходимо отметить, что таблица меток может "залезть" на область ОЗУ, где хранится основной файл, что сделает дальнейшую работу невозможной, поскольку никакого контроля не производиться, пользователь сам должен следить за тем, чтобы этого не произошло. В случае необходимости таблицу меток можно удалить, командой: Х. При этом будет выведен дополнительный запрос, на который необходимо отве- тить , если вы хотите подтвердить свое решение. Вторым шагом является выделение текстовых сообщений в теле файла. Для этого даем команду: А100,500. На экране снова появляется весь будущий ассемблерный текст, но теперь уже со всеми метками, а все текстовые сооб- щения, которые были найдены, преобразуются в формат типа: DB 'RESOUSE',0DH,0AH,1AH Иногда этот режим приводит к некоторым ошибкам в отделении текстовых сообщений от исполняемых кодов, но их обычно легко исправить впоследствии любым текстовым редактором. Если ошибок слишком много, то можно попробовать сначала выделить текст, заданием команды А, а затем расставить метки. Теперь у нас все готово для непосредственного создания текстового файла на диске. Даем команду: SDIR.ASM. Первый символ, признак команды, а остальные являются именем файла. Следует отметить, что программа требует задания имени файла только с расширением .ASM. Теперь следует быть внимательным, так как большинство информации, выводимой на экран, будет записано в файл, открытый командой . Например, двойное задание команды L100, запишет два раза один и тот же текст в файл, что в дальнейшем приведет к ошибке. Сразу даем команду: P100,500. Это приведет к записи в создаваемый нами файл следующего текста: ORG 0100H L0000 EQU 00H L0001 EQU 01H L0003 EQU 03H L0005 EQU 05H L000C EQU 0CH L000F EQU 0FH L0040 EQU 40H L005C EQU 5CH L0080 EQU 80H L00F1 EQU F1H L0500 EQU 0500H L0501 EQU 0501H L0502 EQU 0502H L0503 EQU 0503H L0505 EQU 0505H L0507 EQU 0507H L0509 EQU 0509H L050B EQU 050BH L0541 EQU 0541H L054D EQU 054DH Значение первой строки понятно, в остальных строках собраны все метки, которые не вошли в диапазон, заданный командой <Р>, то есть являются внешними метками по отношению к телу основного файла. Вы, наверное, уже заметили ошибку, допушенную программой. В строке с меткой L00F1 в колонке параметров пропущен 0. Таких ошибок может быть несколь- ко, но они обычно легко устраняются текстовым редактором. Теперь необходимо вывести в файл основной текст. Делаем это командой: L100,500. В результате в файл DIR.ASM записывается следующий текст (в сокра- щенном варианте): LXI H,L0000 ;0 DAD SP SHLD L050B ;050BH LXI SP,L054D ;054DH MVI C,19H CALL L0005 ;5 STA L0501 ;0501H ...... L0498: ;0498 DB 0DH,0AH,'DISK:' L049F: ;049F DB ' FILES:' L04A9: ;04A9 DB ' ENTRIES:' L04B8: ;04B8 DB ' (' L04BD: ;04BD DB ' LEFT) SPACE USED:' L04D4: ;04D4 DB ' (' L04DB: ;04DB DB ' LEFT)',0DH,0AH,0AH DB '$' L04EA: ;04EA DB 0,0 L04EC: ;04EC DB 0,0 L04EE: ;04EE DB 0,0 L04F0: ;04F0 DB 'M' DCR B L04F2: ;04F2 DB 0 L04F3: ;04F3 DB 0,0 L04F5: ;04F5 DB 0,0 L04F7: ;04F7 DB 0,0 L04F9: ;04F9 DB 0,0 L04FB: ;04FB DB 0,0 L04FD: ;04FD DB 0,0 L04FF: ;04FF DB 0 L0500: ;0500 END Создание файла закончено, и его осталось только закрыть, командой: Z. После этого можно выйти из программы с помощью клавиши F4 и продолжить работу, используя другие программные средства. Как уже отмечалось выше, со многими командами пока не удалось разо- браться, и в конце описания необходимо кратко перечислить команды, работа- ющие, но не описанные здесь: D - вывод дампа памяти на экран; М - просмотр и редактирование памяти. Для тех, кто пожелает разобраться в работе остальных команд, могу сде- лать небольшую подсказку. В теле программы RESOURCE.COM, с адреса 1E5H по адрес 252H находится блок анализа команды, по первому символу командной строки. На этом описание закончено. Желаю успешной работы. 25.04.93 г. Шернин И.Г. г. Харьков.