Подсчёт вхождений символа в строку - Assembler

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

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

Помогите,пожалуйста,составить программу по составленной мной блок-схеме.Задание: входные данные:адрес массива,конец массива: $,код символа-в каком-либо регистре,выходные данные:количество найденных символов

Решение задачи: «Подсчёт вхождений символа в строку»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.  
  9. kbdBuffer       db      80, 0, 80 dup(0)
  10. Prompt          db      'Enter string: ', 0Dh, 0Ah, '$'
  11. Result          db      'Count: ', '$'
  12. CrLf            db      0Dh, 0Ah, '$'
  13.  
  14. Count           dw      0
  15. Char            db      '0'
  16. String          db      80 dup(0)
  17.  
  18. .code
  19.  
  20. main    proc
  21.         mov     ax,     @data
  22.         mov     ds,     ax
  23.  
  24.         ;ввод строки
  25.         ;строка приглашения к вводу
  26.         mov     ah,     09h
  27.         lea     dx,     Prompt
  28.         int     21h
  29.         ;чтение в буфер из клавиатуры
  30.         mov     ah,     0Ah
  31.         lea     dx,     kbdBuffer
  32.         int     21h
  33.         mov     ah,     09h
  34.         lea     dx,     CrLf
  35.         int     21h
  36.         ;копирование из буфера в переменную строки
  37.         lea     si,     kbdBuffer+2
  38.         lea     di,     String
  39.         mov     cx,     0
  40.         mov     cl,     [kbdBuffer+1]
  41.         jcxz    @@SkipCopy
  42.         push    es
  43.         pushf
  44.         push    ds
  45.         pop     es
  46.         cld
  47.         rep     movsb
  48.         popf
  49.         pop     es
  50. @@SkipCopy:
  51.         ;добавление признака конца строки
  52.         mov     byte ptr [di],  '$'
  53.  
  54.         ;обработка строки - подсчёт количества вхождений
  55.         ;символа в строку
  56.         mov     Count,  0
  57.         lea     si,     String
  58.         cld
  59. @@While:
  60.         lodsb                   ;ввести элемент массива, АДРЕС+1
  61.         cmp     al,     '$'     ;сравнить элемент с кодом "конец массива"
  62.         je      @@Break
  63.         cmp     al,     Char    ;проверить элемент массива на равенство искомому символу
  64.         jne     @@While
  65.         inc     Count           ;СЧЁТ=+1
  66.         jmp     @@While
  67. @@Break:
  68.  
  69.         ;вывод результата на экран
  70.         mov     ah,     09h
  71.         lea     dx,     Result
  72.         int     21h
  73.         mov     ax,     Count
  74.         aam
  75.         add     ax,     '00'
  76.         mov     dl,     ah
  77.         mov     dh,     al
  78.         mov     ah,     02h
  79.         int     21h
  80.         mov     dl,     dh
  81.         int     21h
  82.  
  83.         ;код завершения программы
  84.         mov     ax,     4C00h
  85.         int     21h
  86. main    endp
  87.  
  88. end     main

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


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

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

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

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

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

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