; Программа: Отображение каждой нажатой клавиши дважды
; Завершение при вводе пустой строки (двойной Enter)
; Ассемблер: MASM/TASM
.MODEL SMALL
.STACK 100h
.DATA
; Переменная для отслеживания предыдущего нажатия Enter
prevEnter DB 0
.CODE
MAIN PROC
; Инициализация сегментов
MOV AX, @DATA
MOV DS, AX
MAIN_LOOP:
; Чтение символа с клавиатуры без эха (функция 07h)
MOV AH, 07h
INT 21h
; Полученный символ в AL
; Проверка, является ли символ Enter (ASCII 13)
CMP AL, 0Dh
JNE NOT_ENTER
; Если Enter, проверяем предыдущий ввод
CMP prevEnter, 1
JE EXIT_PROGRAM
; Устанавливаем флаг, что Enter был нажат
MOV prevEnter, 1
; Отображаем Enter (новая строка)
MOV DL, 0Dh
MOV AH, 02h
INT 21h
MOV DL, 0Ah
MOV AH, 02h
INT 21h
JMP MAIN_LOOP
NOT_ENTER:
; Если не Enter, сбрасываем флаг prevEnter
MOV prevEnter, 0
; Отображаем символ дважды
MOV DL, AL
MOV AH, 02h
INT 21h
MOV DL, AL
MOV AH, 02h
INT 21h
JMP MAIN_LOOP
EXIT_PROGRAM:
; Выход из программы
MOV AH, 4Ch
INT 21h
MAIN ENDP
END MAIN
экране дважды. Программа должна запускаться в режиме работы «Запустить в отдельном окне». Программа завершает свою работу при вводе пустой строки, то есть по нажатии клавиши «Ввод» - дважды