185 похожих чатов

Здравствуйте, решил поинтересоваться osdev, взял код с ядром на Си

с использованием multiboot.
Ядро просто получает адрес:
char *vidptr = (char*)0xb8000;
И выводит надпись.

Я написал простой скрипт, который генерирует рандомно 10 тысяч переменных (int a(номер переменной) = рандомное значение):
т.е:
int a1 = 67324;
int a2 = 12343;
int a3 = 32434;
Скомпилировал, запустил и ядро уходит в перезагрузку (если сгенерировать 1000 тысяч переменных, то все работает).

Собственно вопрос, есть какие-то ограничения на кол-во переменных (хотя мне кажется, я просто что-то делаю не так)?
Если объявить 1 переменную и перезаписывать 100 тысяч раз, то все работает, ядро выводит надпись и не перезагружается.

kernel.asm:
bits 32
section .text
;multiboot spec
align 4
dd 0x1BADB002 ;magic
dd 0x00 ;flags
dd - (0x1BADB002 + 0x00) ;checksum

global start
extern kmain

start:
cli
mov esp, stack_space
call kmain
hlt

section .bss
resb 8192
stack_space:

linker:
OUTPUT_FORMAT(elf32-i386)
ENTRY(start)
SECTIONS
{
. = 0x100000;
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) }
}

kernel.c
void kmain(void)
{


const char *str = "Hello, World!";
char *vidptr = (char*)0xb8000;
unsigned int i = 0;
unsigned int j = 0;

while(j < 80 * 25 * 2) {
vidptr[j] = ' ';
vidptr[j+1] = 0x07;
j = j + 2;
}

j = 0;

while(str[j] != '\0') {
vidptr[i] = str[j];
vidptr[i+1] = 0x07;
++j;
i = i + 2;
}

int a = 1;
...

return;
}

Собираю так:
nasm -f elf32 kernel.asm -o kasm.o
gcc -m32 -c kernel.c -o kc.o
ld -m elf_i386 -T link.ld -o kernel kasm.o kc.o

Запуск:
qemu-system-i386 -kernel kernel

Извините, если глупый вопрос

2 ответов

34 просмотра
Hello, World!- Автор вопроса

Наверно мне также лучше собрать свой toolchain вместо, того чтобы собирать системным gcc. Или возможно использовать clang, насколько мне известно там можно указать target архитектуру. os: Linux

Hello, World!- Автор вопроса

Только что решил проблему увеличив: resb 8192 в 10 раз: resb 81920 Не знаю, нормальное ли решение.

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта