Команды INCLUDE



Команды INCLUDE


    Оператор ассемблера INCLUDE осуществляет вставку текста из другого
    файла в транслируемую программу. Оператор INCLUDE особенно удобен в
    случае работы с набором макрокоманд, например, макрокомандами
    сопроцессора 8087. Все команды сопроцессора 8087 представлены
    макрокомандами. Весь такой набор макрокоманд или какое-то его под-
    множемтво вам приходится включать в любую транслируемую программу,
    где применяется сопроцессор 8087. Однако копировать эти макроко-
    манды в каждый исходный файл неудобно. Кроме того, они занимают
    столько места, что исходные файлы быстро заполнили бы всю вашу дис-
    кету, если бы вы попытались копировать макрокоманды в каждый файл.
 
      Эта проблема решается в языке ассемблера с помощью оператора
    INCLUDE. Оператор
 
      ICLUDE      имяфайла


 
      считывает указанный файл и включает его как часть в ассемблируемую
    программу. Ассемблер помещает нужный файл в то место, где
    расположен оператор INCLUDE. Оператор INCLUDE естественно
    использовать по отношению к библиотекам макрокоманд, например,
    макрокоманд сопроцессора 8087. Вы помещаете оператор INCLUDE в
    начало программы - и любая команда сопроцессора 8087 в вашей
    программе будет ассемблироваться правильно.
      Аналогично, вы можете использовать оператор INCLUDE для
    подключения других частей программы. Если вы захотите разбить вашу
    программу на меньшие исходные файлы, но ассемблировать ее как один
    файл, то главный исходный файл может состоять из операторов INCLUDE
    для всех вспомогательных исходных файлов. Однако как было показано
    в гл.5, ассемблирование небольших модулей и связывание их с помощью
    программы LINK в большинстве случаев предпочтительнее.
 
      Другой вариант для использования оператора INCLUDE - структура
    данных. Вы можете использовать некоторую структуру данных в
    нескольких программах. Определение этой структуры данных можно
    хранить в виде отдельного файла, и с помощью оператора INCLUDE
    обращаться к ней из любой программы, где они требуются. Далее в
    этой главе мы рассмотрим способы, с помощью которых программа может
    задавать и использовать структуры данных.
 
      Если включаемый файл является файлом макроопределений, то не
    имеет смысла, чтобы он появлялся в ассемблерном листинге каждый раз
    при трансляции программы. Чтобы исключить макроопределения из
    листинга, но сохранить их для генерации программного кода, вы
    можете воспользоваться условным оператором IF1. Последовательность
 
      IF1
      INCLUDE     87MAC.LIB
      ENDM
 
      приводит к включению в программу файла 87MAC.LIB при первом
    проходе ассемблера. Именно во время первого прохода ассемблер
    осуществляет расширение всех макрокоманд до их окончательной формы.
    При втором проходе макроопределения ассемблеру не нужны. Это
    ускоряет процесс ассемблирования, так как во время второго прохода
    файл макрокоманд не считывается. Ассемблер не печатает файл
    макрокоманд, так как листинговый файл формируется при втором
    проходе. На Фиг. 6.11 показано использование в программе

             Microsoft (R) Macro Assembler Version 5.00              1/1/80 01:21:40
             Фиг. 6.11 Вставка макроопределений для 8087             Page     1-1
 
                                           PAGE    ,132
                                           TITLE   Фиг. 6.11 Вставка макроопределений для 8087
 
            0000                     CODE    SEGMENT
                                           ASSUME  CS:CODE,DS:CODE
 
            0000  ????               TWO_BYTE        DW      ?
 
            0002  9B DB E0                       FENI
            0005  9B DE 3E 0000 R                FIDIVR  TWO_BYTE
            000A  9B D9 C1                       FLD
 
            000D                     CODE    ENDS
                                           END
 
             Фиг. 6.11 Вставка макроопределений для 8087
 
    последовательности IF1 ... INCLUDE ... ENDM для макрокоманд
    сопроцессора 8087. Приведены как исходный, так и листинговый файлы
    данной программы. Ассемблер правильно обрабатывает команды
    сопроцессора 8087, опуская печать определений соответствующих
    макрокоманд.




Содержание раздела