2010-04-27 90 views
4

我正在构建一个16位操作系统。但字符数组似乎不起作用。建设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 

我应该怎么做:

我通过编译呢?

+2

特别是它如何失败?你看到什么输出或错误? – 2010-04-27 14:52:22

+0

它给出输出字符'A'。那是putchar('A')正在工作。但是putchar('h')不起作用,这意味着if语句中的条件失败。但我初始化了str =“hello”;那么什么是错的? – brainbarshan 2010-04-27 15:37:06

+0

你可以尝试打印什么,做一个'putchar(str [0])'看看你找到了什么。我没有仔细观察,但你想确保初始化你认为你确实工作正确。然后我们可以根据我们所看到的来诊断问题。 – Ukko 2010-04-27 17:14:53

回答

1

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

相关问题