Я сейчас читаю tutorial на развитие Raspberry Pi OS и было интересно, о том, как локальные метки используются в этом фрагменте кода (GCC ARM ассемблер):ARM Монтаж локальных меток
...
b 2f
1:
stmia r4!, {r5-r8}
2:
cmp r4, r9
blo 1b
...
Если вы используете 1:
в качестве метки вы должны указать либо f
, либо b
после инструкции перехода, чтобы ассемблер знал, в каком направлении нацелен прыжок. Насколько я знаю, вы также можете использовать это:
...
b .2
.1:
stmia r4!, {r5-r8}
.2:
cmp r4, r9
blo .1
...
Я думаю, что этот вариант гораздо менее запутанный (локальные метки также отмечены точкой в сборке x86), потому что нет никакого дополнительного письма после метки Справка. Я проверил полученный машинный код, и это то же самое. So мои вопросы:
Зачем вам использовать один вариант по сравнению с другим?
Для чего необходимо указать направление прыжка либо
f
, либоb
?
Я думаю, что ваше использование местных ярлыков неверно. Это те, что были в форме «N:». «.L» - это имена локальных символов. Причина, по которой вы хотите использовать локальные метки, заключается в том, что в большом файле сборки вы можете определить два «.Loop:», например, а затем ассемблер будет жаловаться на это. Подумайте, например, если вы скопируете вставить другую часть сборки. Вы не можете быть уверены, что не столкнетесь с конфликтом имен. Таким образом, требуются локальные метки. (Https://sourceware.org/binutils/docs/as/Symbol-Names.html) – auselen