У меня есть этот код:
char* vidmem = (char*)0xb8000;
int main()
{
vidmem[0] = 'x';
}
но это действует как vidmem не инициализируется. если вместо этого я делаю что-то вроде этого:
char* vidmem;
int main()
{
vidmem = (char*)0xb8000;
vidmem[0] = 'x';
}
это работает отлично. Почему?
Я использую эти строки для компиляции и ссылки:
gcc -c main.c -o main.o -ffreestanding -fno-exceptions -m64
gcc -m64 -Wl,--build-id=none -static -nostdlib -nodefaultlibs -lgcc main.obj [...] -T linker.ld -o out.bin
используя этот файл компоновщика:
ENTRY(_start)
SECTIONS
{
. = 0x7C00;
.bss :
{
*(.bss);
}
.text :
{
*(.text);
}
}
На самом деле есть некоторый ассемблерный код, вызывающий этот C-файл, но это не должно иметь значения. Я делаю что-то не так с gcc? Как я могу это исправить?