2016-07-09 11 views
0

Я создал небольшую загрузочную ОС в сборке с плоским ассемблером. Я называю это PulsarOS. Однако я хочу создать для него программу набора текста. Как я уже сказал, все в сборке x86. Я хочу, чтобы это просто, где пользователь может печатать, и напечатанный текст отображается на экране. Вот код. Он загружается только штрафом в VirtualBox и на моем физическом компьютере:Как напечатать нажатую клавишу клавиатуры в загрузчике сборки?

mov ax, 9ch 
mov ss, ax 
mov sp, 4096d 
mov ax, 7c0h 
mov ds, ax 
;Pulsar Micro-Kernel With Text Editor v1.0.1, running Pulsar OS v1.0.4 
;_______BOOTED CODE PAST THIS POINT______ 
mov ah, 09h 
mov cx, 80d 
mov al, 20h 
MOV SI, HelloString 
CALL PrintString 
mov bl, 80h 
int 10h 

mov ah, 09h 
mov cx, 1000h 
mov al, 20h 
mov bl, 17h 
int 10h 

JMP $ 


PrintCharacter: 

mov ah, 0x0E 
mov bh, 0x00 

INT 0x10 
RET 

PrintString: 

next_character: 
MOV AL, [SI] 
INC SI 
OR AL, AL 
JZ exit_function 
CALL PrintCharacter 
JMP next_character 
exit_function: 
RET 



;In the quotes is the text shown, no ASCII codes here! :) 
HelloString db 'PulsarOS Basic Text Editor v1.0.4 ', 0 



;When building with cmd prompt, type: copy /b ytut.bin ytut.img 
;ytut is the name of the file saved. 
;---------------------------------------- 
times 510-($-$$) db 0 
dw 0xAA55 

Таким образом, это относительно просто, но я хочу просто-как-простой код, который я могу добавить в загружаемой код. Я также довольно новичок в Ассамблее, свежий из своих классов, поэтому объясню это, как будто мне пять. Спасибо!

+2

Возможно, попытка получить нажатие клавиши от пользователя станет полезной отправной точкой. BIOS [Int 16h/ah = 0h] (http://www.ctyme.com/intr/rb-1754.htm) может оказаться полезным ждать нажатия клавиши от пользователя. Это функция блокировки, поэтому, когда вы ее вызываете, она будет ждать нажатия клавиши, возвращающей символ ASCII в _AL_. [Список прерываний BIOS] (http://www.ctyme.com/intr/cat-003.htm) по категориям можно найти в [списке прерываний Ralf Brown] (http://www.ctyme.com/rbrown .htm) –

+0

INT 16h содержит подпрограммы BIOS, которые вы можете использовать. –

+0

Можете ли вы дать мне пример кода? @MichaelPetch Все, что мне нужно, это чтобы пользователь мог вводить текст. Как и NotePad. Кажется, я не могу понять это самостоятельно. –

ответ

0

вы можете найти услуги клавиатуры на 16h BIOS прерывания: INT 16H

ВНИМАНИЕ: Этот метод работает только в «реальном режиме»
в настоящее время им не уверены в «защищенном режиме», но это будет работать для загрузчика или 16bit OS

mov ah,0h ;service 0h Read key press 
int 16h ;Puts the pressed key into al 

, если вы хотите, чтобы он ждать ключа:
здесь функция, которая ждет нажатия клавиши, а затем помещает в аль нажатие:

wait_for_keypress: ;al <= Pressed key | ah <= 0h 
push bx ;push registers 
push cx 
push dx 

wait_for_keypress_loop: 
mov ah,0h 
int 16h 

cmp al,0h ;if you pressed a key exit 
jg wait_for_keypress_end 

jmp wait_for_keypress_loop ;if not loop infinitely until you press a key 

wait_for_keypress_end: 
pop dx ;restore registers 
pop cx 
pop bx 
ret ;return 

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

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