2010-04-27 99 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文件建立鏈接後,你在做什麼?實際上它是一個精靈文件?

相關問題