Сборка - контроллер ввода / вывода (драйвер клавиатуры) - PullRequest
0 голосов
/ 09 марта 2012

Я прочитал книгу о сборке. Это дает пример драйвера ввода-вывода клавиатуры:

section .data
ESC_KEY EQU 1BH         ; ASCII code for ESC key
KB_DATA  EQU 60H        ; 8255 port PA

section .text 
global _start
_start: 
key_up_loop:
    ;Loops until a key is pressed i.e., until PA7 = 0.
    ; PA7 = 1 if a key is up.
    in AL,  KB_DATA     ; read keyboard status & scan code
    test AL, 80H            ; PA7 = 0?
    jnz key_up_loop      ; if not, loop back
and AL,7FH      ; isolate the scan code

..Translate scan code to ASCII code in AL..

cmp AL,0        ; ASCII code of 0 => uninterested key
je key_down_loop

cmp AL,ESC_KEY  ; ESC key---terminate program
je done

display_ch:
     ; char is now in AL
..Print character AL to screen..
key_down_loop:
    in AL,KB_DATA       
    test AL, 80H        ; PA7 = 1?
    jz key_down_loop    ; if not, loop back

    mov AX,0C00H                   ; clear keyboard buffer
    int 21H                                ; (System interrupt)

    jmp key_up_loop
Done:
    mov AX,0C00H                   ; clear keyboard buffer
    int 21H           

..Exit Program..

Я не понял инструкции: test AL, 80H, Что такое цель и как она таким образом проверяет, что PA7 = 0?

РЕДАКТИРОВАТЬ : Я также буду рад получить разъяснения по поводу раздела key_down_loop. Зачем нам это нужно? мы можем сделать следующее изменение:

cmp AL,0        ; ASCII code of 0 => uninterested key
je key_up_loop

и тогда вся часть key_down_loop бесполезна. Что я пропустил?

Спасибо.

1 Ответ

0 голосов
/ 09 марта 2012

Инструкция test делает логические and операндам и устанавливает флаги в соответствии с результатом.Операнды не изменены.test инструкция для and, что cmp инструкция для sub.

По какой-то странной причине «позвольте мне погуглить, что для вас» больше не допускается при переполнении стекаможет быть обидеть?), поэтому прямая ссылка: http://www.google.de/search?q=test+x86+instruction

PA7, очевидно, где-то бит 7.Я оставляю это на ваше усмотрение, чтобы выяснить, как это переводится на 80H.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...