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

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

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

CMP AL, 7h                       ; ожидание СЕДЬМОГО символа

JNE Klav7                         ; переход на Klav7, если в буфере НЕТ семи символов

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

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]                 ; по полученному адресу считывается число,

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

CMP AL, 2h

JA Res                                  ; если больше то на Res

MOV [DI+2], AL              ;3 заносим в ОЗУ режим работы

MOV AL, С1h                   ; сброс ККД

OUT 03h, AL     

XOR AX, AX

XOR DX, DX

;---------------------------РАБОТА С ТАЙМЕРОМ----------------------------B6Bh:                                 ; вычисление константы пересчёта

MOV AX, 1388h              ;3 загрузка числа 5000

MOV DX, [DI+6]              ;3 загрузка из памяти частоты

DIV DX

MOV DX, 30C0h              :3

SUB AX, DX

MOV DX, 0F0h                 ;3

DIV DX              

XOR DX, DX

MOV DL, AL

MOV AL,34h                    ; инициализация таймера

OUT 08h, AL

MOV AL, DL                     ; загрузка константы пересчёта

OUT 08h, AL                     ; в таймер          

;определение режима работы

MOV AL, [DI+2]              ;3

CMP AL, 0h

JE M25

CMP AL, 1h

JE M26

MOV BX, 100h                 ;3 по этому адресу к примеру лежат выборки синуса

JMP M27

M25:                                   ;BA5h

MOV BX, 200h                ;3

JMP M27

M26:

MOV BX, 300h                ;3

M27:         

STI                                       ;1 разрешение прерывания

HLT                                     ;1                                        

CIKL:

MOV SI, 0000h                 ;3

HLT                                     ;1 ожидание прерывания

;;Начало подпрограммы обработки прерывания

BB3h:    DEC SP                               ;1 уменьшение содержания

DEC SP                               ;1 стека

DEC SP                               ;1 чтобы не было

DEC SP                               ;1 переполнения

DEC SP                               ;1

INC BX                               ;1 N=N+1

MOV AL, [SI]                    ; загрузка очередного отсчёта в аккумулятор

MOV DL, [DI+4]             ;3             

MUL DL

OUT 04h, AL                     ; вывод текущего отсчёта на ЦАП

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

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

CMP AL, 0h                       ;ожидание первого символа

JNE Res                                             ; переход на RES

CMP SI, 0h                         ;3 N>240?

JA CIKL                             ; переход на CIKL если N>240

HLT                                     ;1

; BD0

7F:

BB3h   

0000h 

1F0h:

JMP     00000815h         ; переход на основную программу