Что такое .word, .data и .text в сборке? - PullRequest
2 голосов
/ 26 февраля 2020

Я пытаюсь научиться лучше понимать ассемблер

Может ли кто-нибудь объяснить, что означают .data, .word и .text в следующем коде ??

Я не знаю не понимаю, для чего это нужно и что он делает в этом случае

   .data
    array:
    .word 0x12121212, 0x23232323, 0x34343434, 0x4, 0x5
    .text
    add_array:
    li x1, 0x10000000
    add x3, x0, x0
    lw x2, 0(x1)
    add x3, x3, x2
    lw x2, 4(x1)
    add x3, x3, x2
    lw x2, 8(x1)
    add x3, x3, x2
    lw x2, 12(x1)
    add x3, x3, x2
    lw x2, 16(x1)
    add x3, x3, x2

Ответы [ 2 ]

3 голосов
/ 26 февраля 2020

.word по существу создает некоторое пространство в памяти для хранения данных. Каждый следующий за ним элемент имеет длину 4 байта. Это похоже на создание массива:

Сборка

array:
.word 0x12121212, 0x23232323, 0x34343434, 0x4, 0x5

C

int array[] = {0x12121212, 0x23232323, 0x34343434, 0x4, 0x5};

.text говорит ассемблеру переключиться на сегмент текста (куда идет код), а .data говорит ассемблеру переключиться на сегмент данных (куда идут данные).

0 голосов
/ 26 февраля 2020
.data

Директива .data запускает серию объявлений переменных. Это иногда называют «сегментом данных» .

array:
.word 0x12121212, 0x23232323, 0x34343434, 0x4, 0x5

Здесь переменная с именем array объявляется с пятью элементами, каждый из которых соответствует размеру слова целевого ЦП . Слово обычно обозначает 16 бит (2 байта) или 32 бита (4 байта) памяти, в зависимости от конкретного соглашения c CPU. Другими словами, директива .word выделяет память.

.text
add_array:

Директива .text запускает реальный программный код, иногда называемый «текстовым сегментом» или « сегмент кода ».

Обратите внимание, что существуют различные варианты терминологии сборки, в зависимости от семейства ЦП, с которым вы работаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...