В тексте, состоящая из слов, разделенных пробелами, найти слова, начинающиеся на "к" - Assembler

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

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

дано текст состоящая из слов разделенных пробелами, найти слова начинающиеся на "к" , плииз помогите!! На ассемблере, и если не сложно можно с обьяснениями кодов) спасибо большое

Решение задачи: «В тексте, состоящая из слов, разделенных пробелами, найти слова, начинающиеся на "к"»

textual
Листинг программы
  1.     push ds
  2.     pop es
  3.    
  4.     lea di,text
  5.     mov cx,len
  6.     cyc:
  7.         mov al,' '
  8.         repne scasb
  9.         jne exit
  10.    
  11.         mov si,di
  12.    
  13.         lodsb
  14.         dec cx
  15.    
  16.         cmp al,'k'
  17.         jz showk
  18.    
  19.         mov di,si
  20.         inc cx
  21.         loop cyc
  22.    
  23.         showk:
  24.         int 29h
  25.    
  26.         load:  
  27.         or cx,cx
  28.         jz exit
  29.    
  30.         lodsb
  31.    
  32.         dec cx
  33.    
  34.         cmp al,' '
  35.         jz space
  36.    
  37.         int 29h
  38.         jmp load
  39.    
  40.         space:
  41.         dec si
  42.         mov di,si
  43.         add cx,2
  44.    
  45.         mov ah,02h
  46.         mov dl,' '
  47.         int 21h
  48.     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

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

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

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