Подсчёт вхождений символа в строку - Assembler
Формулировка задачи:
Помогите,пожалуйста,составить программу по составленной мной блок-схеме.Задание: входные данные:адрес массива,конец массива: $,код символа-в каком-либо регистре,выходные данные:количество найденных символов
Решение задачи: «Подсчёт вхождений символа в строку»
textual
Листинг программы
- LOCALS
- .model small
- .stack 100h
- .data
- kbdBuffer db 80, 0, 80 dup(0)
- Prompt db 'Enter string: ', 0Dh, 0Ah, '$'
- Result db 'Count: ', '$'
- CrLf db 0Dh, 0Ah, '$'
- Count dw 0
- Char db '0'
- String db 80 dup(0)
- .code
- main proc
- mov ax, @data
- mov ds, ax
- ;ввод строки
- ;строка приглашения к вводу
- mov ah, 09h
- lea dx, Prompt
- int 21h
- ;чтение в буфер из клавиатуры
- mov ah, 0Ah
- lea dx, kbdBuffer
- int 21h
- mov ah, 09h
- lea dx, CrLf
- int 21h
- ;копирование из буфера в переменную строки
- lea si, kbdBuffer+2
- lea di, String
- mov cx, 0
- mov cl, [kbdBuffer+1]
- jcxz @@SkipCopy
- push es
- pushf
- push ds
- pop es
- cld
- rep movsb
- popf
- pop es
- @@SkipCopy:
- ;добавление признака конца строки
- mov byte ptr [di], '$'
- ;обработка строки - подсчёт количества вхождений
- ;символа в строку
- mov Count, 0
- lea si, String
- cld
- @@While:
- lodsb ;ввести элемент массива, АДРЕС+1
- cmp al, '$' ;сравнить элемент с кодом "конец массива"
- je @@Break
- cmp al, Char ;проверить элемент массива на равенство искомому символу
- jne @@While
- inc Count ;СЧЁТ=+1
- jmp @@While
- @@Break:
- ;вывод результата на экран
- mov ah, 09h
- lea dx, Result
- int 21h
- mov ax, Count
- aam
- add ax, '00'
- mov dl, ah
- mov dh, al
- mov ah, 02h
- int 21h
- mov dl, dh
- int 21h
- ;код завершения программы
- mov ax, 4C00h
- int 21h
- main endp
- end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д