Разработка микропроцессорной системы. Разработка интерфейсных устройств ввода - вывода. Расчёт электрического сопряжения адресных цепей., страница 18

81A8  FE C5                  inc CH     ;увеличение номера столбца

81AA  EB F8                 jmp Next1  ;переход к следующему сдвигу

81AC                         Find1:

;номер строки - в CL, номер столбца - в СН

81AC  22 C9                   and CL,CL  ;нулевая ли строка?

81AE  75 23                    jnz Next2

;если нулевая:

81B0  80 FD 00              cmp CH,0

81B3  75 0C                    jne Next2_1

;реакция на клавишу "УСТАВКА"

81B5  26: A0 0400          mov AL,ES:[0400H] ;установка признака уставки

81B9  0C 80                    or AL,10000000B

81BB  26: A2 0400          mov ES:[0400H],AL

81BF  EB 61                    jmp Exit1

81C1                         Next2_1:

81C1  80 FD 01              cmp CH,1

81C4  75 05                     jne Next3_1

;реакция на клавишу "ВЫВОД"

81C6  E8 0064                call Output_Ind ;вывод на индикаторы текущего состояния МПС

81C9  EB 57                   jmp Exit1

81CB                         Next3_1:

81CB  80 FD 02             cmp CH,2

81CE  75 52                    jne Exit1  ;нажата клавиша без реакции

;реакция на клавишу "ОСТАНОВ"

81D0  F4                        hlt        ;останов системы

81D1  EB 4F                  jmp Exit1

81D3                         Next2:

;Строка не нулевая, то есть нажата цифровая клавиша

;Определяем - находится ли система в режиме уставки

81D3  26: 8A 1E 0401  mov BL,ES:[0401H]

81D8  F6 C3 80            test BL,10000000B ;проверка старшего разряда

81DB  74 45                  jz Exit1   ;если не уставка, то реагируем на цифровую клавишу

81DD  80 E3 03            and BL,00000011B ;теперь в BL номер вводимой цифры

;Определение вводимой цифры

81E0  8A C1                 mov AL,CL

81E2  FE C8                 dec AL

81E4  B4 04                  mov AH,4

81E6  F6 E4                 mul AH

81E8  02 C5                  add AL,CH  ;в AL теперь будет код вводимой цифры

;(младшие 4 разряда)

81EA  32 FF                 xor BH,BH  ;в ВХ - номер вводимой цифры

81EC  8A F3                mov DH,BL  ;номер цифры - в DH

81EE  D1 EB                shr BX,1   ;определение номера байта, в который

;пойдет информация

81F0  72 04                  jc Next3

;загрузка в старшие 4 разряда

81F2  B1 04                  mov CL,4

81F4  D2 E8                 shr AL,CL

81F6                         Next3:

81F6  26: 8A 97 0300   mov DL,ES:[0300H+BX]

81FB  0A D0                or DL,AL   ;заполнение промежуточной уставки

81FD  26: 88 97 0300   mov ES:[0300H+BX],DL

8202  80 FE 02              cmp DH,2   ;проверка на окончание ввода

8205  75 16                    jnz Next4

;завершение ввода уставки

8207  26: C6 06 0401 00 mov byte ptr ES:[0401H],0

820D  26: A0 0300         mov AL,byte ptr ES:[0300H] ;установка новой уставки

8211  26: A2 0400         mov byte ptr ES:[0400H],AL

8215  26: C6 06 0300 00 mov byte ptr ES:[0300H],0

821B  EB 05                   jmp Exit1

821D                         Next4:

821D  26: FE 06 0191   inc byte ptr ES:[0401] ;увеличение счетчика цифр

8222                         Exit1:  ;Завершение прерывающей программы

8222  E4 02                    in AL,02H  ;сброс триггера запроса прерывания от клавиатуры

8224  0C 20                    or AL,00100000B ;прерывания в клавиатуре

8226  E6 02                    out 02H,AL

;Обычное завершение прерывания

;Команда СКО2

8228  B0 20                    mov AL,00100000B

822A  E6 60                   out 60H,AL

822C  CF                       iret       ;возврат из прерывающей программы

822D                         Input_Keyb         endp

822D                         Output_Ind      proc    near

;Данную процедуру по заданию реализовывать не нужно

822D                         Output_Ind      endp

end Start