В настоящее время я работаю над самодельным проектом ОС. Я успешно написал загрузчик, который переключает компьютер в защищенный режим и загружает ядро, которое написано в c. Мое ядро загружается нормально, но у меня проблема с функциями вызова вне main(). Кажется, что функция выполнена нормально, но из того, что я могу сказать, ни один из аргументов не передается. Я не могу понять, почему это так, и надеюсь, что кто-то здесь скажет мне, в чем моя проблема. Ниже приведен код для моего ядра, а также команды, используемые для его компиляции.Аргументы не передаются функции в c Ядро
EDIT: Перечитав мой вопрос, я думаю, мне нужно уточнить, что я имею в виду, когда говорю, что аргументы не передаются. Когда я вызываю print_char, независимо от того, какие значения передаются в качестве аргументов, это не имеет никакого эффекта. Однако, если я изменяю переменные внутри функции, она отлично работает.
kernel.c
#define VIDEO_ADDRESS 0xb8000
#define WHITE_BLACK 0x0f
void print_char(char character, int col, int row, char att_byte) {
unsigned char* vid_mem = (unsigned char*) VIDEO_ADDRESS;
int offset;
if (!att_byte) {
att_byte = WHITE_BLACK;
}
offset += 2*col;
offset += 80*row;
vid_mem[offset] = character;
vid_mem[offset+1] = att_byte;
}
void start() {
clear_screen();
print_char('X', 0, 0, WHITE_BLACK);
}
build.bat
nasm boot.asm -f bin -o boot.bin
nasm kernel_entry.asm -f elf -o kernel_entry.o
gcc -ffreestanding -c kernel.c -o kernel.o
ld -T NUL -o kernel.tmp -Ttext 0x1000 kernel_entry.o kernel.o
objcopy -O binary -j .text kernel.tmp kernel.bin
type boot.bin kernel.bin > OS.bin
qemu-system-i386 OS.bin
Пожалуйста, разместите вывод своего скрипта 'build.bat' –
Каково значение макроса' WHITE_BLACK'? Почему вы говорите, что никакие аргументы не должны проходить? –
Возможно, вывод 'build.bat' уже говорит вам, что' offset' был неинициализирован. –