4
Я строю 16-разрядную операционную систему. Но массив символов, похоже, не работает.Здание 16 бит os - массив символов не работает
Вот мой пример кода ядра:
asm(".code16gcc\n");
void putchar(char);
int main()
{
char *str = "hello";
putchar('A');
if(str[0]== 'h')
putchar('h');
return 0;
}
void putchar(char val)
{
asm("movb %0, %%al\n"
"movb $0x0E, %%ah\n"
"int $0x10\n"
:
:"m"(val)
) ;
}
Он печатает:
A
, что означает, что putchar функция работает нормально, но
if(str[0]== 'h')
putchar('h');
не работает.
Я компиляции по:
gcc -fno-toplevel-reorder -nostdinc -fno-builtin -I./include -c -o ./bin/kernel.o ./source/kernel.c
ld -Ttext=0x9000 -o ./bin/kernel.bin ./bin/kernel.o -e 0x0
Что я должен делать?
Как, в частности, это не удается? Какие выходные или ошибки вы видите? –
Он выдаёт символ «A». Это работает putchar («A»). Но putchar ('h') не работает, что означает, что условие в выражении if терпит неудачу. Но я инициализировал str = «привет»; Тогда что не так? – brainbarshan
Не могли бы вы попытаться распечатать то, что есть, сделать 'putchar (str [0])', чтобы увидеть, что вы найдете. Я не смотрел внимательно, но вы хотите убедиться, что инициализация, которую вы думаете, вы действительно работали правильно. Затем мы можем диагностировать проблемы из того, что мы видим. – Ukko