Метка (программирование) (Bymtg (hjkijgbbnjkfguny))

Перейти к навигации Перейти к поиску

Метка (англ. label) — символьное имя, идентификатор для более удобного указания данных и кода в языках программирования. Позволяет программисту обходиться без вычисления и пересчёта адресов и смещений внутри программы (эти действия за него выполняет компилятор). Несмотря на то, что большинство языков программирования высокого уровня поддерживают операции с метками, их использование крайне нежелательно, так как программный код становится плохочитаемым, и отладка такой программы занимает большее время.

При компиляции каждой метке сопоставляется определённый адрес (число), который заносится в исполняемый модуль. Таким образом, в случае необходимости компилятор может вычислить смещение между метками (разность адресов).

В большинстве языков программирования формат записи метки такой:

название_метки:

Сначала идет название метки (также записанное по определенным правилам — в зависимости от языка программирования), затем двоеточие, затем код или данные, доступ к которым будет осуществляться по названию метки.

  ;…
  mov eax, offset data
  jmp label_2
label_1:
  ;…
label_2:
  ;…
data:
  db "Привет!", 0

Во время ассемблирования метке data будет сопоставлено число (адрес первого байта строки «Привет!») и вместо 'offset data' в первой строке будет записано это число.

Во второй строке примера осуществляется безусловный переход (jump) на инструкции, следующие после метки label_2. Если адрес абсолютный (т. е. аргументом команды перехода является сам адрес), то во второй строке вместо label_2 будет записан адрес метки label_2. Если же переход относительный (задается смещением относительно текущей метки), тогда label_2 в этой же (второй) строке будет заменён на разность адресов (label_2 — label_1), т. е. смещением между метками.