Инициализация сегмента данных, контроллера клавиатуры и дисплея. Ожидание первого символа, страница 3

IN AL, 03h                         ; считывание слова состояния ККД

AND AL,07h                     ; определение кол-ва символов в ОЗУ клав-ры

CMP AL, 5h                       ;ожидание ПЯТОГО символа

JNE Klav5                         ; переход на Klav5, если в буфере нет ПЯТИ символов

MOV AL, 45h                   ; чтение символа из ОЗУ клавиатуры

OUT 03h, AL                  

IN AL, 02h        

MOV BL, AL                     ; ПРЕОБРАЗОВАНИЕ РЕЗУЛЬТАТА В 16-РИЧНУЮ ФОРМУ

MOV BH, 00h

AND AL, 07h                    ; в AL – номер строки

AND BL, 38h                    ;3 в BL – номер столбца

MUL [DI+10h]                 ;3 номер строки умножается на 4

ADD BX, AX                    ; к результату добавляется номер столбца

ADD BX, 80Bh                 ;4 и адрес начала таблицы

MOV AL, [BX]                 ; по полученному адресу считывается число,

; соответствующее нажатой клавише

MOV AH,AL     

SUB BX, 0Bh                    ;3 ПРЕОБРАЗОВАНИЕ СИМВОЛА В КОД

MOV AL, 95h                   ; команда для вывода символа на индикатор

OUT 03h, AL

MOV AL, AH

XOR AH, AH  

ADD BX, AX            

MOV AL, [BX]                 ; считывание кода из таблицы

OUT 02h, AL                   ; вывод символа на индикатор            

;A52h

MOV AL, AH                   

CMP AL, 0h

JE M15

CMP AL, 1h

JE M16

CMP AL, 2h

JE M17

CMP AL, 3h

JE M18

CMP AL, 4h

JE M19

CMP AL, 5h

JE M20

CMP AL, 6h

JE M21

CMP AL, 7h

JE M22

CMP AL, 8h

JE M23

ADD AL, 51h

JMP M24

M15:

ADD AL, 0h

JMP M24

M16:

ADD AL, 9h

JMP M24

M17:

ADD AL, 12h

JMP M24

M18:

ADD AL, 1Bh

JMP M24

M19:

ADD AL, 24h

JMP M24

M20:

ADD AL, 2Dh

JMP M24

M21:

ADD AL, 36h

JMP M24

M22:

ADD AL, 3Fh

JMP M24

M23:

ADD AL, 48h

M24:

XOR AH, AH

ADD DX, AX

XOR AX, AX

Klav6:                             ; AD4h       ; работа с ШЕСТЫМ символом

IN AL, 03h                         ; считывание слова состояния ККД

AND AL,07h                     ; определение кол-ва символов в ОЗУ клав-ры

CMP AL, 6h                       ;ожидание ШЕСТОГО символа

JNE Klav6                         ; переход на Klav6, если в буфере нет шести символов

MOV AL, 46h                   ; чтение символа из ОЗУ клавиатуры

OUT 03h, AL                   

IN AL, 02h       

MOV BL, AL                     ; ПРЕОБРАЗОВАНИЕ РЕЗУЛЬТАТА В 16-РИЧНУЮ ФОРМУ

MOV BH, 00h

AND AL, 07h                    ; в AL – номер строки

AND BL, 38h                    ;3 в BL – номер столбца

MUL [DI+10h]                 ;3 номер строки умножается на 4

ADD BX, AX                    ; к результату добавляется номер столбца

ADD BX, 80Bh                 ;4 и адрес начала таблицы

MOV AL, [BX]                 ; по полученному адресу считывается число,

; соответствующее нажатой клавише

MOV AH,AL     

SUB BX, 0Bh                    ;3 ПРЕОБРАЗОВАНИЕ СИМВОЛА В КОД

MOV AL, 96h                   ; команда для вывода символа на индикатор

OUT 03h, AL

MOV AL, AH

XOR AH, AH   

ADD BX, AX            

MOV AL, [BX]                 ; считывание кода из таблицы

OUT 02h, AL                    ; вывод символа на индикатор            

MOV AL, AH

XOR AH, AH

ADD DX,AX

MOV [DI+6], DX              ;3 заносим в ОЗУ частоту

XOR AX,AX

XOR DX,DX

Klav7:                                ;B2Eh    ; работа с седьмым числом