Mov ah,10h

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: