|
На дискете с DOS имеется сервисная
программа под именем EXE2BIN.
Эта программа преобразует файл типа .EXE в
файл типа .COM.Однако
программа EXE2BIN работает не со всеми
файлами.Далее излагается
метод использования программы DEBUG, с
помощью которого любая
программа преобразуется в файл типа .COM.
На Фиг. 5.18 приведена программа, которую
мы будем
преобразовывать. Эта программа выполняет
точно такие же функции,
что и программа предыдущего примера, а
именно - выводит на дисплей
фразу : "Это тест". Однако в
данной программе эта строка выводится
на дисплей по прерыванию INT 21H с помощью
функции 9 DOS.
Microsoft (R) Macro Assembler Version 5.001/1/80 04:02:33
Фиг. 5.18 Пример преобразования файла типа .EXE в тип .COMPage1-1
PAGE,132
TITLEФиг. 5.18 Пример преобразования файла типа .EXE в тип .COM
0000CODESEGMENT
ASSUMECS:CODE,DS:CODE
0100ORG100H
01008D 16 010A RLEADX, MESSAGE
0104B4 09MOVAH, 9H; Функция вывода строки ДОС
0106CD 21INT21H; Вывод строки на экран
0108CD 20INT20H; Возврат в ДОС
010A9D E2 A0 20 AF E0 AEMESSAGE DB'Эта программа - тест', 10, 13, '$'
A3 E0 A0 AC AC A0 20
2D 20 E2 A5 E1 E2 0A
0D 24
0121CODEENDS
END
Фиг. 5.18 Пример перевода .EXE в
.COM
Обратите внимание, что данная программа
записана как файл типа
.COM. На это указывает оператор ORG 100H,
предшествующий первой
команде. Остальная часть программы должна
быть перемещаемым
сегментом команд, и об этом не нужно
забывать при написании
программы, которая будет преобразовываться
в файл типа .COM.
Ассемблирование и редактирование связей
этой программы
осуществляется обычным способом. Однако до
запуска программы DEBUG
нужно изменить в имени файла тип .EXE на
тип .COM. Это необходимо
сделать, так как программа DEBUG не
позволяет записывать файл типа
.EXE. На Фиг. 5.19 показана
последовательность шагов, которую нужно
выполнить. В данном примере вводится
команда программы DEBUG без
имени файла. В качестве имени можно было
бы в данной строке указать
FIG5=18.COM, зато его отсутствие позволило
продемонстрировать
некоторые другие функции программы DEBUG.
Команда N отладчика
позволяет задать имя файла. После этого
команда L выполняет
загрузку файла в память. Если указать имя
файла в команде DEBUG, то
последняя выполнит все то же самое, что и
команды N и L.
Теперь, когда файл загружен, вы
обнаружите, что в
дествительности программа загрузилась,
начиная со смещения 400H.
Команда M сдвигает содержимое области
памяти с 400H на 100H. Длина
области, равная 1000H, была выбрана для
гарантии того, что там
поместится вся программа. Теперь программа
соответствует формату
файла типа .COM и может быть опять
записана на дискету. Однако
прежде, чем это сделать, вы изменяете
содержимое регистра CX, чтобы
он указал фактическую длину программы. При
любом считывании и
записи файлов на дискету, осуществляемых
программой DEBUG, длина
файла хранится в регистре CX. Так как файл
типа .COM теперь намного
короче, чем был файл типа .EXE, то мы
можем сэкономить дисковую
B>A:ASM FIG5_18,,,;
The IBM Personal Computer
Assembler
Version 1.00 (c)Copyright IBM
Corp 1981
Warnings Severe
Errors Errors
0 0
B>A:LINK FIG5_18,,,;
Ibm Personal Computer Linker
Version 1.10 (C)Copyright IBM
Corp 1982
Warning: No STACK segment
There was 1 error detected.
B>RENAME FIGS5_18.EXE
FIGS5_18.COM
B>A:DEBUG
-NFIGS_18.COM
-L
-M 400 1000 100
-U100 10F
06D7:0100 BA091 MOVDX,0109
06D7:0103 B409 MOVAH,09
06D7:0105 CD21 INT21
06D7:0107 CD20 INT20
06D7:0109 54 PUSHSP
06D7:010A 68 DB68
06D7:010B 69 DB69
06D7:010C 7320 JNC012E
06D7:010E 69 DB69
06D7:010F 7320 JNC0131
-D100
06D7:0100BA 09 01 B4 09 CD 21 CD-20 54 68 69 73 20 69
73:..4.M!M' This is
06D7:011020 61 20 74 65 73 74 DA-0D 24 00 00 00 00 00
00a test..$.......
06D7:012000 00 00 00 00 00 00 00-00 00 00 00 00 00 00
00................
06D7:013000 00 00 00 00 00 00 00-00 00 00 00 00 00 00
00................
06D7:014000 00 00 00 00 00 00 00-00 00 00 00 00 00 00
00................
06D7:015000 00 00 00 00 00 00 00-00 00 00 00 00 00 00
00................
06D7:016000 00 00 00 00 00 00 00-00 00 00 00 00 00 00
00................
06D7:017000 00 00 00 00 00 00 00-00 00 00 00 00 00 00
00................
-RCX
CX 0380
:120
-W
Writing 0120 bytes
-Q
Фиг. 5.19 Пример преобразования из.EXE в .COM (начало)
>BDEBUG FIG5_18.COM
-R
AX=0000BX=0000CX=0120DX=0000SP=FFF0BP=0000SI=0000DI=0000
DS=04B5ES=04B5SS=04B5CS=04B5IP=0100NV UP DI NZ NA PO NC
-Q
B>FIG5_18
Эта программа - тест
Фиг. 5.19 Пример преобразования из.EXE в
.COM (продолжение)
память, задав в регистре CX правильное
значение для программы.
Команда W записывает файл обратно на
дискету. Кстати, это еще одно
преимущество использования файлов типа
.COM. Программа DEBUG не
будет записывать файл типа .EXE на
дискету, потому что в памяти
отсутствует информация головной метки. В
то же время файл типа .COM
может быть записан на дискету программой
DEBUG. Если вы отлаживаете
программу и вам нужно изменить в ней один
или два байта без ее
повторного ассемблирования (это называется
"латанием" программы),
то это можно сделать. Просто внесите в
программу изменения,
убедитесь, что регистр CX установлен
правильно, и с помощью команды
W запишите программу на дискету.
КомандаОписание
-------------------------------------------------
D Вывод содержимого памяти
E Изменить
содержимое памяти
F Заполнить блок памяти
G Выполнять программу
H Шестнадцатеричное сложение и
вычитание
I Считать и показать значение
из порта
L Загрузить с диска
M Переслать блок памяти
N Назначить имя файла
O Вывести значение в порт
Q Выход из отладчика
R Вывести значения регистров
S Поиск строки байт
T Выполнить одну команду
U Дизассемблировать блок кода
W Записать данные на диск
--------------------------------------------------
Фиг. 5.20 Команды DEBUG
В результате работы отладчика получился
новый вариант программы
FIG5=18.COM. Обращая внимание на состояние
регистров, мы видим, как
они устанавливаются в случае файла типа
.COM. Сравните это с
показанным на Фиг.5.17 состоянием
регистров для файла типа .EXE.
Разница между ними поможет уяснить
некоторые различия между файлами
типа .COM и типа .EXE.
Имеются и другие команды, используемые при
работе с отладчиком
DEBUG. На Фиг. 5.20 приведен полный набор
команд для работы с
программой DEBUG. В руководстве по DOS
подробно описаны эти
команды.
|