Консультация № 192127
15.12.2017, 10:13
0.00 руб.
0 2 0
Здравствуйте, уважаемые эксперты! У меня возникли сложности с таким вопросом:
есть задача: заменить заданный символ в строке на указанный новый.
есть решение, работает
сказано, что нужно использовать макрокоманды. критически не успеваю разобраться с ними, почитала информацию о них и не могу понять.
пожалуйста! помогите с их использованием в решении!


Приложение:
.model small
.stack 100h
.data
msg1 db 'Stroka:',10,13, '$'
Stroka db 60, 60 dup (?)
msg2 db 'Vvedite simvol kotorii hotite zamenit' ,13,10,'$'
len1 db ?
msg3 db 'Vvedite simvol na kotorii hotite proizvesti zamenu:',13,10,'$'
msg4 db 'Rezultat:',13,10,'$'
len2 db ?
NextLine db 13,10,'$'
.code
mov ax, @data
mov ds, ax
mov es, ax

;---------вывод 1-го сообщения---------;
mov ah, 09h
mov dx, offset msg1
int 21h

;--------ввод строки--------;
lea dx, Stroka
mov ah, 0Ah
int 21h

lea bx, Stroka
inc bx
mov cl, [bx]
xor ch, ch ; теперь CX = длина строки
inc bx
add bx, cx
mov al, 0
mov [bx], al

;---------следующая строка---------;
lea dx, nextLine
mov ah, 9
int 21h

;----------вывод 2-го сообщения-------;
lea dx, msg2
mov ah, 9
int 21h

;--------ввод символа-------;
mov ah, 01
int 21h
mov len1, al ; длина
mov bl, al ; сохраним в BL

;---------следующая строка---------;
lea dx, nextLine
mov ah, 9
int 21h

;----------вывод 3-го сообщения--------;
lea dx, msg3
mov ah, 9
int 21h

;------ввод символа-----;
mov ah, 01
int 21h
mov len2, al ; длина
mov bh, al ; сохраним в BH

;--------ищем символ-------------;
lea si, Stroka
add si, 2

;-----------переход на следующий символ----------;
sleduiushii_simvol: mov al, [si]
or al, al ; это ноль (конец строки)?
jnz proverka ; переход, если не 0
jmp simvola_net ; дошли до конца, так и встретили

;-------------сравниваем символы------------;
proverka: cmp al, bl
je naiden
inc si
jmp sleduiushii_simvol

;---------символ найден-----------;
naiden: mov [si], bh ; заменили - больше ничего делать не надо - просто покажем

;----------------следующая строка--------------ж
lea dx, nextLine
mov ah, 9
int 21h

;----------вывод 4-го сообщения----------;
simvola_net: lea dx, msg4
mov ah, 9
int 21h

;------------следующая строка----------;
lea dx, nextLine
mov ah, 9
int 21h

;-------------вывод преобразованной строки------------;
lea dx, Stroka
add dx, 2 ; пропускаем байты длины
mov ah, 40h
mov bx, 1 ; стандартый вывод
push cx ; сохраним CX
int 21h
pop cx ; восстановим CX

;-------------завершение программы-----------;
mov ah, 04Ch
int 21h
end

Обсуждение

давно
Посетитель
401611
4
15.12.2017, 16:21
общий
Разобралась сама, ответа не требуется.
давно
Посетитель
7438
7205
15.12.2017, 16:27
общий
Адресаты:
Вот это замечательно!
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа