Заменить в строке пару символов на один - Assembler

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Помогите, пожалуйста, с программой

Задание:

Составить программу, которая водит произвольный текст(строку). Вывести этот текст, заменив все пары

ph

на букву

f

.

Решение задачи: «Заменить в строке пару символов на один»

textual
Листинг программы
.model small
 
.data
buf db 50,0,50 dup(?)
msg1 db 'input: $'
msg2 db 'output: $'
 
.stack 100h
 
.code 
start:
mov ax,@data
mov ds,ax
mov es,ax
 
mov ah,09h
lea dx,msg1
int 21h
 
mov ah,0Ah
lea dx,buf
int 21h
 
lea di,buf+2
xor bh,bh
mov bl,byte ptr [buf+1]
mov byte ptr [bx+di],'$'
 
mov al,'p'
lea di,buf+2
xor ch,ch
mov cl,byte ptr [buf+1]
next:
repne scasb
 
or cx,cx
jz solve
 
cmp byte ptr [di],'h'
jnz next
 
mov byte ptr [di-1],'f'
 
cmp cx,1
jnz skip
 
mov byte ptr [di],'$'
 
jmp solve
 
skip:
dec cx
 
push ax
push cx
push di
 
shift:
mov al,byte ptr [di+1]
mov byte ptr [di],al
 
inc di
loop shift
 
mov byte ptr [di],'$'
 
pop di
pop cx
pop ax
 
jmp next
 
solve:
mov ah,02h
mov dl,0Ah
int 21h
 
mov ah,02h
mov dl,0Dh
int 21h
 
mov ah,09h
lea dx,msg2
int 21h
 
mov ah,09h
lea dx,buf+2
int 21h
 
mov ah,4Ch
mov al,00h
int 21h
end start

Объяснение кода листинга программы

В этом коде на языке Assembler выполняется следующая задача:

  1. Заменить в строке пару символов на один. В начале кода строка 50,0,50 инициализируется в буфере buf. Затем пользователь приглашается ввести строку для замены в буфер buf+2. После этого выполняется цикл, который ищет пару символов 'h'. Если пара найдена, то выполняется следующая последовательность действий:
  2. Заменяется пара символов 'h' на 'f'.
  3. Выполняется проверка, было ли найдено более одного совпадения (сравнивается счетчик cx с 1).
  4. Если совпадений было более одного, то выполняется сдвиг строки в буфере на одну позицию вправо.
  5. Если совпадений было не более одного, то выполняется замена символа после последнего найденного 'h' на '$'. Если пара символов 'h' не найдена, то выполняется замена последнего символа в строке на '$'. Затем выводится сообщение об успешном выполнении задачи.

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

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