2016-09-28 8 views
0

У меня есть этот код:ASM Замена сканкоды с ASCII-символов

bits 16 

org 0x7C00 
start: jmp main 

key: dw 0x1e, 'a', 0x30, 'b' 

print: 
    mov ah, 0x0E 
    int 0x10 

keyboard: 
    cli 
    in al, 0x64 
    test al, 1 
    jz return 
    test al, 0x20 
    jnz return 

    in al, 0x60 

    call convert 

    call print 
    sti 

convert: 
    mov bx, 0 
    .LOOP: 
     cmp al, [key+bx] 
     je .conv 
     add bx, 2 
     jmp .LOOP 
    .conv: 
     mov al, [key+bx+1] 
     ret 

return: 
    ret 

main: 
    call keyboard 
    jmp main 

times 510 - ($-$$) db 0 
dw 0xAA55 

Он проверяет keypressess и каждый раз, когда я нажимаю кнопку, я сохранить его зарегистрировать Аль, а затем хотите распечатать его.

Но это только scancode, который сохраняется, и мне нужно заменить его символом ASCII, я делаю это с помощью «ключа» массива, но он не работает и выводит только 1 ключ, а затем программу просто лагает.

+0

Конечно, если нажать клавиши не распознают. У вас есть только одно условие выхода: когда он находит соответствие для кода ключа. Если это не так, он будет продолжать и продолжать через память, пока не найдет ее. И если в этом сегменте памяти не будет ни одного, он будет зацикливаться навсегда. –

+0

Я только нажимаю a и b .. –

+3

Возможно, вам нужен массив байтов ('db')? –

ответ

0

Я установил его отделяющих keydowns и keyups Код:

bits 16 

org 0x7C00 
mov cl, 0 
start: jmp main 

keydown: db 0x1e, 'a', 0x30, 'b' 

keyup: db 0x9e, 'a', 0xb0, 'b' 

print: 
    mov ah, 0x0E 
    int 0x10 

keyboard: 
    cli 
    in al, 0x64 
    test al, 1 
    jz return 
    test al, 0x20 
    jnz return 

    in al, 0x60 

    cmp cl, 0 
    je keypress 
    jmp keyrelease 

keyrelease: 
    mov cl, 0 
    sti 
    ret 

keypress: 
    mov cl, 1 
    call convert 
    call print 
    sti 
    ret 

convert: 
    mov bx, 0 
    .LOOP: 
     cmp al, [keydown+bx] 
     je .conv 
     add bx, 2 
     jmp .LOOP 
    .conv: 
     mov al, [keydown+bx+1] 
     ret 

return: 
    ret 

main: 
    call keyboard 
    jmp main 

    times 510 - ($-$$) db 0 
    dw 0xAA55 
+2

Рад, что вы решили свою проблему, но для будущих читателей я вынужден упомянуть, что это очень плохой метод для того, чтобы рассказывать прорыв от изготовления сканнодов. Тестирование бит7 scancode (установленное на «ketrelease») - единственный способ пойти. Некоторые клавиши отправляют несколько сканкодов! Также в целом код в этом ответе в лучшем случае неуклюж. –

+0

Я знаю, что это плохой код, я новичок в ассемблере, но спасибо за вашу помощь! –

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

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