28.01.2009, 10:49
общий
это ответ
Здравствуйте, Alenywka!
Надеюсь, Вас устроит программа в приложении.
Конец ввода по нажатию на Enter, кроме того игнорируются расширенные клавиши (F1-F12, Home и др) и непечатаемые символы (с кодом < 20h)
Если что непонятно или что-то не так, милости просим в мини-форум
Удачи!
Приложение:
;star.asm
;tasm star
;tlink star /t
.model tiny ;Будем формировать COM-файл
.data
star db '<star>',0
.code
.startup
MLoop:
call GetSymbol ;Вводим символ
test ax, ax ;Конец ввода - Enter
jz Finish
call PrintSymbol ;Выводим, проверяя на *
jmp MLoop
Finish:
mov ax,4c00h
int 21h
GetSymbol proc
mov ah, 7 ;Нефильтрованный ввод с консоли без эхо
int 21h
cmp al, 0 ;Расширенные клавиши (F1-F12, Insert, Home,...) пропускаем
jne GSNext
mov ah, 7 ;Они идут двумя байтами, заберем второй
int 21h
jmp GetSymbol
GSNext:
cmp al, 0dh ;Enter - конец ввода
je GSLast
cmp al, ' ' ;Непечатаемые символы тоже пропускаем
jb GetSymbol
jmp GSRet
GSLast:
xor ax, ax ;Признак конца ввода
GSRet:
ret
GetSymbol endp
PrintSymbol proc
cmp al, '*'
jne PSPrint ;не * просто на вывод
lea si, star ;* меняем на <star>
PSLoop:
lodsb
cmp al, 0 ;строка заканчивается 0
je PSRet
call PSPrint
jmp PSLoop
PSPrint:
mov dl, al ;выводим один символ
mov ah, 2
int 21h
PSRet:
ret
PrintSymbol endp
end
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен