Проектирование устройства состоящего из 15 микросхем, страница 4

;#######################################################################

;             ввод данных с клавиатуры в текущую позицию

;#######################################################################

Input:

              mov CL, count;   счетчик числа ввод символов

              jz Input_out;        если 0 то сразу на выход

              cmp CL, 1;          1 - младший разряд данных

              je data_L;

              cmp CL, 2;          2 - старший данных

              je data_H;

              cmp CL, 3;          3 - младший (0) разряд адреса

              je Ad_0;

              cmp CL, 4;

              je Ad_1;

              cmp CL, 5;

              je Ad_2;

              cmp CL, 6;          6 - старший разряд адреса

              je Ad_3;

              mov count, 0;      если нет совпадений

              jmp Input_out;

Ad_3:

; на дисплей то что ввели

              mov СL, 87h;      запись в ОЗУ отображния (80h) по адресу 07h

              mov KKD_RU, СL;          выдача команды

              push BX;             запоминаем т к потом туда запишется код для индикатора

              call Decod;          декодируем в код семисегментного индикатора

              mov KKD_D, BL;             запись в ОЗУ отображения

; в регистр хранящий адрес

              pop BX;               достаем обратно

              rol BX, 12;          сдвиг в самую старшую тетраду

              and BX, F000h;   оставим только ее, хотя там больше ничего быть не должно

              mov AX, BX;      в АХ там хранится адрес

              dec Count;           позиция на одну меньше

ret;

Ad_2:

; на дисплей то что ввели

              mov СL, 86h;      запись в ОЗУ отображния (80h) по адресу 06h

              mov KKD_RU, СL;          выдача команды

              push BX;             запоминаем т к потом туда запишется код для индикатора

              call Decod;          декодируем в код семисегментного индикатора

              mov KKD_D, BL;             запись в ОЗУ отображения

; в регистр хранящий адрес

              pop BX;               достаем обратно

              rol BX, 8;

              and BX, 0F00h;

              orl AX, BX;

              dec Count;           позиция на одну меньше

ret;

Ad_1:

; на дисплей то что ввели

              mov СL, 85h;      запись в ОЗУ отображния (80h) по адресу 05h

              mov KKD_RU, СL;          выдача команды

              push BX;             запоминаем т к потом туда запишется код для индикатора

              call Decod;          декодируем в код семисегментного индикатора

              mov KKD_D, BL;             запись в ОЗУ отображения

; в регистр хранящий адрес

              pop BX;               достаем обратно

              rol BX, 4;

              and BX, 00F0h;

              orl AX, BX;

              dec Count;           позиция на одну меньше

ret;

Ad_0:

; на дисплей то что ввели

              mov СL, 84h;      запись в ОЗУ отображния (80h) по адресу 04h

              mov KKD_RU, СL;          выдача команды

              push BX;             запоминаем т к потом туда запишется код для индикатора

              call Decod;          декодируем в код семисегментного индикатора

              mov KKD_D, BL;             запись в ОЗУ отображения

; в регистр хранящий адрес

              pop BX;               достаем обратно

              and BX, 000Fh;

              orl AX, BX;

              cmp AX, 999;      проверка на количество 1000

              jnge vse_ok;        если не больше или равно то дальше

              mov AX, 999;     иначе пишим макс допустимое значени

vse_ok:

              call indic;            отображаем то что по этому адресу

              dec Count;           позиция на одну меньше

ret;

data_H:

; на дисплей то что ввели

              mov СL, 81h;      запись в ОЗУ отображния (80h) по адресу 01h

              mov KKD_RU, СL;          выдача команды

              push BX;             запоминаем т к потом туда запишется код для индикатора

              call Decod;          декодируем в код семисегментного индикатора

              mov KKD_D, BL;             запись в ОЗУ отображения

; в регистр хранящий значение

              pop BX;               достаем обратно

              rol BL, 4;             копируем введенное в старшую тетраду

              and BL, F0h;      

              mov DL, Bl;        млад зануляем - она будет переписана в след цикле

              dec Count;           позиция на одну меньше

ret;        

data_L:

; на дисплей то что ввели

              mov СL, 80h;      запись в ОЗУ отображния (80h) по адресу 00h

              mov KKD_RU, СL;          выдача команды

              push BX;             запоминаем т к потом туда запишется код для индикатора

              call Decod;          декодируем в код семисегментного индикатора

              mov KKD_D, BL;             запись в ОЗУ отображения

; в регистр хранящий значение

              pop BX;               достаем обратно

              orl DL, Bl;           копируем введенное в млад тетраду

; когда введен последний символ - записываем в ОЗУ по адресу из АХ данные из ДЛ

              mov DS:[AX], DL;

              dec Count;           позиция на одну меньше

Input_out:

ret;

Вывод на дисплей осуществляется специальной процедурой, которая работает с контроллером клавиатуры и дисплея (посылает команды и данные):

;#######################################################################

;             Вывод на дисплей данных и адреса из их регистров DL AX

;#######################################################################