На главную Назад
Добро пожаловать, уважаемый посетитель!

На дискете с 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 подробно описаны эти

команды.


 

Mail.ru