4

我正在构建一个 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

我应该怎么办?

4

1 回答 1

1

您的数据段可能未加载到目标中。与您的全新 kernel.bin 文件(实际上是一个 elf 文件)链接后,您在做什么?

于 2011-02-19T17:17:08.587 回答