Поиск буквы в строке - Assembler

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

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

Мне нужно написать программу, которая ищет символ s в строке и пишет сколько раз он встречается, есть такая программа, но почему-то не считает. Помогите, пожалуйста.
Листинг программы
  1. name a
  2. .model small
  3. .stack 100h
  4. .data
  5. mes db 'Assembler$'
  6. res db 'kolichestvo povtorov = $'
  7. .code
  8. main:
  9. mov ax,@data
  10. mov ds,ax
  11. mov al,01h ; zanosim simvol
  12. int 21h
  13. mov bx,0 ; schetchik povtorov
  14. mov cx,20
  15. m1:
  16. cmp mes[bx], al
  17. je Lequal
  18. eqback:
  19. loop m1
  20. jmp print
  21. Lequal:
  22. inc cx
  23. jmp eqback
  24. print:
  25. mov ah,09h
  26. mov dx,offset res
  27. int 21h
  28. mov ah,02h
  29. mov dx, bx
  30. int 21h
  31. end main

Решение задачи: «Поиск буквы в строке»

textual
Листинг программы
  1. name a
  2. .model small
  3. .stack 100h
  4.  
  5. .data
  6. mes db 'Assembler$'
  7. len dw $-mes
  8. res db 'kolichestvo povtorov = $'
  9.  
  10. .code
  11. main:
  12. mov ax,@data
  13. mov ds,ax
  14.  
  15. mov ah,01h ; zanosim simvol
  16. int 21h
  17.  
  18. mov bx,0 ; schetchik povtorov
  19. mov cx,len
  20. mov si,0
  21. m1:
  22. cmp mes[si], al
  23. jne next
  24. inc bx
  25. next:
  26. inc si
  27. loop m1
  28. jmp print
  29.  
  30. print:
  31. mov ah,09h
  32. mov dx,offset res
  33. int 21h
  34. mov  al,bl
  35. add  al,'0'
  36. int  29h
  37.  
  38. mov  ah,1
  39. int  21h
  40. mov  ax,4c00h
  41. int  21h
  42.  
  43. end main

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

  1. Объявление переменных:
    • Название переменной: mes
    • Значение: 'Assembler$'
    • Название переменной: len
    • Значение: длина строки 'Assembler$'
    • Название переменной: res
    • Значение: 'kolichestvo povtorov = $'
  2. Ввод символа с клавиатуры:
    • mov ah,01h; - заносим символ
    • int 21h - вызов процедуры ввода символа
  3. Поиск и подсчёт совпадений:
    • mov bx,0 - инициализация счётчика повторов
    • mov cx,len - инициализация счётчика цикла
    • mov si,0 - инициализация индекса строки
    • m1: - метка начала цикла
    • cmp mes[si], al - сравнение символа с текущим элементом строки
    • jne next - переход к следующему элементу при неравенстве
    • inc bx - инкремент счётчика повторов
    • next: - метка для перехода
    • inc si - увеличение индекса
    • loop m1 - повторение цикла для всех символов
    • jmp print - переход к процедуре вывода результата
  4. Вывод результата:
    • mov ah,09h - установка номера сервиса для вывода строки
    • mov dx,offset res - передача адреса строки для вывода
    • int 21h - вызов процедуры для вывода строки
    • mov al,bl - запись значения счётчика повторов в al
    • add al,'0' - конвертация числа в символ
    • int 29h - вызов процедуры для вывода значения
    • mov ah,1 - установка номера сервиса для ввода символа
    • int 21h - вызов процедуры ввода символа
    • mov ax,4c00h - завершение программы
    • int 21h - вызов процедуры завершения программы

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


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

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

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

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

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

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