Voyager #01
06 июля 1998
  Софт  

PROFI CLUB - DD80 - описание дискового ассемблера под CP/M.


Программное обеспечение Описание Ассемблеры

C) A.N.D.Y. 
Music: LASERDREAM (C) Mr.Z/LS (R) DGN 
───────────────────────────────────────────────────


               ╔═════════════╗ 
               ║           ║ 
               ║   DD80    ║ 
               ║           ║ 
               ╚═════════════╝ 


     Дизассемблер DD80 является, пожалуй, самым
мощным среди программ своего класса. Несмотря на
то, что он является консольным и написан для опе-
рационной системы CP/M, его с успехом можно исполь-
зовать и для программ, написанных в других ОС. За
три года использования в своей работе DD80, я дос-
таточно полно изучил его возможности и хочу поде-
литься своим опытом... 


                 *  *  * 


                ИДЕОЛОГИЯ 
                ═══════════ 

     DD80 представляет просто безграничные воз-
можности, чего не может ни один другой дизассемб-
лер. Те, кто работал с подобным режимом в STS, ду-
маю, больше не будут этого делать. :) 
     Принципиальным отличием DD80 является то,
что он при своей работе составляет карту файла. В
этой карте показывается распределение памяти на бло-
ки, которые бывают 3 видов: CODE, DATA, STORAGE.
Первые два объяснять, наверное, не нужно; третий
вид - то, что при ассемблировании объявляется как
DEFS, т.е. зарезервированная область. Эту карту мож-
но записывать на диск и считывать обратно, добав-
лять в нее и удалять из нее куски и т.п. Но об этом
немного позже. Второй приятной особеностью DD80
является полу-, а в некоторых случаях и полностью
автоматический режим работы. Такого я нигде больше
не видел. После составления карты окончательное
дизассемблирование производится на диск в формате
текстового файла с альтернативной кодировкой. Туда
же выводится вся служебная информация. К недостат-
кам программы можно отнести отсутствие какой бы
то ни было работы с половинками индексных регист-
ров. :( Еще сказывается недостаток консольной реали-
зации (нет окон; когда карта состоит из множества
блоков, она скроллируется на два-три экрана и т.д.).


                 *  *  * 


             ОПИСАНИЕ КОМАНД 
             ═══════════════════ 


     После запуска на экране появляется надпись: 




     Дизасемблер готов к вводу команд, состоящих
из трех букв. Список доступных команд можно полу-
чить, набрав HLP. Все команды делятся на пять ти-
пов: 


 1. DISASSEMBLY COMMAND 
 2. MAP AND SYMBOL TABLE COMAND 
 3. FILE DEFINITION COMAND 
 4. FORMAT COMMANDS 
 5. SPECIAL FUNCTION COMMANDS 



         FILE DEFINITION COMMANDS 
         ─────────────────────────── 


     Я не случайно начинаю обзор команд DD80 с
этой группы, несмотря на то, что в HELP'е им отве-
ден 4-й пункт. Эта группа команд выполняет главные
действия, без которых и работа будет невозможна.
Всего здесь пять команд: 


DSK [drive:] filename - присоединить файл. Все вво-
 дится без пробелов; параметр drive: необязателен,
 если файл находится на текущем диске. 

OUT drive: - выбор диска для записи карты и листинга.

EXC addr - установка стартового адреса файла. По
 умолчанию файлы в операционной системе CP/M на-
 чинаются с адреса #0100. 


LOC - actual file location. 

ADR - display input file address. 


            DISASSEMBLY COMMANDS 
            ──────────────────────── 


     14 команд этой группы управляют режимом ди-
зассемблирования программы. 


DAS [adr1] [adr2] - дизассемблирование с выводом на
 экран листинга программы. Если параметр adr2 от-
 сутствует, то процесс завершается, когда будет
 встречена одна из команд JP ADDR, JP (HL), RET,
 HALT. Если пропущен параметр adr1, то дизассемб-
 лирование происходит с текущего адреса. В таком
 случае можно просто нажимать <ESC>. Отработанный
 участок программы будет занесен в карту и поме-
 чен как CODE. 


TAB [adr1] [adr2] - заносит область памяти в карту
 и помечает ее как данные (DATA). 


STG [adr1] [adr2] - объявляет данный блок памяти как
 STORAGE. 


DMC 
DMT - соответствующие операции без вывода на экран.
DMS /


XMC 
XMT - удаление соответствующих блоков из карты. 
XMS /


GMC [adr] - глобальное дизассемблирование. DD80 на-
 чинает дизассемблирование с заданного адреса. Пос-
 ле окончания обработки главной части файла (т.е. ко-
 гда будет встречена одна из команд, останавливаю-
 щих процесс) из таблицы необработанных адресов вы-
 бираются адреса, помеченые звездочкой, и процесс
 продолжается. Когда все ветви программы будут об-
 работаны, все блоки кодов будут отмечены в карте.

GMT - заносит в карту как DATA все блоки, присут-
 ствующие в таблице адресов. 

GMS - помечает все то, что осталось после отработ-
 ки команд GMC и GMT, как STORAGE. 


    Таким образом, можно дизассемблировать прог-
рамму путем ввода всего трех команд! Но не радуй-
тесь слишком сильно, т.к. тут есть свои подводные
камни. О них читайте в конце статьи. 

    Следующие две команды выполняются после того,
как будет составлена вся карта памяти программы:


FAS - команда окончательного (FINAL) дизассемблиро-
 вания с выводом на экран. Диск зажужжит, а Вы мо-
 жете сходить попить чаю или перекурить. 

FMD - то же, но без вывода на экран и гораздо быс-
 трее. :) 


     В результате финального дизассемблирования на
диске создается ASCII файл в альтернативной коди-
ровке. Выглядит он примерно так: 























       MAP AND SYMBOL TABLE COMMANDS 
       ─────────────────────────────────── 


     Эта группа выполняет операции с картой и со-
стоит из шести команд: 


NEW - очистка карты. Необходима, если Вы нагороди-
 ли с картой такое, что обычными командами удале-
 ния блоков из карты (типа XMC) уже не исправить.

MAP - вывод карты на экран. Снизу экрана начинает
 ползти список блоков, разбитый на три колонки:
 CODE, DATA, STORAGE. Вслед за этим появится таб-
 лица неопределенных адресов (UNRESOLVED SYMBOL
 TABLE). Увидев в этой таблице адрес, помеченный
 звездочкой, смело дизассемблируйте с этого адреса.

SYM - вывод на экран полной таблицы адресов. Здесь
 будут появляться и те адреса, которые уже отра-
 ботаны, и те, которые еще нет. 

REF - переформирование таблицы адресов Эту коман-
 ду необходимо применить после удаления каких-либо
 блоков из карты. В процессе отработки этой коман-
 ды заново перетрассируются все CODE-участки про-
 граммы. 

SVM - запись карты на диск (текущий или установ-
 ленный командой OUT). В результате на диске появ-
 ляется файл filename.MAP, занимающий совсем немно-
 го места, но хранящий всю информацию об исходном
 файле. 
LDM - соответственно загрузка карты с диска. 

     Таким образом, можно дизассемблировать файл
и записать его на диск, а если распределение блоков
неправильное, то надо просто загрузить DD80, счи-
тать карту, исправить "ошибки" и повторить дизас-
семблирование. Никаких мучений! 



              FORMAT COMMANDS 
              ────────────────── 


     В этой группе содержатся сервисные команды,
не очень-то и необходимые, но полезные. Их шесть:


D80 - использовать набор команд процессора INTEL
 8080. Это где вместо LD A, (DE) пишется LDAX D
 (те, кто писал на ассемблере 8080, поймут меня).


D85 - использовать набор команд процессора 8085.
 Честно говоря, такие команды и в кошмарном сне
 не приснятся. ;) 


Z80 - использовать набор команд Z80. 


LIN - количество символов в строке консоли (шест-
 надцатиричное число не больше #50=80). 


DEL - переназначение клавиши для удаления символов.

BSC - то же самое, но для клавиши BACKSPACE. 



        SPECIAL FUNCTION COMMANDS 
        ───────────────────────────── 


      В этой группе содержится четыре команды об-
щего назначения: 


HLP - как уже упоминалось, вызов справки. 

END - окончание работы и выход в CP/M. Такой же
 эффект дает комбинация клавиш <CTRL>+<C>. 


SAV line - записывает в память строку line, кото-
 рую можно потом вызвать нажатием <CTRL>+<R>. 


DUM [addr] - вывод дампа памяти с адреса addr. Ес-
 ли параметр отсутствует, то выводится содержимое
 памяти с текущего адреса. В таком случае, можно
 просто нажать <ENTER>. 


                 *  *  * 


         ИЗ НЕДОКУМЕНТИРОВАННОГО 
         ════════════════════════════ 


     Размер таблицы символов, определенный по умол-
чанию, мне, к сожалению, не известен. Его постоянно
не хватает, и периодически DD80 спрашивает, можно
ли ее расширить. Выглядит это примерно так: 





Увидев такое сообщение, смело отвечайте "Y"; ничего
страшного не случится. 

     Когда в программе встречается какая-либо ко-
манда, оперирующая с половинками индексных регист-
ров, DD80 остановит дизассемблирование и напишет:



Против этого помогает только "шаманский" способ: оп-
ределить байт #DD или #FD как DATA, а затем про-
должить дизассемблирование со следующего адреса. Не
забудьте потом все исправить! 


     Если будете увлекаться использованием глобаль-
ных команд типа GMC и GMT, то можете нарваться
на следующее обстоятельство: часть файла, помечен-
ная вами как DATA, на самом деле может быть ис-
полнимым кодом, о чем DD80 вас и предупредит. Это
будет что-то типа: 





Как я понял, DD80 в процессе отработки команды
GMT проверяет, есть ли вызовы (команды JP, CALL)
в эту область. Это еще раз доказывет, что DD80 -
"умная" программа. 


                 *  *  * 


        НЕСКОЛЬКО ПОЛЕЗНЫХ СОВЕТОВ 
        ════════════════════════════════ 


 1) Многие программисты пишут программы в таком
стиле: 

      LD   DE, SCR_ADR 
      CALL PRINT 
DATA  DEFB "Привет, друзья!", #00 
      LD   HL, TABLE 
      ... 
PRINT POP  HL 
      ... 


При обычном дизассемблировании командой DAS с од-
ним параметром (или вообще без параметров) полу-
чится сами понимаете что. Поэтому для того, чтобы
данные не попали в область CODE, после обнаружения
подпрограммы, которая первым же делом что-то сни-
мает со стека, находите все ее вызовы и аккуратно
дизассемблируйте командой DAS с двумя параметрами.

 2) Часто при написании программ на ассемблере ис-
пользуется следующий прием: в зависимости от зна-
чения регистра (или регистровой пары) из таблицы
значений выбирается адрес; далее чаще всего идет
команда JP (HL). Как вы уже наверное догадались,
случай почти клинический. Ссылок на адреса подпрог-
рамм DD80 не обнаружит. Помочь тут может только
промежуточное дизассемблирование. После того, как
вы найдете эту_самую_чертову_таблицу, запишите на
бумажку список адресов, и грузите опять DD80. Не-
много коряво, но, поверьте, помогает. 

 3) Для того, чтобы дизассемблировать программу,
которая не работает в CP/M, надо: 


   а) перенести ее из TR-DOS на диск в системе 
     CP/M (с помощью CopyK, Hop Commander'а или
     подобных.); 
   б) поменять расширение .CTR на .COM (иначе ни-
     чего вообще не получится). 
   в) после запуска DD80 и подключения файла, ввес-
     ти команду EXC addr, т.е. задать адрес запус-
     ка вашей (или не вашей) программы. 
   г) дальше - все как обычно. 


 4) И последнее. Все операции хорошо проделывать,
предварительно скопировав все файлы на RAM-диск.
Ощущения незабываемые: диск не жужжит, работа не
тормозится... 


                 *  *  * 


P.S. Вот, кажется, и все. Если чего забыл, напишу в
следующем номере. На диске в ПРИЛОЖЕНИИ вы най-
дете программу в виде файла DD80.C, который надо
перенести на CP/M-диск и переименовать в .COM-файл.
С помощью DD80 можно сделать очень многое. Напри-
мер, когда-то давно я составил исходники DIZZY 3.5
и DRILLER. 


───────────────────────────────────────────────────
 На диске в ПРИЛОЖЕНИИ вы най-
дете программу в виде файла DD80.C, который надо
перенести на CP/M-диск и переименовать в .COM-файл.
С помощью DD80 можно сделать очень многое. Напри-
мер, когда-то давно я составил исходники DIZZY 3.5
и DRILLER. 


───────────────────────────────────────────────────
 hx



Другие статьи номера:

Авторы - Авторы журнала и контакты редакции.

Информбюро - Путеводитель по журналу.

Информбюро - Что читать, и где читать?...

Приветы - приветы от редакции.

Лоцман - Приключения Крузи (окончание новеллы).

Лоцман - Мамонтовая пещера - история возниконовения жанра ADVENTURE.

Лодырь - рекомендации по прохождению и cheat-mode к игре ЧЕРНЫЙ ВОРОН. Карта к игре БЕГСТВО НА ХАРХАН.

Калейдоскоп - Обзор игровых программ: FENDISH FREDDY-S , BIG TOP 10 FUN , MYSTICAL + 12 levels, WORD LIFE, SQUARDS DENIZEN,ELOPEMENT (BACK TO THE EARTH), MARGO PUZZLE, ОСЕЛ.

Калейдоскоп - Обзор новых системных программ: HRUMv3.5,STSv6.2,ALASMv4.1.

Калейдоскоп - Описание текстового редактора - Анаконда.

Калейдоскоп - Презентация игры из Донецка - Зеркало.

Скелет - Доработка Пентагона - автозагрузка в PENTAGON-128.

Скелет - О подключении GENERL SOUND к PROFI.

Тусовка - В гостях у нас Laser Soft (г. Оболенск)

Тусовка - Рассказ о фирме Delta 4 создававшией игры для ZX Spectrum в 80-х годах.

Тусовка - ART COMP-98 - быть или не быть.

Тусовка - Блиц интервью с FFC Computers.

PROFI CLUB - О подключении к PROFI разной переферии.

PROFI CLUB - Редакторы для PROFI: GRAND CROIX v1.0 , SCREEN EDITOR v0.1.

PROFI CLUB - Конверторы для PROFI: PCX VIEW & CONVERTOR v2.10, PCX 256 , GIF-VIEWER.

PROFI CLUB - DD80 - описание дискового ассемблера под CP/M.

Пишите письма - Письмо от AIR-а с отзывом о газете и о проекте игры "Звездная месть" (продолжение Бегство на Хархан).

Умора - Сколько будет?...

Умора - В 2000 году.

Умора - Страшный вирус в Интернете.

Реклама - Реклама и объявления ...


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Кофейникам - включение/выключение Beeperа в Tasme
Система - новый aссeмблeр из городa Волгодонскa: EDAS 3.3.
Система - обзор ассемблера TASM-128.

В этот день...   8 декабря