Заменить символы в строке - 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 байт.
- Определение строковых констант в сегменте данных.
- Определение самой короткой строки из констант, используемой в качестве разделителя.
- Определение самой длинной строки из констант, используемой в качестве разделителя.
- Определение строки, которую необходимо обработать.
- Определение длины строки, которую необходимо обработать.
- Определение начального признака, указывающего на отсутствие точек в строке.
- Организация цикла обработки строки до тех пор, пока не встретится символ новой строки.
- Проверка каждого символа строки на предмет его принадлежности к допустимым символам.
- При обнаружении недопустимого символа замена его на символ разделителя.
- При обнаружении символа точки в строке установка признака окончания обработки строки.
- При обнаружении символа запятой в строке проверка наличия символа точки в строке.
- При обнаружении символа точки в строке установка признака окончания обработки строки.
- При обнаружении символа новой строки завершение цикла обработки строки.
- Вывод отформатированной строки на экран.
- Завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д