Метка (программирование)
Метка (англ. 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), т. е. смещением между метками.