На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 12 / Использование командных файлов для макроассемблера MASM версий 5 и выше Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Использование командных файлов для макроассемблера 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%.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz