Приложение А. СРЕДСТВА РАЗРАБОТКИ
Использование командных файлов для автоматизации процес-
са трансляции с языка Ассемблера
Использование средства MAKE фирмы "Майкрософт"
Использование шаблонов для создания программ с
расширением ".COM" и ".EXE"
Использование библиотечных стандартных программ
В данном приложении описаны некоторые средства, которые мо-
гут упростить и повысить эффективность использования языка Ас-
семблера для разработки прикладных программ. Ниже приводится опи-
сание: автоматизации процесса разработки программы с
использованием командных файлов; использование средства MAKE фир-
мы "Майкрософт"; создание .EXE - и .COM-программ с помощью шабло-
нов, а также использование файлов "include" ("файлов включения")
и библиотечных стандартных программ.
Использование командных файлов для автоматизации процесса
трансляции с языка Ассемблера
Процессор обработки команд MS-DOS - это часто одно из наиме-
нее ценимых по достоинству средств данной операционной системы.
Это средство, однако, может оказаться очень полезным при исполь-
зовании Вами макроассемблера MASM. В листингах A-1, A-2 и A-3
приводятся исходные тексты программ трех командных файлов:
MASM2EXE.BAT, MASM2COM.BAT и MК.BAT.
Командный файл MASM2EXE.BAT используется для автоматизации
процесса трансляции с языка ассемблера и редактирования связей
.EXE - программ.
Командный файл MASM2COM.BAT является модификацией первого
файла и включает процесс преобразования .EXE- файлов в
.COM-файлы.
Оба командных файла предназначены для работы с макроассемб-
лером MASM фирмы "Майкрософт" версий с 1.00 по 4.00 и большинс-
твом версий редактора связей LINK.
Значительно более мощный командный файл разработки MК.BAT
(листинг A-3) предназначен для работы с макроассемблером MASM
версии 5.0 и выше и редактором связей LINK версии 3.00 и выше.
Командный файл MК.BAT может использоваться для создания .EXE,
-.COM - или .ОВJ (объектных программ, пригодных для редактирова-
ния связей) - файлов с помощью заданных параметров строки команд.
Использование командных файлов для макроассемблера MASM
версий с 1.00 по 5
Командные файлы MASM2EXE.BAT и MASM2COM.BAT, показанные в
листингах A-1 и A-2, пригодны для использования с макроассембле-
ром MASM версий с 1.00 по 4.00 и редактором связей LINK версий с
- П-2 -
1.00 по 2.00.
Модификации командных файлов для более поздних версий макро-
ассемблера MASM и редактора связей LINK приводятся в примечаниях
к листингам. Оба командных файла требуют наличия второго файла,
называемого AUTOLINK. Этот файл содержит четыре команды возврата
каретки и перевода строки и используются для решения проблемы,
касающейся редактора связей LINK (вплоть до версии 2.00): послед-
ний не может воспринимать пустые (неопределенные) параметры в
строке команды для опций распечатки (.МАР) и библиотек (.LIB).
Инициирование файла AUTOLINK для редактора связей LINK осу-
ществляется путем добавления имени файла в строке команды с пред-
шествующим ему знаком @. Знак "@" используется для совместимости
версий 2.00 операционной системы MS-DOS с предыдущими версиями,
поскольку более ранние версии не поддерживают переназначение
строки команд.
Использовать конкретный командный файл очень просто. Просто
введите имя данного командного файла с последующим именем файла,
подлежащего трансляции. Не включайте расширение, в то время как
расширение .ASM допускается. Если вы используете версию 2.00 или
выше операционной системы MS-DOS, и путь доступа PATH установлен
корректно, то драйверы, на которых хранятся связанные с ними фай-
лы, не должны указываться.
Листинг A-1. MASM2EXE.BAT
----------------------------------------------------------------
echo off
if not exist %1.asm goto NOFILLER
rem
masm %1 %1 nul nul
rem
rem Используйте вышеприведенные строки только с версиями
rem MASM ниже 2.00
rem Используйте "masm %1.asm,,;" для макроассемблера MASM
rem версии 2.00 и выше
rem
link %1 @a:autolink
rem
rem Используйте вышеприведенные строки только с версиями
rem редактора связей LINK ниже 2.20;
rem Используйте "link %1.obj,,nul;" для редактора связей
rem LINK версии 2.20 и выше
rem
echo Удаление %1.obj
del %1.obj >nul:
echo Выполнено!
dir %1.*
goto END
rem
:NOFILERR
echo Файл %1.asm не был найден.
:END
----------------------------------------------------------------
- П-3 -
Листинг A-2. MASM2COM.BAT
----------------------------------------------------------------
echo off
if not exist %1.asm goto NOFILERR
rem
masm %1 %1 nul nul
rem
rem Используйте вышеприведенные строки только с версиями
rem MASM ниже 2.00
rem Используйте "masm %1.asm,,;" для макроассемблера MASM
rem версии 2.00 и выше
rem
link %1 @a:autolink
rem
rem Используйте вышеприведенные строки только с версиями
rem редактора связей LINK ниже 2.20;
rem Используйте "link %1.obj,,nul;" для редактора связей
rem LINK версии 2.20 и выше
rem
echo Удаление %1.obj
del %1.obj >nul:
echo Создание %1.com из %1.exe (и удаление %1.exe)
exe2bin %1.exe %1.com >nul:
del %1.exe >nul:
echo Выполнено!
dir %1.*
goto End
rem
:NOFILERR
echo Файл %1.asm не был найден.
:END
----------------------------------------------------------------
Отметим, что некоторые строки в листинге A-1 и A-2 заканчи-
ваются параметрами переназначения вывода. Если вы используете бо-
лее раннюю версию по сравнению с 2.00 операционной системы
MS-DOS, то эти параметры должны быть удалены.
Использование командных файлов для макроассемблера MASM
версий 5 и выше
Если вы используете макроассемблер MASM версии 5 и редактор
связей LINK версии 3 или выше, можно использовать командный файл
МК.BAT, показанный в листинге A-3. Командный файл МК.BAT может
быть использован для создания или .EXE, -.COM, - или .OBJ - фай-
лов путем указания корректного параметра в строке команды.
К примеру, если вы хотите оттранслировать с языка ассемблера
файл, называемый TEST1.ASM. для создания файла TEST1.EXE просто
введите "МК TEST1.EXE". Наоборот, если целевым является файл
TEST1.COM, введите "MK TEST1.COM" или введите "МК ТEST1.OBJ" с
целью создания .ОВJ файлов объектных программ, пригодных для ре-
дактирования связей.
Командный файл MK.BAT, кроме того, использует коды возврата,
генерируемые макроассемблером MASM и редактором связей LINK . Ес-
ли код возврата, отличный от "0", возвращается или макроассембле-
ром MASM или редактором связей LINK, то командный файл МК.BAT
приостанавливает обработку и выдает сообщение об ошибке.
- П-4 -
Обнаружение ошибки в командном файле МК.BAT полезно, к при-
меру, в случае обнаружения ошибки макроассемблером MASM в процес-
се трансляции с языка ассемблера, в результате чего командный
файл МК.BAT лишается продолжения процесса редактирования связей
до тех пор, пока не будет зафиксирована ошибка в исходном файле.
Листинг A-3. MK.BAT
----------------------------------------------------------------
@ECHO off
REM Используйте вышеприведенную строку для предотвращения вывода
REM на экран строки "ECHO off", но только в случае работы с
REM версией 3.3 и выше операционной системы DOS. В других случаях
REM используйте следующие две строки с загруженным ANSI.SYS
REM ("^[" = Символ EScape (переход) в коде ASCII*).
REM Выключить режим вывода на экран исполняемых команд
REM (ECHO off)
REM ECHO ^[[s^[[1A^[[K^[[u
REM
IF (%1)==() goto : NOPARM
IF not exist %1.asm goto :NOFILE
SET F1=%1
IF (%2)==() : ASKTYPE
SET TYPE=%2
IF (%3)==() goto :CHKTYPE
SET MASMS=
SET LINKS=
IF (%3)==(m) SET MASMS=%4
IF (%3)==(M) SET MASMS=%4
IF (%3)==(mo) SET MASM=%4
IF (%3)==(mO) SET MASM=%4
IF (%3)==(Mo) SET MASM=%4
IF (%3)==(MO) SET MASM=%4
rem
IF (%3)==(l) SET LINKS=%4
IF (%3)==(L) SET LINKS=%4
IF (%3)==(lo) SET LINK=%4
IF (%3)==(lO) SET LINK=%4
IF (%3)==(Lo) SET LINK=%4
IF (%3)==(LO) SET LINK=%4
rem
IF (%5)==(m) SET MASMS=%6
IF (%5)==(M) SET MASMS=%6
IF (%5)==(mo) SET MASM=%6
IF (%5)==(mO) SET MASM=%6
IF (%5)==(Mo) SET MASM=%6
IF (%5)==(MO) SET MASM=%6
rem
IF (%5)==(l) SET LINKS=%6
IF (%5)==(L) SET LINKS=%6
IF (%5)==(lo) SET LINK=%6
IF (%3)==(lO) SET LINK=%6
IF (%3)==(Lo) SET LINK=%6
IF (%3)==(LO) SET LINK=%6
rem
GOTO :CHKTYPE
:ASKTYPE
ECHO ^H
ANSWER Наберите имя файла, подлежащего созданию: OBJ, COM
- П-5 -
или EXE и нажмите клавишу ENTER
ECHO ^H
:CHKTYPE
IF (%TYPE%)==(o) SET TYPE=OBJ
IF (%TYPE%)==(O) SET TYPE=OBJ
IF (%TYPE%)==(ob) SET TYPE=OBJ
IF (%TYPE%)==(Ob) SET TYPE=OBJ
IF (%TYPE%)==(oB) SET TYPE=OBJ
IF (%TYPE%)==(OB) SET TYPE=OBJ
IF (%TYPE%)==(obj) SET TYPE=OBJ
IF (%TYPE%)==(Obj) SET TYPE=OBJ
IF (%TYPE%)==(oBj) SET TYPE=OBJ
IF (%TYPE%)==(obJ) SET TYPE=OBJ
IF (%TYPE%)==(OBj) SET TYPE=OBJ
IF (%TYPE%)==(oBJ) SET TYPE=OBJ
IF (%TYPE%)==(OBJ) goto :DOASM
rem
IF (%TYPE%)==(e) SET TYPE=EXE
IF (%TYPE%)==(E) SET TYPE=EXE
IF (%TYPE%)==(ex) SET TYPE=EXE
IF (%TYPE%)==(Ex) SET TYPE=EXE
IF (%TYPE%)==(eX) SET TYPE=EXE
IF (%TYPE%)==(EX) SET TYPE=EXE
IF (%TYPE%)==(exe) SET TYPE=EXE
IF (%TYPE%)==(Exe) SET TYPE=EXE
IF (%TYPE%)==(eXe) SET TYPE=EXE
IF (%TYPE%)==(exE) SET TYPE=EXE