Сборка ARM: .LANCHOR0 - PullRequest
       22

Сборка ARM: .LANCHOR0

2 голосов
/ 30 марта 2019

Я относительно неопытен со сборкой ARM, и мне нужна помощь, чтобы понять несколько строк.Я использовал Godbolt для компиляции кода C ++ 11 с помощью компилятора ARM gcc 8.2 и получил следующие строки сборки:

.L10:
        .word   .LANCHOR0

Я прочитал, что .LANCHOR0 - это якоря разделов, но что это значит?

Я понимаю, что .word и .data могут использоваться вместе, чтобы объявлять переменные и присваивать значения пространствам памяти следующим образом:

        .data           ! start a group of variable declarations
x:      .word   23      ! int x = 23;

Но что означает

.L10:
        .word   .LANCHOR0

делать?Здесь нет слова, предшествующего .word.

Во-вторых, что это значит, когда блок строк .word обрабатывается другим блоком инструкций по сборке, подобным этому?

.L7:
        .word   131586
        .word   .LANCHOR0
_GLOBAL__sub_I_unsigned int atlantic_line_ns::getSimInstAddr<atlantic_line_ns::Cr>():
        mov     r2, #0
        ldr     r3, .L10
        str     r2, [r3]
        str     r2, [r3, #4]
        bx      lr

Заранее спасибо.

ОБНОВЛЕНИЕ

После прочтения документации ARM я понимаю, что

.L7:
        .word   131586
        .word   .LANCHOR0

Выделяет 2 области памяти, сохраняя значения, 131586 и значение в .LANCHOR0, там.Эти места памяти расположены рядом друг с другом?Кроме того, что означает .LANCHR0?

1 Ответ

2 голосов
/ 11 апреля 2019

Следующая строка

.L10:
  .word   .LANCHOR0

указывает ассемблеру выделить 4 байта для хранения адреса кода / данных в метке .LANCHOR0.Сам адрес находится по адресу .L10.Обратите внимание, что и .LANCHOR0, и .L10 являются обычными локальными метками (суффикс просто означает, что компилятор использовал их для различных целей).

Как вы заметили, можно смешивать код и данные только для чтения в сборке, например, в

.L7:
  .word   131586
  .word   .LANCHOR0
  mov     r2, #0
  ldr     r3, .L10

Компилятор часто делает это для объявления данных локальной функции (литеральный пул, статические переменные и т. Д.).Данные из .word строк рядом друг с другом также будут последовательно в объектном коде.

...