16. Определение меток

Меткаэто символьное имя, обозначающее ячейку памяти, которая содержит некоторую команду.

    Метка в языке ассемблера может содержать следующие символы:
  • Буквы (от A до Z и от a до z),
  • Цифры (от 0 до 9, не первым символом),
  • Знак вопроса (?)
  • Точка (.) (только первый символ),
  • Знак «коммерческое эт» (@),
  • Подчеркивание (_),
  • Доллар ($)).

Примеры меток: COUNT, PAGE25, $E10.
Если метка располагается перед командой процессора, сразу после нее всегда ставится символ «:»

some_loop:
      lodsw                ; cчитать слово из строки,
      cmp      ax,7        ; если это 7 - выйти из цикла
      loopne   some_loop

Когда метка стоит перед директивой ассемблера, она обычно оказывается одним из операндов этой директивы и двоеточие не ставится:

codesg  segment
        lodsw                ; cчитать слово из строки,
        cmp      ax,7        ; если это 7 - выйти из цикла
codesg  ends

Метка имеет атрибуты: сегмент, смещение, тип:

  • NEAR – ближняя метка
  • FAR – дальняя метка. Переход возможен также из другого сегмента.

Метку в программе можно задать двумя способами:

  • <имя>:<команда> (только ближние метки) 
  • <имя>:LABEL <тип метки> (любую метку)

Директива LABEL определяет метку и задает ее тип. Тип может быть одним из: BYTE (байт), WORD (слово), DWORD (двойное слово), FWORD (6 байт), QWORD (учетверенное слово), TBYTE (10 байт), NEAR (ближняя метка), FAR (дальняя метка). Метка получает значение, равное адресу следующей команды или следующих данных, и тип, указанный явно.

метка LAYBEL BYTE

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

метка   equ      выражение
truth    equ      1
message1 equ      'Try again$'
var2     equ      4[si]
         cmp      ax,truth      ; cmp ax,1
         db       message1      ; db 'Try again$'
         mov      ax,var2       ; mov ax, 4[si]

Директива = эквивалентна EQU, но определяемая ею метка может принимать только целочисленные значения. Кроме того, метка, указанная этой директивой, может быть переопределена.

17.07.2015