Подсчёт вхождений символа в строку - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д