Je construis un système d' exploitation 16 bits. Mais le tableau de caractères ne semble pas fonctionner.La construction d 'un tableau de caractères OS à 16 bits ne fonctionne pas
Voici mon exemple de code du noyau:
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)
) ;
}
Il imprime:
A
cela signifie que la fonction putchar fonctionne correctement, mais
if(str[0]== 'h')
putchar('h');
ne fonctionne pas.
Je compilez par:
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
Que dois-je faire?
Comment échoue-t-il en particulier? Quel résultat ou erreurs voyez-vous? –
Il donne le caractère 'A'. C'est le putchar ('A') qui fonctionne. Mais le putchar ('h') ne fonctionne pas, ce qui signifie que la condition dans si l'instruction échoue. Mais j'ai initialisé str = "bonjour"; Alors qu'est-ce qui ne va pas? – brainbarshan
Pourriez-vous essayer d'imprimer ce qui est là, faire un 'putchar (str [0])' pour voir ce que vous trouvez. Je n'ai pas regardé attentivement mais vous voulez vous assurer que l'initialisation que vous pensez avoir faite a vraiment bien fonctionné. Ensuite, nous pouvons diagnostiquer les problèmes de ce que nous voyons. Putchar (str [0]) imprime un signe de flèche. – Ukko