Заменить символы в строке - Assembler
Формулировка задачи:
Здравствуйте, уже 4 день думаю над задачей:
Гуглил, но код из примеров либо не компилировался, либо делал бесконечный цикл(или просто "ломал" программу). Так что я уже не знаю что делать. Пишу в GUI Turbo Assembler. Мб кто-то знает как решить данную задачку, или у кого-то есть подобный пример?
Задан текст,в котором есть хотя б одна точка. Переделать текст, исключивши из него все запятые, что стоят перед 1 точкой, и заменить все пробелы в тексте на “+”.
Решение задачи: «Заменить символы в строке»
textual
Листинг программы
- LOCALS
- .model small
- .stack 100h
- .data
- CrLf db 0Dh, 0Ah, '$'
- sText db 'sl,ovo, drugoe slovo, i tretie slovo. a teper, posle tochki', '$'
- Len equ $-sText-1
- .code
- main proc
- mov ax, @data
- mov ds, ax
- mov ax, ds
- mov es, ax
- lea si, sText
- mov di, si
- mov cx, Len
- mov bx, 0 ;признак - точки в тексте ещё не встречались
- @@For:
- lodsb
- cmp al, ' '
- jne @@TestPoint
- mov al, '+'
- jmp @@Save
- @@TestPoint:
- cmp al, '.'
- jne @@TestComma
- mov bx, 1 ;выставляем признак присутствия точки в текстк
- jmp @@Save
- @@TestComma:
- cmp al, ','
- jne @@Save
- cmp bx, 0
- je @@Next
- @@Save:
- stosb
- @@Next:
- loop @@For
- mov ah, 09h
- lea dx, sText
- int 21h
- mov ax, 4C00h
- int 21h
- main endp
- end main
Объяснение кода листинга программы
Выполняемые действия в коде:
- Подключение сегмента данных к сегменту кода.
- Выделение стека для локальных переменных размером в 100 байт.
- Определение строковых констант в сегменте данных.
- Определение самой короткой строки из констант, используемой в качестве разделителя.
- Определение самой длинной строки из констант, используемой в качестве разделителя.
- Определение строки, которую необходимо обработать.
- Определение длины строки, которую необходимо обработать.
- Определение начального признака, указывающего на отсутствие точек в строке.
- Организация цикла обработки строки до тех пор, пока не встретится символ новой строки.
- Проверка каждого символа строки на предмет его принадлежности к допустимым символам.
- При обнаружении недопустимого символа замена его на символ разделителя.
- При обнаружении символа точки в строке установка признака окончания обработки строки.
- При обнаружении символа запятой в строке проверка наличия символа точки в строке.
- При обнаружении символа точки в строке установка признака окончания обработки строки.
- При обнаружении символа новой строки завершение цикла обработки строки.
- Вывод отформатированной строки на экран.
- Завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д