Заменить заданный символ в строке на указанный символ - Assembler
Формулировка задачи:
Ребят, нашел вот такой код, должен заменить заданный символ в строке на указанный символ, а он какой то дурью занимается, не подскажете как исправить?
.model small .stack 100h .data msg1 db 1, 3, 6, 8 Stroka db 60, 60 dup (?) msg2 db 1, 3, 6, 8 len1 db ? msg3 db 5, 7, 9, 2 msg4 db 5, 7, 9, 2 len2 db ? NextLine db 1, 3, 6, 8 .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 ;--------ищем символ-------------; 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 ;-------------вывод преобразованной строки------------; lea dx, Stroka add dx, 2 ; пропускаем байты длины mov ah, 40h mov bx, 1 ; стандартый вывод push cx ; сохраним CX int 21h pop cx ; восстановим CX ;----------------следующая строка--------------ж lea dx, nextLine mov ah, 9 int 21h ;----------вывод 4-го сообщения----------; simvola_net: lea dx, msg4 mov ah, 9 int 21h ;-------------завершение программы-----------; mov ah, 04Ch int 21h end
Решение задачи: «Заменить заданный символ в строке на указанный символ»
textual
Листинг программы
model small stack 128 dataseg simvol db 0 zamena db 0 size_ db 0 vvedite_massiv db 'VVedite massiv (max-253 byte): ',0dh,0ah,'$' massiv db 255, 255 dup (90h) perevod_stroki db 0dh,0ah,'$' simvol_dly_poiska db 'Vvedite simvol dly poiska : $' simvol_dly_zameni db 'Vvedite simvol dly zameni : $' codeseg .386 org 100h start: mov ax,@data mov ds,ax mov es,ax mov ah,09h mov dx,offset vvedite_massiv int 21h mov ah,0ah mov dx,offset massiv int 21h mov ah,09 mov dx,offset perevod_stroki int 21h mov ah,09h mov dx,offset simvol_dly_poiska int 21h mov ah,01h int 21h mov [simvol],al mov ah,09 mov dx,offset perevod_stroki int 21h mov ah,09h mov dx,offset simvol_dly_zameni int 21h mov ah,01h int 21h mov [zamena],al mov ah,09 mov dx,offset perevod_stroki int 21h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov si,offset massiv inc si mov al,[si] mov [size_],al xor cx,cx mov cl,[size_] mass_1: inc si mov al,[si] cmp al,[simvol] jne mass_2 mov al,[zamena] mov [si],al mass_2: loop mass_1 cld mov di,offset massiv xor bx,bx mov bl,[size_] add di,bx add di,2 mov si,offset perevod_stroki mov cx,3 rep movsb mov ah,09h mov dx,offset massiv + 2 int 21h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exit: mov ax,4c00h int 21h end start
Объяснение кода листинга программы
Код на ассемблере выполняет следующие действия:
- Запрос на ввод строки для замены (массив размером до 253 байт).
- Запрос на ввод символа для поиска.
- Поиск введенного символа в строке (массив символов от 0 до 252).
- Если символ найден, то происходит замена на другой введенный символ.
- Вывод сообщения об успешной замене.
- Запрос на ввод символа для замены.
- Запрос на ввод символа для поиска.
- Поиск введенного символа в строке (массив символов от 0 до 252).
- Если символ найден, то происходит замена на другой введенный символ.
- Вывод сообщения об успешной замене.
- Запрос на ввод строки для замены (массив размером до 253 байт).
- Запрос на ввод символа для поиска.
- Поиск введенного символа в строке (массив символов от 0 до 252).
- Если символ найден, то происходит замена на другой введенный символ.
- Вывод сообщения об успешной замене.
- Запрос на ввод символа для замены.
- Запрос на ввод символа для поиска.
- Поиск введенного символа в строке (массив символов от 0 до 252).
- Если символ найден, то происходит замена на другой введенный символ.
- Вывод сообщения об успешной замене.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д