Новичок
Профиль
Группа: Участник
Сообщений: 2
Регистрация: 4.11.2007
Репутация: нет Всего: нет
|
Есть задача: Ввести с клавиатуры исходную строку S. Заключить в знаки «!» каждый знак препинания. Исходную строку и результат вывести на экран.Вроде бы, кое-что правильно...но программа не работает с строкой больше 3 символов... Я так полагаю, что вроде бы si и di указывают на одну и ту же область памяти... Не мог бы кто сказать, что нужно исправить | Код | .model small .stack 100h .data b db '.','$' d db ',','$' r db '!','$' soob1 db 0AH,0DH,'Введите исходный текст:','$' soob2 db 0AH,0DH,'Исходный текст:','$' soob3 db 0AH,0DH,'Обработанный текст:','$' soob4 db 0AH,0DH,'Нажмите Enter для выхода из программы:','$' ;Структура для приёма сообщения priem label byte maxlen db 40 ;Максимальная длина сообщения aclen db ? text db 0AH, 0DH, 40 dup(''),'$' text2 db 0AH, 0DH, 40 dup(''),'$' exit label byte maxl db 1 ;Максимальная длина сообщения acl db ? t db 0AH, 0DH, 1 dup(''),'$' .code mov dx,@data mov ds,dx mov es,dx ;Блок очистки экрана mov ax,0600H mov bh,07 mov cx,0000 mov dx,184FH int 10h ;Блок вывода сообщения на экран mov ah,09H ;Функция ОС lea dx,soob1 int 21h ;Блок приёма сообщения с клавиатуры mov ah,0AH lea dx,priem int 21h ;Замена символа пробела в конце введённой строки ;на символ пробела mov bh,00 mov bl,aclen mov text[bx],20h ;Блок вывода введённого текста mov ah,09h ;Функция ОС lea dx,soob2 int 21H mov ah,09H ;Функция ОС lea dx,text int 21H ;Блок обработки введённого текста sub si,si ;очистка индексного регистра sub di,di ;очистка индексного регистра mov ch,00 ;установить кол-во инераций цикла mov cl,aclen ;равное длине введенной строки start: ;начало блока обработки введённого текста mov bl,text[si] ;занести в bl элекмент строки text zamb: ;блок замены "." mov bh,b ;сравниваем текущий символ в строке CMP bl,bh ;если символы не совпадают JNE zamd ; jmp a1 zamd: ;блок замены "," mov bh,d CMP bl,bh JNE zamr jmp a1 zamr: ;блок замены "!" mov bh,r CMP bl,bh JNE a2 jmp a1 a1: mov al,text[si] mov text2[di],'"';замена найденного символа add di,1 mov text2[di],bl;замена найденного символа add di,1 mov text2[di],'"';замена найденного символа add di,1 add si,1 jmp a3
mov text2[di],al add si,1 ;увеличение значения индексного регистра add di,1 ;увелечение значения индексного регистра jmp a3 a3:LOOP start ;возврат на начало цикла ;Блок вывода обработанного текста mov ah,09H ;Функция ОС lea dx,soob3 int 21H mov ah,09H ;Функция ОС lea dx,text2 int 21H ;Блок завершения программы ext: mov ah,09H ;Функция ОС lea dx,soob4 int 21H mov ah,0AH lea dx,exit int 21h mov ah,4ch int 21h END
|
Задача два: Ввести с клавиатуры исходную строку S и изменить порядок слов в строке в соответствии с алфавитным порядком первых букв слов (например: «Каждый охотник желает знать, где сидит фазан» – «Где желает знать каждый охотник сидит фазан»). Исходную строку и результат вывести на экран.Собственно здесь, вопрос как это вообще реализовать...может у кого есть что-то подобное...
|