2010-04-27 2 views
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 

Что я должен делать?

+2

Как, в частности, это не удается? Какие выходные или ошибки вы видите? –

+0

Он выдаёт символ «A». Это работает putchar («A»). Но putchar ('h') не работает, что означает, что условие в выражении if терпит неудачу. Но я инициализировал str = «привет»; Тогда что не так? – brainbarshan

+0

Не могли бы вы попытаться распечатать то, что есть, сделать 'putchar (str [0])', чтобы увидеть, что вы найдете. Я не смотрел внимательно, но вы хотите убедиться, что инициализация, которую вы думаете, вы действительно работали правильно. Затем мы можем диагностировать проблемы из того, что мы видим. – Ukko

ответ

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^