Для всех слов в строке, заканчивающихся на “ing” заменить окончания на “ed” - Assembler
Формулировка задачи:
Для всех слов в строке, заканчивающихся на “ing” заменить окончания на “ed” (разделитель между словами – символ пробела).
можно ли как то исправить?
.model small .stack 100 .data max db 30 len db ? s1 db 30 dup(?) ;Буфер для ввода строки zap db 30 dup (',') ;Строки для сравнения pr db 30 dup(' ') mes db 'Vvedite stroku:',10,13,'$' ;Приглашение к вводу new db 10,13,'$' ;Строка для перехода .code mov ax,@data ;инициализация регистров es и ds mov ds,ax mov es,ax mov ah,9 ;Выводим строку mes lea dx,mes int 21h mov ah,0Ah ;Вводим строку s1 lea dx,max int 21h mov bl,len ;длину строки помещаем в bx mov s1[bx],'$' mov cl,len ;В cl-количество повторений для repne dec bx ;Уменьшаем bx, чтобы использовать в качестве индекса lea di,s1[bx] ;В di адрес конца строки-приемника lea si,zap[bx] ;в si адрес конца строки-источника std ;Задаём направление просмотра строки справа-налево repne cmpsb ;Ищем положение последней запятой в строке cmp di,0 ;Если запятой в введённой строке нет, переходим на конец программы je K inc di push di ;сохраняем di в стеке cld ;Меняем DF lea di,s1 ;В di адрес строки-приемника lea si,pr ;В si адрес строки-источника mov cl,len ;В cl- количество повторений для repe repe cmpsb ;Ищем положение первого непробельного символа dec di mov si,di ;В si адрес первого непробельного символа pop di ;В di адрес последней запятой в строке movsb ;Последняя запятая меняется на первый непробельный символ K: mov ah,9 lea dx,new int 21h mov ah,9 ;Выводим преобразованную строку lea dx,s1 int 21h mov ah,4ch int 21h end
Решение задачи: «Для всех слов в строке, заканчивающихся на “ing” заменить окончания на “ed”»
textual
Листинг программы
.model small .stack 100 .data max db 30 len db ? s1 db 30 dup(?) ;Буфер для ввода строки zap db 30 dup (',') ;Строки для сравнения pr db 30 dup(' ') mes db 'Vvedite stroku:',10,13,'$' ;Приглашение к вводу new db 10,13,'$' ;Строка для перехода .code mov ax,@data ;инициализация регистров es и ds mov ds,ax mov es,ax mov ah,9 ;Выводим строку mes lea dx,mes int 21h mov ah,0Ah ;Вводим строку s1 lea dx,max int 21h mov bl,len ;длину строки помещаем в bx mov s1[bx],'$' mov cl,len ;В cl-количество повторений для repne dec bx ;Уменьшаем bx, чтобы использовать в качестве индекса lea di,s1[bx] ;В di адрес конца строки-приемника lea si,zap[bx] ;в si адрес конца строки-источника std ;Задаём направление просмотра строки справа-налево repne cmpsb ;Ищем положение последней запятой в строке cmp di,0 ;Если запятой в введённой строке нет, переходим на конец программы je K inc di push di ;сохраняем di в стеке cld ;Меняем DF lea di,s1 ;В di адрес строки-приемника lea si,pr ;В si адрес строки-источника mov cl,len ;В cl- количество повторений для repe repe cmpsb ;Ищем положение первого непробельного символа dec di mov si,di ;В si адрес первого непробельного символа pop di ;В di адрес последней запятой в строке movsb ;Последняя запятая меняется на первый непробельный символ K: mov ah,9 lea dx,new int 21h mov ah,9 ;Выводим преобразованную строку lea dx,s1 int 21h mov ah,4ch int 21h end
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д