Меню сайта

Урок 98. Преодразование файла типа .exe в файл типа .com

На дискете с DOS имеется сервиснаяпрограмма под именем EXE2BIN.
— — — Эта программа преобразует файл типа .EXE вфайл типа .COM. — — — Однако
— — — программа EXE2BIN работает не со всемифайлами. — Далее излагается
— — — метод использования программы DEBUG, спомощью которого любая
— — — программа преобразуется в файл типа .COM.

— — — — — На Фиг. 5.18 приведена программа, которуюмы будем
— — — преобразовывать. Эта программа выполняетточно такие же функции,
— — — что и программа предыдущего примера, аименно — выводит на дисплей
— — — фразу : «Это тест». Однако вданной программе эта строка выводится
— — — на дисплей по прерыванию INT 21H с помощьюфункции 9 DOS.
— — — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — — 1/1/80 04:02:33
— — — — — — — — — -Фиг. 5.18 Пример преобразования файла типа .EXE в тип .COM — Page — — — 1-1


— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — PAGE — — -,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — TITLE — -Фиг. 5.18 Пример преобразования файла типа .EXE в тип .COM
— — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — CODE — — -SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ASSUME -CS:CODE,DS:CODE
— — — — — — — — — — -0100 — — — — — — — — — — — — — — — — — — — — — — — ORG — — — -100H

— — — — — — — — — — -0100 — 8D 16 010A R — — — — — — — — — — — — — — -LEA — — — — DX, MESSAGE
— — — — — — — — — — -0104 — B4 09 — — — — — — — — — — — — — — — — — — — — — — MOV — — — — AH, 9H — — — — — — — — — — — — — — Функция вывода строки ДОС
— — — — — — — — — — -0106 — CD 21 — — — — — — — — — — — — — — — — — — — — — — INT — — — — 21H — — — — — — — — — — — Вывод строки на экран
— — — — — — — — — — -0108 — CD 20 — — — — — — — — — — — — — — — — — — — — — — INT — — — — 20H — — — — — — — — — — — Возврат в ДОС

— — — — — — — — — — -010A — 9D E2 A0 20 AF E0 AE — — — — MESSAGE DB — — — — — ‘Эта программа — тест’, 10, 13, ‘$’
— — — — — — — — — — — — — — -A3 E0 A0 AC AC A0 20
— — — — — — — — — — — — — — -2D 20 E2 A5 E1 E2 0A
— — — — — — — — — — — — — — -0D 24
— — — — — — — — — — -0121 — — — — — — — — — — — — — — — — — CODE — — -ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — 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&gt-A:ASM FIG5_18,,,-
— — — — — — — — — — — — — — — — — The IBM Personal ComputerAssembler
— — — — — — — — — — — — — — — — — Version 1.00 (c)Copyright IBMCorp 1981

— — — — — — — — — — — — — — — — — Warnings Severe
— — — — — — — — — — — — — — — — — Errors — — — — — Errors
— — — — — — — — — — — — — — — — — 0 — — — — 0

— — — — — — — — — — — — — — — — — B&gt-A:LINK FIG5_18,,,-
— — — — — — — — — — — — — — — — — Ibm Personal Computer Linker
— — — — — — — — — — — — — — — — — Version 1.10 (C)Copyright IBMCorp 1982

— — — — — — — — — — — — — — — — — -Warning: No STACK segment
— — — — — — — — — — — — — — — — — There was 1 error detected.

— — — — — — — — — — — — — — — — — B&gt-RENAME FIGS5_18.EXEFIGS5_18.COM

— — — — — — — — — — — — — — — — — B&gt-A:DEBUG
— — — — — — — — — — — — — — — — — -NFIGS_18.COM
— — — — — — — — — — — — — — — — — -L
— — — — — — — — — — — — — — — — — -M 400 1000 100

— — — — — — — — — — — — — — — — — -U100 10F

— — — — — — — — — — — — — — — — — 06D7:0100 BA091 — -MOV — DX,0109
— — — — — — — — — — — — — — — — — 06D7:0103 B409 — — — — — — — — — MOV — AH,09
— — — — — — — — — — — — — — — — — 06D7:0105 CD21 — — — — — — — — — INT — 21
— — — — — — — — — — — — — — — — — 06D7:0107 CD20 — — — — — — — — — INT — 20
— — — — — — — — — — — — — — — — — 06D7:0109 54 — — — — — — — — — — — PUSH SP
— — — — — — — — — — — — — — — — — 06D7:010A 68 — — — — — — — — — — — DB — — 68
— — — — — — — — — — — — — — — — — 06D7:010B 69 — — — — — — — — — — — DB — — 69
— — — — — — — — — — — — — — — — — 06D7:010C 7320 — — — — — — — — — JNC — 012E
— — — — — — — — — — — — — — — — — 06D7:010E 69 — — — — — — — — — — — DB — — 69
— — — — — — — — — — — — — — — — — 06D7:010F 7320 — — — — — — — — — JNC — 0131

— — — — — — — — — — — — — — — — — -D100

— — — — — — — — — — — — — — — — — 06D7:0100 — BA 09 01 B4 09 CD 21 CD-20 54 68 69 73 20 6973 — — :..4.M!M’ This is
— — — — — — — — — — — — — — — — — 06D7:0110 — 20 61 20 74 65 73 74 DA-0D 24 00 00 00 00 0000 — — — a test..$…….
— — — — — — — — — — — — — — — — — 06D7:0120 — 00 00 00 00 00 00 00 00-00 00 00 00 00 00 0000 — — — …………….
— — — — — — — — — — — — — — — — — 06D7:0130 — 00 00 00 00 00 00 00 00-00 00 00 00 00 00 0000 — — — …………….
— — — — — — — — — — — — — — — — — 06D7:0140 — 00 00 00 00 00 00 00 00-00 00 00 00 00 00 0000 — — — …………….
— — — — — — — — — — — — — — — — — 06D7:0150 — 00 00 00 00 00 00 00 00-00 00 00 00 00 00 0000 — — — …………….
— — — — — — — — — — — — — — — — — 06D7:0160 — 00 00 00 00 00 00 00 00-00 00 00 00 00 00 0000 — — — …………….
— — — — — — — — — — — — — — — — — 06D7:0170 — 00 00 00 00 00 00 00 00-00 00 00 00 00 00 0000 — — — …………….

— — — — — — — — — — — — — — — — — -RCX
— — — — — — — — — — — — — — — — — -CX 0380
— — — — — — — — — — — — — — — — — :120

— — — — — — — — — — — — — — — — — -W

— — — — — — — — — — — — — — — — — Writing 0120 bytes
— — — — — — — — — — — — — — — — — -Q
— — — — — — — — — — — — — — — — — Фиг. 5.19 Пример преобразования из.EXE в .COM (начало)
— — — — — — — — — — — — — — — — — &gt-BDEBUG FIG5_1
8.COM
— — — — — — — — — — — — — — — — — -R

— — — — — — — — — — — — — — — — — AX=0000 — BX=0000 -CX=0120 — DX=0000 — SP=FFF0 -BP=0000 — SI=0000 — DI=0000
— — — — — — — — — — — — — — — — — DS=04B5 — ES=04B5 -SS=04B5 — CS=04B5 — IP=0100 — -NV UP DI NZ NA PO NC

— — — — — — — — — — — — — — — — — -Q

— — — — — — — — — — — — — — — — — B&gt-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подробно описаны эти
— — — команды.

Категория: Программирование на Ассемблере | Дата: 26.01.13

Меню раздела
Блок