В тексте, состоящая из слов, разделенных пробелами, найти слова, начинающиеся на "к" - 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

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

Выполняемый код на ассемблере:

  1. push ds; pop es; — откладывает в стек используемые сегменты (ds, es) и восстанавливает сегмент данных
  2. lea di, text; mov cx, len; — инициализирует индекс (di) и счётчик (cx) для цикла по тексту
  3. mov al, ' '; repne scasb; jne exit; — подготавливает переменную (al) для сравнения со следующим символом текста, и если символ не равен пробелу, то продолжает цикл
  4. mov si, di; lodsb; dec cx; cmp al, 'k'; jz showk; — переносит индекс (si) в начало цикла, загружает символ в (al), уменьшает счётчик (cx) на единицу и проверяет, является ли текущий символ 'k'. Если это так, то переходит к выводу найденных слов
  5. mov di, si; inc cx; loop cyc; — продолжает цикл до тех пор, пока не будет найден 'k'
  6. int 29h; — выводит найденное слово, используя BIOS-интерфейс (int 29h)
  7. or cx, cx; jz exit; — проверяет, осталось ли ещё слова для вывода. Если счётчик (cx) равен нулю, то переходит к завершению работы программы
  8. lodsb; dec cx; cmp al, ' '; jz space; int 29h; jmp load; — продолжает цикл до тех пор, пока не будет найден пробел, затем выводит слово и переходит к поиску следующего слова
  9. dec si; mov di, si; add cx, 2; — уменьшает индекс (si) на единицу, сохраняет индекс в (di), увеличивает счётчик (cx) на два и переходит к выводу следующего слова
  10. mov ah, 02h; mov dl, ' '; int 21h; — использует BIOS-интерфейс для вывода пробела
  11. loop cyc; — переходит к началу цикла
  12. jmp load; — если был найден пробел, то переходит к поиску следующего слова
  13. space: dec si; mov di, si; int 29h; — уменьшает индекс (si) на единицу и переходит к выводу предыдущего слова
  14. exit: — выход из программы

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

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