Пользователь может нажать и держать клавишу в результате чего происходит переполнение и ошибка. Как можно дописать чтобы при переполнении переходило на следующюю строку? и еще, как сделать если после вопроса "Продолжить работу ? (y/n) " пользователь скажет yes то ранее введенный текст отчищался? Пользуюсь: Turbo Assembler Version 4.1 Copyright © 1988, 1996 Borland International | Код | ;Вывод на экран строки символов из буфера ;Сегмент данных dseg segment str0 db 0ah,0dh,24h ;перевод каретки 24h это знак $ str1 db 'Введите произвольный текст. Enter - переход на следующюю строку $' str1_a db 'Двойной Enter - вывод набранного текста. CTRL+C - НМЕДЛЕННО ЗАВЕРШИТЬ $' str1_b db 'Вы ввели текст: $' str3 db 'Продолжить работу ? (y/n) $' str2 db 80 dup (?) ;Это буфер длинной 255 байт dseg ends
;Сегмент стека sseg segment dw 80 dup (?) bot equ $ ;Дно стека sseg ends
;Сегмент команд cseg segment assume cs:cseg,ss:sseg,ds:dseg begin proc far ;Настройка сегмента стека mov ax,sseg mov ss,ax ;В регистре ss сегментный адрес сегмента стека lea sp,bot ;В регистре sp указатель на дно стека push ds ;Сохранение в стеке адреса выхода из программы sub ax,ax ;ax=0 push ax ;Настройка сегмента данных mov ax,dseg mov ds,ax ;В регистре ds сегментный адрес сегмента данных ;Вывод заданного текста m4: mov ah,9h lea dx,str0 ;в начало строки int 21h lea dx,str1 ;вывод на экран str1 int 21h lea dx,str0 ;в начало строки int 21h lea dx,str1_a ;вывод на экран str1_a int 21h lea dx,str0 ;в начало строки int 21h sub si,si ; si=0 m2: mov ah,1h int 21h cmp al,0dh ;cmp-сравнить 0dh-код клавиши энтер je m1 ;переход на метку если энтер m3: mov str2[si],al ;в строке str2 очередной символ inc si jmp m2 m1: mov str2[si],0ah ; допишем чтобы при выводе inc si ; разделить mov str2[si],0dh ; слова inc si ; mov ah,9h lea dx,str0 ;0ah,0dh,24h ;перевод каретки 24h это знак $ int 21h mov ah,1h int 21h cmp al,0dh ;cmp-сравнить 0dh-код клавиши энтер jne m3 ;переход на метку если это не энтер mov ah,9h lea dx,str0 ;в начало строки int 21h lea dx,str1_b ;Вы ввели текст: int 21h lea dx,str0 ;в начало строки int 21h lea dx,str2 ;вывод текста int 21h lea dx,str0 ;в начало строки int 21h lea dx,str3 ;вопрос int 21h mov ah,1h int 21h cmp al,'y' je m4 cmp al,'Y' je m4 ret ;Выход из программы begin endp cseg ends end begin
|
|