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