.long symbol_name
испускает 4 байта со значением = абсолютный адрес этого символа. (Как объяснил @Erik в комментариях.)
Это похоже на то, когда вы пишете bl symbol
- это ссылка на этот символ, а не определение.
, например, в C, int foo = bar;
определяет только foo
, но также не bar
.
A метка - это когда name:
является первым элементом в строке, и определяет символ (с адресом = положением метки).
.long name
- это , а не метка, просто ссылка на символ (который должен быть определен меткой где-то еще, или просто установите в сценарии компоновщика.)
x: .long y
поместит метку x
в начальный адрес слова, содержащего значение y
.