Int 16h
main_End_program:
Ret
Main endp
;; ************************** OUT_BCD_VAL **********************************
;; Процедура вывода десятичного байтового числа в формате BCD на экран
;; Входной параметр:
;; dh - число
;; Выходные параметры отсутствуют
Out_bcd_val proc near
Push ax
Push dx
Mov dl,dh
And dl,11110000b
And dh,00001111b
Shr dl,4
Add dl,30h
Add dh,30h
Mov ah,02h
Int 21h
Mov dl,dh
Int 21h
Pop dx
Pop ax
Ret
Out_bcd_val endp
;; ************************* OUT_CURR_TIME *********************************
;; Процедура вывода времени и разделителя в текущую позицию курсора
;; Входные параметры отсутствуют
;; Выходные параметры отсутствуют
Out_curr_time proc near
Push ax
Push cx
Push dx
Mov ah,02h
Int 1Ah
Xchg dh,ch
Call out_bcd_val
Mov ah,0Eh
mov al,':'
Int 10h
Mov dh,cl
Call out_bcd_val
mov al,':'
Int 10h
Mov dh,ch
Call out_bcd_val
Mov ah,09h
Mov dx,offset txt_separator
Int 21h;; вывод разделителя
Pop dx
Pop cx
Pop ax
Ret
Out_curr_time endp
;; ************************* INPUT_SYMBOLS *********************************
;; Функция ввода символьной строки с клавиатуры и эхо-выводом.
;; Входные параметры отсутствуют
;; Выходные параметры:
;; bx - указатель на конец массива
Input_symbols proc near
Push ax
Push cx
Mov bx, offset arr_symbols
Mov cx,16
input_symbols_Start_input:
Mov ah,10h
Int 16h
Cmp al,'u';; если введён символ U,
Je input_symbols_End_input;; то прекращаем ввод
Cmp al,0Dh;; если был нажат Enter,
Je input_symbols_End_input;; то ввод завершается
Cmp ah,0Eh;; если нажатая клавиша не Backspace,
;; то передать управление на ветку input_symbols_Not_backspace
Jne input_symbols_Not_backspace
;; обработка Backspace
Cmp cx,16
Je input_symbols_Start_input
Mov al,08h
Int 10h
mov al,' '
Int 10h
Mov al,08h
Int 10h
Dec bx
Inc cx
Jmp input_symbols_Start_input
input_symbols_Not_backspace:
Cmp ah,01h;; ESC
Je input_symbols_Start_input
Cmp al,00h;; не цифро-буквенная клавиша
Je input_symbols_Start_input
Cmp al,0E0h;; стрелочки, numpad
Je input_symbols_Start_input
mov [bx],al
Inc bx
Mov ah,0Eh
Int 10h
Loop input_symbols_Start_input
input_symbols_End_input:
Mov al,cr
Int 10h
Mov al,lf
Int 10h
Pop cx
Pop ax
Ret
Input_symbols endp
;; ******************** OUT_REVERS_REPLACE_SYMB ****************************
;; Функция вывода символьной последовательности в обратном порядке
;; с заменой цифр на их дополнения
;; Входные параметры:
;; bx - указатель на конец последовательности
;; Выходные параметры:
;; bx - ноль, в случае вывода всей последовательности
Out_revers_replace_symb proc near
Push ax
Mov ah,0Eh;; функция вывода символа на экран
out_revers_replace_symb_Start:
mov al,byte ptr [bx-1];; код очередного символа в al
Cmp al,30h;; сравнение с 30h
;; если меньше, то выводим этот символ
Jl out_revers_replace_symb_Out_symbol
Cmp al,39h;; сравнение с 39h
;; если больше, то выводим этот символ
Jg out_revers_replace_symb_Out_symbol
Mov al,3Ah;; 3Ah в al
sub al,byte ptr [bx-1];; вычитаем код цифры из 3Ah