Для всех слов в строке, заканчивающихся на “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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы