Подсчитать сколько раз в строке встречается заданная буква - Assembler

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

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

Нашел код тут на форуме скоммпилировал в tasm выводит не понятно, что, а долно выводить количество заданых букв в тексте.
Листинг программы
  1. .model tiny
  2. .code
  3. .386
  4. org 100h
  5. start:
  6. mov ah,10 ;ввод строки
  7. lea dx,strBig
  8. int 21h
  9. mov ah,2 ;перевод строки
  10. mov dl,10
  11. int 21h
  12. xor bx,bx ;очистить счетчик
  13. xor cx,cx
  14. mov cl,[len] ;длина строки
  15. lea di,str ;на строку
  16. mov al,'c' ;символ, который надо подсчитать
  17. m1:
  18. repne scasb ;искать символ в строке
  19. jnz short exit ;символ не найден, выход
  20. m2: ;найден
  21. inc bl ;увеличить счетчик на 1
  22. test cx,cx ;если СХ не 0, в строке есть символы,
  23. jnz short m1 ; продолжить поиск
  24. exit:
  25. ;----------Вывод на экран---------
  26. mov ax,bx
  27. ;вывод на экран
  28. xor cx, cx
  29. mov bx, 10 ; основание сс. 10 для десятеричной и т.п.
  30. oi2:
  31. xor dx,dx
  32. div bx
  33. ; Делим число на основание сс. В остатке получается последняя цифра.
  34. ; Сразу выводить её нельзя, поэтому сохраним её в стэке.
  35. push dx
  36. inc cx
  37. ; А с частным повторяем то же самое, отделяя от него очередную
  38. ; цифру справа, пока не останется ноль, что значит, что дальше
  39. ; слева только нули.
  40. test ax, ax
  41. jnz oi2
  42. ; Теперь приступим к выводу.
  43. mov ah, 02h
  44. oi3:
  45. pop dx
  46. ; Извлекаем очередную цифру, переводим её в символ и выводим.
  47. add dl, '0'
  48. int 21h
  49. ; Повторим ровно столько раз, сколько цифр насчитали.
  50. loop oi3
  51. ;-----------------------------------------
  52. xor ax,ax ;ждать нажатия клавиши
  53. int 16h
  54. ret ;выход из программы
  55. ;--------Строка-----------
  56. strBig db 41 ;40 символов
  57. len db ? ;длина
  58. str: ;строка
  59. end start
При запуске программы выводит сразу 1 и потом при вводе символов выводить числа "1044" и т.д.

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

textual
Листинг программы
  1. .model tiny
  2. .code
  3. .386
  4. org 100h
  5. start:
  6.     mov ah,10   ;ввод строки
  7.     lea dx,strBig
  8.     int 21h
  9.  
  10.     mov ah,2    ;перевод строки
  11.     mov dl,10
  12.     int 21h
  13.  
  14.     xor bx,bx   ;очистить счетчик
  15.     xor cx,cx
  16.     mov cl,[len+1]    ;длина строки
  17.     lea di,strBig  ;на строку
  18.     mov al,'c'  ;символ, который надо подсчитать
  19. m1:
  20.     repne scasb ;искать символ в строке
  21.     jnz short exit  ;символ не найден, выход
  22. m2:         ;найден
  23.     inc bl      ;увеличить счетчик на 1
  24.     test cx,cx  ;если СХ не 0, в строке есть символы,
  25.     jnz short m1    ; продолжить поиск
  26.  
  27. exit:
  28. ;----------Вывод на экран---------
  29.     mov ax,bx
  30. ;вывод на экран
  31.     xor     cx, cx
  32.     mov     bx, 10 ; основание сс. 10 для десятеричной и т.п.
  33. oi2:
  34.     xor     dx,dx
  35.     div     bx
  36. ; Делим число на основание сс. В остатке получается последняя цифра.
  37. ; Сразу выводить её нельзя, поэтому сохраним её в стэке.
  38.     push    dx
  39.     inc     cx
  40. ; А с частным повторяем то же самое, отделяя от него очередную
  41. ; цифру справа, пока не останется ноль, что значит, что дальше
  42. ; слева только нули.
  43.     test    ax, ax
  44.     jnz     oi2
  45. ; Теперь приступим к выводу.
  46.     mov     ah, 02h
  47. oi3:
  48.     pop     dx
  49. ; Извлекаем очередную цифру, переводим её в символ и выводим.
  50.     add     dl, '0'
  51.     int     21h
  52. ; Повторим ровно столько раз, сколько цифр насчитали.
  53.     loop    oi3
  54. ;-----------------------------------------
  55.     xor ax,ax   ;ждать нажатия клавиши
  56.     int 16h
  57.  
  58.     ret     ;выход из программы
  59.  
  60. ;--------Строка-----------
  61. strBig db 41    ;40 символов
  62. len db ?    ;длина
  63. ;str:        ;строка
  64.  
  65.     end start

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


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

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

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

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

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

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