Сборка 16 битной ОС - символьный массив не работает - PullRequest
4 голосов
/ 27 апреля 2010

Я строю 16-битную операционную систему. Но массив символов, похоже, не работает.

Вот мой пример кода ядра:

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

Что мне делать?

1 Ответ

1 голос
/ 19 февраля 2011

Ваш сегмент данных, вероятно, не загружен в цель. Что вы делаете после ссылки с вашим новым файлом kernel.bin, который на самом деле является файлом elf?

...