|
Функция деассемблера состоит в том,
чтобы привести команду машинного языка с кодом 40/16 обратно
к виду INC AX.
Шестнадцатеричный код 40 сравнительно легко может быть
преобразован и вручную, при наличии таблицы кодов команд
микропроцессора 8088. С большинством кодов остальных команд
дело обстоит не так просто, поскольку в ряде случаев смысл
команды изменяется в зависимости от значения кокнретных
битов. В случае использования команды DEBUG все запутанные
случаи декодирования преодолеваются в режимах команды
деассемблирования.
Несмотря на то, что деассемблер может выполнить
преобразование команд машинного языка к более удобным
командам языка ассемблера, целый ряд весьма существенных
компонентов программы, написанной на языке ассемблера
реконструкции не поддается. Так, очевидно, не могут быть
восстановлены весьма полезные комментарии программиста. Кроме
того, не представляется возможным восстановить оригинальные
символические имена адресов памяти.
Таким образом, вместо оригинальной авторской конструкции
типа
IMP FINISH; выполнено, перейти к завершающей процедуре
деассемблер сгенерирует строку вида
IMP OE6C
Пользователь видит перед собой команду перехода, однако
ее смысл остается для него неясным.
Деассемблер, безусловно, не в состоянии полностью
заменить программиста, особенно, в том, что касается смысла
деассемблируемой программы. Но он существенно упрощает
задачу, когда предъявляет пользователю команду, а также
помогает отличить область памяти, содержащую данные от
области памяти, содержащую команды.
|