Удалить из строки слова, имеющие определенную букву - Assembler
Формулировка задачи:
Удалить из строки слова, имеющие определенную букву, например D.
Строка задана сразу.
Подскажите пожалуйста как решить эту задачу
Решение задачи: «Удалить из строки слова, имеющие определенную букву»
textual
Листинг программы
- ; multi-segment executable file template.
- data segment
- msg db 'vvedi stroku: $'
- buffer db 15
- bufferl db ?
- mas1 db 15 dup(?)
- str db 0Dh, 0Ah, '$'
- space db 20h
- literal db 097
- ends
- stack segment
- dw 128 dup(0)
- ends
- code segment
- start:
- ; set segment registers:
- mov ax, data
- mov ds, ax
- mov es, ax
- xor ax, ax
- xor cx, cx
- mov dx, offset msg ; vivod msg
- mov ah, 9
- int 21h
- mov dx, offset buffer; vvod v massive
- mov ah, 0Ah
- int 21h
- mov dx, offset str ; perehod na novvyu stroky
- mov ah, 9
- int 21h
- mov dx, offset mas1 ; vivod massive
- mov ah, 9
- int 21h
- mov dx, offset str ; perehod na novvyu stroky
- mov ah, 9
- int 21h
- xor cx, cx
- mov cl, bufferl
- lea di, mas1 ; end
- lea si, mas1 ; start
- push si
- push di
- cycle:
- pop di
- pop si
- mov al, space
- repne scasb ; search space
- jnz scanoneword
- push di
- push si
- mov bx, di
- sub bx, si
- jmp scan
- scanoneword:
- mov bx, di
- sub bx, si
- mov dl, bufferl
- sub dx, bx
- push di
- mov cx, dx
- mov al, literal
- mov si, di
- repne scasb
- jnz exit
- ;pop di
- mov bx, di
- mov di, si
- mov si, di
- add di, dx
- mov cx, dx
- repne movsb
- jmp exit
- scan:
- mov al, literal
- mov bx, di
- sub bx, si
- push di
- mov cx, bx
- mov al, literal
- mov di, si
- repne scasb
- push si
- push di
- jnz cycle
- pop di
- mov bx, di
- mov di, si
- mov si, bx
- repne movsb
- push si
- push di
- jmp cycle
- exit:
- mov dx, offset mas1
- mov ah, 9
- int 21h
- mov ax, 4c00h ; exit to operating system.
- int 21h
- ends
- end start ; set entry point and stop the assembler.
Объяснение кода листинга программы
- Здесь объявляются сегменты данных и кода.
- Объявляются переменные:
msg
содержит строку 'vvedi stroku: $'buffer
представляет собой буфер длиной 15bufferl
используется для хранения длины строки в буфереmas1
- массив из 15 элементов, заполненный неопределенными значениямиstr
- строчная переменная, содержащая символ перевода строки и символ завершения строкиspace
- содержит символ пробелаliteral
- содержит символ 097
- В сегменте кода начинается программа:
- Устанавливаются регистры сегмента с помощью команд 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.
- В этом коде происходит чтение строки с клавиатуры, удаление слов, содержащих определенную букву, и вывод обновленной строки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д