В тексте, состоящая из слов, разделенных пробелами, найти слова, начинающиеся на "к" - Assembler
Формулировка задачи:
дано текст состоящая из слов разделенных пробелами, найти слова начинающиеся на "к" , плииз помогите!! На ассемблере, и если не сложно можно с обьяснениями кодов) спасибо большое
Решение задачи: «В тексте, состоящая из слов, разделенных пробелами, найти слова, начинающиеся на "к"»
textual
Листинг программы
push ds pop es lea di,text mov cx,len cyc: mov al,' ' repne scasb jne exit mov si,di lodsb dec cx cmp al,'k' jz showk mov di,si inc cx loop cyc showk: int 29h load: or cx,cx jz exit lodsb dec cx cmp al,' ' jz space int 29h jmp load space: dec si mov di,si add cx,2 mov ah,02h mov dl,' ' int 21h loop cyc
Объяснение кода листинга программы
Выполняемый код на ассемблере:
- push ds; pop es; — откладывает в стек используемые сегменты (ds, es) и восстанавливает сегмент данных
- lea di, text; mov cx, len; — инициализирует индекс (di) и счётчик (cx) для цикла по тексту
- mov al, ' '; repne scasb; jne exit; — подготавливает переменную (al) для сравнения со следующим символом текста, и если символ не равен пробелу, то продолжает цикл
- mov si, di; lodsb; dec cx; cmp al, 'k'; jz showk; — переносит индекс (si) в начало цикла, загружает символ в (al), уменьшает счётчик (cx) на единицу и проверяет, является ли текущий символ 'k'. Если это так, то переходит к выводу найденных слов
- mov di, si; inc cx; loop cyc; — продолжает цикл до тех пор, пока не будет найден 'k'
- int 29h; — выводит найденное слово, используя BIOS-интерфейс (int 29h)
- or cx, cx; jz exit; — проверяет, осталось ли ещё слова для вывода. Если счётчик (cx) равен нулю, то переходит к завершению работы программы
- lodsb; dec cx; cmp al, ' '; jz space; int 29h; jmp load; — продолжает цикл до тех пор, пока не будет найден пробел, затем выводит слово и переходит к поиску следующего слова
- dec si; mov di, si; add cx, 2; — уменьшает индекс (si) на единицу, сохраняет индекс в (di), увеличивает счётчик (cx) на два и переходит к выводу следующего слова
- mov ah, 02h; mov dl, ' '; int 21h; — использует BIOS-интерфейс для вывода пробела
- loop cyc; — переходит к началу цикла
- jmp load; — если был найден пробел, то переходит к поиску следующего слова
- space: dec si; mov di, si; int 29h; — уменьшает индекс (si) на единицу и переходит к выводу предыдущего слова
- exit: — выход из программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д