2013-08-05 2 views
-1

Я пытаюсь написать ядро, и вам нужно добавить базовую клавиатуру ввода-вывода. Я сделал некоторые исследования, узнал капельку ASM, и написал:Будет ли работать этот драйвер клавиатуры?

char GetChar(void) 
{ 
    extern int _a_Char; 

    asm(
    ".code16\n" 
    ".global _a_Char\n"// So we can get the char in C 
    "_a_GetChar:\n" 
    "\tmov ah, 10h\n"// Set BIOS Function 
    "\tint 16h\n"//Interrupt 16 (Call ah=10h) 
    "\tmov _a_Char, al\n"//Move char to _a_Char 
    ".code32\n" 
    ); 

return (char)_a_Char; 
} 

Я не опытный в ASM, так что я не уверен, если это будет работать так, как я хочу его. Да, и если это помогает, вот только код ASM, что внутри строк в моем коде C:

.global _a_Char 

_a_GetChar: 
    mov ah, 10h 
    int 16h 
    mov _a_Char, al 

Я просто хотят знать, если это работает или нет, и если это не так, что Я должен измениться. Спасибо, всем вам народы.

+0

Это работало, когда вы пробовали? –

+0

Нет, я планирую установить его на виртуальную машину, но сначала нужно получить GRUB. Просто хотел знать, была ли моя ASM испорчена или нет. – cubician

+1

Я не вижу, где вы удаляете символ из буфера клавиатуры. –

ответ

0

Этот ответ касается вашей методологии разработки. В принципе, при разработке любой функции получить простую реализацию для работы, а затем разработать более сложные решения.

В вашем случае сначала разработайте GetChar() в C. Позже, когда у вас есть время и верьте, что версия asm будет работать быстрее, тогда в это время замените GetChar() кодом asm.

При всей искренности и доброжелательности метрика заключается в том, что если вам нужно спросить, работает ли какой-то код asm, вы, вероятно, НЕ должны его писать.

+0

вы правы, но я имею доступ к функциям BIOS, которые, я уверен, вы не можете позвонить в 'C', поэтому я использую' ASM'. – cubician