Программа обработки прерываний в сборке - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть задание, которое говорит: внедрить ISR, чтобы получить символ с клавиатуры и сохранить его в очереди, когда он будет сохранен, напечатать его на принтере.

Я написал прерывание клавиатуры, как показано ниже , но я не могу понять, как отправить символ на принтер .. любая помощь?

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;keyboard interrupt service routine

PORTA EQU 500H
CNTR EQU 506H
FIFO DB 256 DUP(?) ;queue
INP DD FIFO ;input pointer
OUTP DD FIFO ;output pointer


KEY PROC FAR USES EAX EBX EDX EDI
MOV EBX,CS:INP ;get pointers
MOV EDI,CS:OUTP
INC BL
.IF BX == DI ;if full
    MOV AL,8
    MOV DX,CNTR
    OUT DX,AL ;disable 82C55 interrupt
.ELSE ;if not full
    DEC BL
    MOV DX,PORTA
    IN AL,DX ;read key code
    MOV CS:[BX],AL ;save in queue
    INC BYTE PTR CS:INP
.ENDIF
IRET
KEY ENDP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;reading a char from fifo

READQ PROC FAR USES EBX EDI EDX
.REPEAT
      MOV EBX,CS:INP ;get pointers
      MOV EDI,CS:OUTP
.UNTIL EBX != EDI ;while empty
MOV AH,CS:[EDI] ;get data
MOV AL,9
MOV DX,CNTR
OUT DX,AL ;enable 82C55 interrupt
INC BYTE PTR CS:OUTP
RET
READQ ENDP
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...