Определение количества предложений в заданном тексте - Assembler

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

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

Определите количество предложений в заданном тексте (предложение заканчивается либо точкой, либо вопросительным или восклицательным знаком) в ассемблере надо

Решение задачи: «Определение количества предложений в заданном тексте»

textual
Листинг программы
  1. .model small                
  2. .386                        
  3.  
  4. .data
  5. count   db  0
  6. msg     db  'One. Two! Three? Four! Five. Six? Seven?'
  7. len     equ $-msg
  8.  
  9. .stack                  
  10.     db  256 dup(?)      
  11.  
  12. .code                  
  13. start:                  
  14.     mov ax,@data
  15.     mov ds,ax
  16.    
  17.     push ds
  18.     pop es
  19.    
  20.     cld
  21.  
  22. lea si,msg+1 ; предложение не может кончится не начавшись
  23. mov cx,len
  24. dec cx                 ; и мы сэкономим на проверке первого знака
  25. find:
  26.     lodsb
  27.        
  28.     cmp al,'.'
  29.     jz ok
  30.        
  31.     cmp al,'!'
  32.     jz ok
  33.        
  34.     cmp al,'?'
  35.     jz ok
  36.        
  37.     jmp skip
  38.        
  39.     ok:
  40.     inc count
  41.        
  42.     skip:  
  43. loop find
  44.  
  45. exit:  
  46.     mov ah,4Ch              
  47.     mov al,00h              
  48.     int 21h
  49. end start

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

  1. Объявлены две переменные: count и msg.
  2. Переменная len инициализируется значением -msg.
  3. Задается начальный адрес стека.
  4. Код размещается в сегменте code.
  5. Выполняется команда mov ax,@data для установки сегмента данных в ax.
  6. Выполняется команда mov ds,ax для установки ds в сегмент данных.
  7. Выполняется команда push ds для сохранения ds на стеке.
  8. Выполняется команда pop es для восстановления ds из стека.
  9. Выполняется команда cld для установки флага направления в csd (указатель стека).
  10. Выполняется команда lea si,msg+1 для инициализации si началом строки msg.
  11. Выполняется команда mov cx,len для установки cx равным len.
  12. Выполняется команда dec cx для уменьшения cx на единицу (предложение не может закончиться не начавшись).
  13. Выполняется команда find, которая осуществляет поиск знаков препинания в строке msg.
  14. Если знак равен точке, выполняется команда jz для перехода к следующей итерации цикла.
  15. Если знак равен восклицательному знаку, выполняется команда jz для перехода к следующей итерации цикла.
  16. Если знак равен вопросительному знаку, выполняется команда jz для перехода к следующей итерации цикла.
  17. Если знак не равен ни одному из перечисленных, выполняется команда jmp для перехода к следующей итерации цикла.
  18. Если знак равен точке, выполняется команда inc count для увеличения count на единицу.
  19. Если знак равен восклицательному знаку, выполняется команда inc count для увеличения count на единицу.
  20. Если знак равен вопросительному знаку, выполняется команда inc count для увеличения count на единицу.
  21. Если знак не равен ни одному из перечисленных, выполняется команда jmp для перехода к следующей итерации цикла.
  22. После окончания цикла выполняется команда loop find.
  23. Если все знаки проверены, выполняется команда exit.
  24. Выполняется команда mov ah,4Ch для закрытия программы.
  25. Выполняется команда mov al,00h для установки регистра al в ноль.
  26. Выполняется команда int 21h для выхода из программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

5   голосов , оценка 4.2 из 5

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

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

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