|
|
|
|
Использование командных файлов для макроассемблера 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
приостанавливает обработку и выдает сообщение об ошибке.
Обнаружение ошибки в командном файле МК.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
или 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
IF (%TYPE%)==(EXe) SET TYPE=EXE
IF (%TYPE%)==(eXE) SET TYPE=EXE
IF (%TYPE%)==(EXE) goto :DOASM
rem
IF (%TYPE%)==(c) SET TYPE=COM
IF (%TYPE%)==(C) SET TYPE=COM
IF (%TYPE%)==(co) SET TYPE=COM
IF (%TYPE%)==(Co) SET TYPE=COM
IF (%TYPE%)==(cO) SET TYPE=COM
IF (%TYPE%)==(CO) SET TYPE=COM
IF (%TYPE%)==(com) SET TYPE=COM
IF (%TYPE%)==(Com) SET TYPE=COM
IF (%TYPE%)==(cOm) SET TYPE=COM
IF (%TYPE%)==(coM) SET TYPE=COM
IF (%TYPE%)==(COm) SET TYPE=COM
IF (%TYPE%)==(cOM) SET TYPE=COM
IF (%TYPE%)==(COM) goto :DOASM
rem
GOTO :ASKTYPE
:DOASM
IF (%MASM%)==() SET MASM=/S/P/V/L%MASM%
IF not (%MASM%)==() ECHO MASM командная строка переключается в: %MASM%
ECHO on
MASM %F1%.asm;
@ECHO off
IF errorlevel 1 goto :NOASSEM
REM
IF (%TYPE%)==(OBJ) goto :LSTFILES
IF (%LINK%)==() SET LINK=/I/CP:1%LINKS%
IF not (%LINK%)==() ECHO Link командная строка переключается в: %LINK%
ECHO on
LINK %F1%.obj,%F1%.exe;
@ECHO off
IF errorlevel 1 goto : NOLINK
IF exist %F1%.obj DEL %F1%.obj >nul:
REM
IF (%TYPE%)==(COM) EXE2BIN %F1%.exe %F1%.com >nul:
IF (%TYPE%)==(COM) goto :DEL_EXE
GOTO :LSTFILES
:DEL_EXE
IF exist %F1%.exe DEL %F1%.exe >nul:
:LSTFILES
IF exist %F1%.bak DEL %F1%.bak >nul:
DIR %F1%.*
GOTO :END
:NOPARM
ECHO Параметр не указан!
GOTO :END
:NOFILE
ECHO Файл "%F1%.ASM" не существует!"
GOTO :END
:NOASSEM
ECHO Ошибка ассемблера при трансляции!
GOTO :END
:NOLINK
ECHO Ошибка при редактировании связей!
:END
SET F1=
SET TYPE=
SET MASM=
SET LINK=
SET MASMS=
SET LINKS=
----------------------------------------------------------------
|
Отметим, что командный файл МК.BAT использует некоторые непечатаемые в коде ASCII символы: ESC (переход) в коде ASCII показан, как ^[, а BS (возврат) в коде ASCII показан, как ^H.
В процессе создания командного файла МК.BAT программа-редактор и программа текстовой обработки, которые Вы используете,
должны обеспечить возможность вставки этих символов в данный
текст.
Начало листинга показывает использование команды @ ECHO off
операционной системы MS-DOS версии 3.3, результатом которой является выключение режима вывода на экран исполняемых команд, при
этом и сама строка ECHO off на экран выводиться не будет.
Однако, если Вы работаете с более ранней версией операционной системы MS-DOS, то можно использовать управляющую последовательность стандарта ANSI, показанные в нескольких последующих
строках листинга.
Управляющая последовательность стандарта ANSI используется
только тогда, когда драйвер устройства ANSI.SYS загружается в
процессе первоначальной загрузки системы.
Символ возврата в коде ASСII используется с целью отображения операционной системой MS-DOS пустой строки в процессе выполнения данного файла: результатом оператора "ECHO^H" является
отображение пустой строки во всех версиях операционной системы
MS-DOS.
Командный файл МК.BAT использует программу общего пользования, называемую ANSWER.COM. Эта программа используется для отображения приглашения операционной системы MS-DOS, означающего готовность операционной системой к приему команд; в ответ на это
приглашение любой вводимый текст назначается переменной окружения
ANSWER.
Ввод в ответ на запрос может быть затем проверен в командном
файле путем использования в операторе %ANSWER%.
|
|