Удалить все пробелы из строки - Assembler

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

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

Написать и протестировать, которые «сжимают» строку. удаление из него всех пробелов

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

textual
Листинг программы
@stack  segment para stack
        db      1024 dup(?)
@stack  ends
 
@data   segment
        CrLf    db      0Dh, 0Ah, '$'
 
        String  db      50, 0, 50 dup(?)
        Prompt  db      'Enter a string:', 0Dh, 0Ah, '$'
        Message db      'Result:', 0Dh, 0Ah, '$'
@data   ends
 
@code   segment
        assume  cs:@code, ds:@data, ss:@stack
 
;Процедура удаляет из переданной строки все пробелы
;на входе:
;  ds:dx - строка Pascal типа
;на выходе:
;  ds:dx - указывает на ту же строку, но в строке удалены пробелы
RemoveSpaces    proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
 
        mov     bx,     dx
        mov     si,     dx      ;смещение считываемого символа
        inc     si
        mov     di,     si      ;смещение записываемого символа
 
        mov     cx,     0
        mov     cl,     [bx]
 
        jcxz    @@Break
 
        mov     dx,     0       ;количество символов в новой строке
@@For:
        mov     al,     [si]
        cmp     al,     ' '
        je      @@Skip
        mov     [di],   al
        inc     di
        inc     dl
@@Skip:
        inc     si
        loop    @@For
 
        mov     [bx],   dl
@@Break:
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
RemoveSpaces    endp
 
main    proc
        ;инициализация сегментного регистра данных
        mov     ax,     @data
        mov     ds,     ax
 
        mov     ah,     09h
        lea     dx,     [Prompt]
        int     21h
        mov     ah,     0Ah
        lea     dx,     [String]
        int     21h
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
 
        mov     cl,     [String+1]
        mov     ch,     0
        lea     si,     [String+2]
        add     si,     cx
        mov     [si],   byte ptr '$'
        inc     byte ptr [String+1]
 
        lea     dx,     [String+1]
        call    RemoveSpaces
 
        mov     ah,     09h
        lea     dx,     [Message]
        int     21h
        mov     ah,     09h
        lea     dx,     [String+2]
        int     21h
        ;завершение программы
        mov     ax,     4C00h
        int 21h
main    endp
 
@code   ends
 
        end     main

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

  1. Удаление пробелов из строки
  2. Входные данные: ds:dx - строка Pascal типа
  3. Выходные данные: ds:dx - указывает на ту же строку, но в строке удалены пробелы
  4. Процедура использует регистры bx, si, di, cx, dx для выполнения своей работы
  5. Переменные String, Prompt, Message, CrLf объявлены в сегменте @data
  6. Переменная String имеет размер 50 символов и заполняется пользователем при вызове процедуры
  7. Процедура main вызывает функцию RemoveSpaces после ввода строки пользователем
  8. После удаления пробелов из строки, результат выводится на экран с помощью функции int 21h
  9. Программа завершается с кодом 4C00h после вывода результата на экран

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


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

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

7   голосов , оценка 3.429 из 5
Похожие ответы