;#######################################################################
; ввод данных с клавиатуры в текущую позицию
;#######################################################################
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
;#######################################################################
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.