Почему система уходит в бесконечную перезагрузку
Создал простую операционную сисетму на Си и NASM и написал функцию для запси блока на диск с ипользованием прерываний.
int bios_write_block(int block_number, const char* data, int size) {
if (block_number < 0 || size > BLOCK_SIZE) {
return -1; // Ошибка: неверный номер блока или размер
}
// Преобразование номера блока в номер сектора
uint16_t cylinder = block_number / (SECTORS_PER_TRACK * HEADS);
uint16_t head = (block_number / SECTORS_PER_TRACK) % HEADS;
uint16_t sector = (block_number % SECTORS_PER_TRACK) + 1; // Сектора начинаются с 1
// Подготовка к записи
asm volatile (
"int $0x13" // Прерывание BIOS для работы с диском
: // Нет выходных переменных
: "a"(0x30), "b"(0), "c"((cylinder << 8) | (head << 8) | sector), "d"(data), "S"(size)
: "memory"
);
return 0; // Успех
}
при компилировании gcc не выдаёт ошибок,однако когда ОС доходит до выполнения этой функции эмулятор qemu начинает перезагружаться. То же самое происходит и на реальном железе.
вот как я вызвал функцию:
char data[BLOCK_SIZE];
memset(data, 0xAB, BLOCK_SIZE);
int block_number = 0;
int size = BLOCK_SIZE;
int result = bios_write_block(block_number, data, size);
Так как функция вызывается при включении ОС,ошибка происходит сразу и не даёт системе запуститься.
что я делаю не так? почему система уходит в перезагрузку?