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; об этом и говорит.
  • Вопрос задан
  • 1005 просмотров
Решения вопроса 1
@none7
Это с точки зрения Ассемблера array это адрес. А с точки зрения Си uint32_t* array это глобальная статическая переменная в которой лежит указатель на uint32_t или соответствующий массив . То, что в Ассемблерах выглядит примерно так array_ptr dd offset array. А так как это bss, то естественно, что в этой переменной лежит ноль.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы