Задать вопрос
mrjbom
@mrjbom

Доступ к массиву объявленному в ассемблере из Си?

В .asm файле объявил кусок памяти размером в 4КБ, который хранит 1024 элемента типа uint32_t.
global array

section .bss
array:
resb 4096


Пытаюсь из Си напечатать адрес массива
extern uint32_t* array;
printf("0x%X\n", array);

Но выводится 0x0.

Однако, если написать
extern uint32_t array[];
printf("0x%X\n", array);

То печатает уже верный адрес.

Почему так?
Вроде как array это адрес начала массива, объявление extern uint32_t* array; об этом и говорит.
  • Вопрос задан
  • 1054 просмотра
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Учебная программа “Разработка программного обеспечения”
    30 месяцев
    Далее
Решения вопроса 1
@none7
Это с точки зрения Ассемблера array это адрес. А с точки зрения Си uint32_t* array это глобальная статическая переменная в которой лежит указатель на uint32_t или соответствующий массив . То, что в Ассемблерах выглядит примерно так array_ptr dd offset array. А так как это bss, то естественно, что в этой переменной лежит ноль.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы