Замена символов в строке - Assembler
Формулировка задачи:
В общем задача - заменить все точки в двух строках на восклицательные знаки.
Пробую это сделать для второй строки сначала - не выходит.
assume cs: code data1 segment buffer db 254,0,254 dup ('$') str1 db 'enter string:', 0Dh, 0Ah, '$' str3 db 0Dh, 0Ah, '$' str2 db 'result:', 0Dh, 0Ah, '$' data1 ends data2 segment buffer2 db 254,0,254 dup ('$') str4 db 'enter string:', 0Dh, 0Ah, '$' str6 db 0Dh, 0Ah, '$' str5 db 'result:', 0Dh, 0Ah, '$' data2 ends code segment start: ;Ввод строки 1 mov ax, data1 mov ds, ax mov ah,09h mov dx, offset str1 int 21h mov ah,0ah mov dx, offset buffer int 21h mov ah,09h mov dx, offset str3 int 21h ;;;;; Ввод строки 2 mov ax, data2 mov ds, ax mov ah,09h mov dx, offset str4 int 21h mov ah,0ah mov dx, offset buffer2 int 21h mov ah,09h mov dx, offset str6 int 21h ;;;;;; Очистка экрана mov ah,0 mov al,2 int 10h ;;;; Вывод строки 1 mov ax,data1 mov ds,ax mov ah,09h mov dx, offset str2 int 21h mov ah,09h lea dx, buffer+2 int 21h mov ah,09h mov dx, offset str3 int 21h ;;;; Вывод строки 2 mov ax, data2 mov ds, ax mov ah,09h mov dx, offset str5 int 21h mov ah,09h lea dx, buffer2+2 int 21h ;;; ;;;;; Замена . на ! mov ax, data2 mov ds, ax MOV AL,'.' ;Искомый символ. CLD ;Установка флага направления в 0. MOV CX,254 ;Макс. длина поля buffer2 LEA DI,buffer2 ;Адрес поля buffer2 REPNE SCASB ;Поиск. JNZ K20 ;Символ найден? DEC DI ;Да - уменьшить адрес. MOV BYTE PTR[DI],21H K20: RET ;;;;; Вывод строки 2 после изменения mov ah,09h mov dx, offset str6 int 21h mov ah,09h mov dx, offset str5 int 21h mov ah,09h lea dx, buffer2+2 int 21h quit: mov ax, 4c00h int 21h code ends end start
Решение задачи: «Замена символов в строке»
textual
Листинг программы
dos_inp macro lbl, sz _ib_ struc max db sz len db ? bf db sz dup('$') _ib_ ends lbl _ib_ <> endm .model small .386 .stack .data entr db 0Dh, 0Ah,'enter string:$' crlf db 0Dh, 0Ah, '$' rslt db 0Dh, 0Ah,'result:$' dos_inp buffer, 80 dos_inp buffer2,80 .code start: ;Ввод строки 1 mov ax, @data mov ds, ax mov es, ax mov ah,09h lea dx, entr int 21h mov ah,0ah lea dx, buffer int 21h mov ah,09h lea dx, crlf int 21h ;;;;; Ввод строки 2 mov ah,09h lea dx, entr int 21h mov ah,0ah lea dx, buffer2 int 21h ;;;; Вывод строки 1 mov ah,09h lea dx, rslt int 21h mov ah,09h lea dx, buffer.bf int 21h ;;;; Вывод строки 2 mov ah,09h lea dx, rslt int 21h mov ah,09h lea dx, buffer2.bf int 21h ;;;;; Замена . на ! MOVzx CX, buffer2.len ;Макс. длина поля buffer2 lea si, buffer2.bf ;Адрес поля buffer2 l1:; ;Поиск. lodsb cmp al, 2Eh JNZ K20 ;Символ найден? MOV BYTE PTR[si-1], 21h K20: loop l1 mov ah,09h lea dx, rslt int 21h mov ah,09h lea dx, buffer2.bf int 21h quit: mov ax, 4c00h int 21h end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д