Шаг 50.
Директивы и средства ассемблера. Метки

    На этом шаге мы рассмотрим правила описания и использования меток.

    Начиная с этого и в последующих шагах мы рассмотрим те конструкции, которые мы уже использовали или будем использовать при создании программ.

    Метка с двоеточием после имени определяет адрес следующей за меткой команды.

    Директива LABEL позволяет определить явно тип метки. Значение же определенной таким образом метки равно адресу команды или данных, стоящих далее. Например:

   LABEL   L1   DWORD

    Выражение <имя> PROC определяет метку, переход на которую обычно происходит по команде CALL. Блок кода, начинающийся с такой метки, называют процедурой. Впрочем, переход на такую метку можно осуществлять и с помощью JMP, как, впрочем, и команду CALL можно использовать для перехода на обычную метку.

    В строке за меткой может стоять директива резервирования данных, например:

    ERR DB   'Ошибка'
или
    NUM   DWORD   0

    С точки зрения языка высокого уровня таким образом мы определяем глобальную переменную. С точки же зрения ассемблера нет никакой разницы между командой и данными, поэтому между меткой, определяющей команду, и меткой, определяющей данные, нет никакой разницы. Раз уж речь пошла о данных, перечислим их типы:

    С помощью директивы EQU в терминах языков высокого уровня определяются константы. Например: MES EQU "ERROR!", LAB EQU 145H. С noмощью EQU значение данной метке может быть присвоено только один раз. С правой стороны от EQU может стоять выражение с использованием арифметических, логических и битовых операций. Вот эти операции: +, -, *, /, MOD - остаток от деления, AND, OR, NOT, XOR, SHR, SHL. Используются также операции сравнения: EQ, GE, GT, LE, LT, NE. Выражение с операцией сравнения считается логическим и принимает значение 0, если условие не выполняется, и 1 - если выполняется.

    С помощью директивы - можно присваивать только целые значения, но зато производить переприсваивание. Заметим, что выражение может являться операндом команды: MOV EAX,16*16-1.

    Метка $ всегда определяет текущий адрес.

    В MASM метки, стоящие в процедуре, автоматически считаются локальными и, следовательно, имена меток в процедурах могут дублироваться. В TASM все метки по умолчанию считаются глобальными. Чтобы сделать метки, стоящие в процедуре локальными, они должны иметь префикс @@, а в начале программы следует указать директиву LOCALS.

    На следующем шаге мы остановимся на структурах.




Предыдущий шаг Содержание Следующий шаг