Удалить из строки слова, имеющие определенную букву - Assembler

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

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

Удалить из строки слова, имеющие определенную букву, например D. Строка задана сразу. Подскажите пожалуйста как решить эту задачу

Решение задачи: «Удалить из строки слова, имеющие определенную букву»

textual
Листинг программы
  1. ; multi-segment executable file template.
  2. data segment
  3.     msg db 'vvedi stroku: $'
  4.     buffer db 15
  5.     bufferl db ?
  6.     mas1 db 15 dup(?)
  7.     str db 0Dh, 0Ah, '$'
  8.     space db 20h
  9.     literal db 097
  10.                      
  11. ends
  12.  
  13. stack segment
  14.     dw   128  dup(0)
  15. ends
  16.  
  17. code segment
  18. start:
  19. ; set segment registers:
  20.     mov ax, data
  21.     mov ds, ax
  22.     mov es, ax
  23.    
  24.     xor ax, ax
  25.     xor cx, cx
  26.    
  27.    
  28.    
  29.     mov dx, offset msg   ; vivod msg
  30.     mov ah, 9
  31.     int 21h
  32.    
  33.     mov dx, offset buffer; vvod v massive
  34.     mov ah, 0Ah
  35.     int 21h
  36.    
  37.     mov dx, offset str   ; perehod na novvyu stroky
  38.     mov ah, 9
  39.     int 21h
  40.    
  41.     mov dx, offset mas1  ; vivod massive
  42.     mov ah, 9
  43.     int 21h
  44.    
  45.     mov dx, offset str   ; perehod na novvyu stroky
  46.     mov ah, 9
  47.     int 21h
  48.    
  49.     xor cx, cx              
  50.     mov cl, bufferl
  51.     lea di, mas1   ; end
  52.     lea si, mas1   ; start
  53.     push si
  54.     push di
  55.  
  56. cycle:  
  57.     pop di
  58.     pop si
  59.     mov al, space
  60.     repne scasb    ; search space
  61.     jnz scanoneword
  62.     push di
  63.     push si
  64.     mov bx, di
  65.     sub bx, si
  66.     jmp scan      
  67. scanoneword:
  68.     mov bx, di
  69.     sub bx, si
  70.     mov dl, bufferl
  71.     sub dx, bx
  72.     push di
  73.     mov cx, dx
  74.     mov al, literal
  75.     mov si, di
  76.     repne scasb
  77.     jnz exit  
  78.     ;pop di
  79.     mov bx, di
  80.     mov di, si
  81.     mov si, di
  82.     add di, dx
  83.     mov cx, dx
  84.     repne movsb
  85.     jmp exit
  86. scan:
  87.     mov al, literal
  88.     mov bx, di
  89.     sub bx, si
  90.     push di
  91.     mov cx, bx
  92.     mov al, literal
  93.     mov di, si
  94.     repne scasb
  95.     push si
  96.     push di
  97.     jnz cycle  
  98.     pop di
  99.     mov bx, di
  100.     mov di, si
  101.     mov si, bx
  102.     repne movsb
  103.     push si
  104.     push di
  105.     jmp cycle
  106.    
  107. exit:    
  108.    
  109.    
  110.     mov dx, offset mas1
  111.     mov ah, 9
  112.     int 21h
  113.    
  114.    
  115.  
  116.    
  117.  
  118.    
  119.    
  120.    
  121.              
  122.              
  123.     mov ax, 4c00h ; exit to operating system.
  124.     int 21h    
  125. ends
  126.  
  127. end start ; set entry point and stop the assembler.

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

  1. Здесь объявляются сегменты данных и кода.
  2. Объявляются переменные:
    • msg содержит строку 'vvedi stroku: $'
    • buffer представляет собой буфер длиной 15
    • bufferl используется для хранения длины строки в буфере
    • mas1 - массив из 15 элементов, заполненный неопределенными значениями
    • str - строчная переменная, содержащая символ перевода строки и символ завершения строки
    • space - содержит символ пробела
    • literal - содержит символ 097
  3. В сегменте кода начинается программа:
    • Устанавливаются регистры сегмента с помощью команд mov ax, data, mov ds, ax, mov es, ax
    • Затем устанавливаются некоторые регистры в 0 с помощью команд xor ax, ax, xor cx, cx
    • Выводится сообщение с помощью команды mov dx, offset msg, mov ah, 9, int 21h
    • Вводится строка с помощью int 21h и записывается в буфер buffer
    • Далее выводится новая строка, затем выводится массив mas1
    • Затем с помощью цикла и операций сдвига, сравнения и копирования производится обработка введенной строки согласно комментариям в коде
    • Наконец, обработанная строка выводится и программа завершается с помощью команды int 21h.
  4. В этом коде происходит чтение строки с клавиатуры, удаление слов, содержащих определенную букву, и вывод обновленной строки.

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


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

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

14   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы