Заменить символы в строке - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, уже 4 день думаю над задачей:
Задан текст,в котором есть хотя б одна точка. Переделать текст, исключивши из него все запятые, что стоят перед 1 точкой, и заменить все пробелы в тексте на “+”.
Гуглил, но код из примеров либо не компилировался, либо делал бесконечный цикл(или просто "ломал" программу). Так что я уже не знаю что делать. Пишу в GUI Turbo Assembler. Мб кто-то знает как решить данную задачку, или у кого-то есть подобный пример?

Решение задачи: «Заменить символы в строке»

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

Объяснение кода листинга программы

Выполняемые действия в коде:

  1. Подключение сегмента данных к сегменту кода.
  2. Выделение стека для локальных переменных размером в 100 байт.
  3. Определение строковых констант в сегменте данных.
  4. Определение самой короткой строки из констант, используемой в качестве разделителя.
  5. Определение самой длинной строки из констант, используемой в качестве разделителя.
  6. Определение строки, которую необходимо обработать.
  7. Определение длины строки, которую необходимо обработать.
  8. Определение начального признака, указывающего на отсутствие точек в строке.
  9. Организация цикла обработки строки до тех пор, пока не встретится символ новой строки.
  10. Проверка каждого символа строки на предмет его принадлежности к допустимым символам.
  11. При обнаружении недопустимого символа замена его на символ разделителя.
  12. При обнаружении символа точки в строке установка признака окончания обработки строки.
  13. При обнаружении символа запятой в строке проверка наличия символа точки в строке.
  14. При обнаружении символа точки в строке установка признака окончания обработки строки.
  15. При обнаружении символа новой строки завершение цикла обработки строки.
  16. Вывод отформатированной строки на экран.
  17. Завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5