Посчитать сколько раз встречаются символы - Assembler
Формулировка задачи:
Здравствуйте! Помогите, пожалуйста, решить задачу, для неё используется отладчик AFDP.
Сама задача:
В памяти дана строка символов, находящаяся по адресу А1 и длиной N. Посчитать сколько раз встречаются символы "x", "y" и "z". Результат записать в три смежные ячейки памяти.
Есть в качестве примера часть кода, но на FASM. Из-под отладчика будет ругаться.
mov si,a; Запоминаем начало строки xor ax,ax; Готовим регистр для счета кол-ва вхождения mov cx,n; Устанавливаем цикл до конца строки for: cmp byte [si+cx],'z' ;Если символ равен некоему jne next; inc ax; Увеличиваем счетчик кол-ва next: loop for mov z,ax; А потом запоминаем его в переменку
Решение задачи: «Посчитать сколько раз встречаются символы»
textual
Листинг программы
include 'win32ax.inc' .data ; В памяти дана строка символов, находящаяся по адресу А1 A1 db 'HI! I''M THE XXXXXYYZ PROGRAM! NEW YORK! NEWZELAND!' ; и длиной N N = $ - A1 buffer rb MAX_PATH formatd db 'Символ X встречается: %d раз', 13, 10 db 'Символ Y встречается: %d раз', 13, 10 db 'Символ Z встречается: %d раз', 0 ; Ячейки памяти NX dd ? NY dd ? NZ dd ? .code start: ; Ищем X mov BL, 'X' call find_char ; Записываем в переменку NX mov [NX], eax ; Ищем Y mov BL, 'Y' call find_char ; Записываем в переменку NY mov [NY], eax ; Ищем Z mov BL, 'Z' call find_char ; Записываем в переменку NZ mov [NZ], eax ; Выводим результат и выходим из программы cinvoke wsprintf, buffer, formatd, [NX], [NY], [NZ] invoke MessageBox, HWND_DESKTOP, buffer, "Задачка", MB_OK invoke ExitProcess,0 ; Процедура поиска символа find_char: ; Запоминаем начало строки mov ESI, A1 ; Готовим регистр для счета кол-ва вхождения xor EAX, EAX ; Устанавливаем цикл до конца строки mov ECX, N for: ; Если символ равен некоему cmp byte [ESI+ECX], BL jne next ; Увеличиваем счетчик кол-ва inc EAX next: loop for ret .end start
Объяснение кода листинга программы
- Включаем файл 'win32ax.inc'.
- Задаем строку символов, находящуюся по адресу A1 и длиной N.
- Создаем буфер для вывода результатов.
- Создаем формат строки для вывода результатов.
- Создаем ячейки памяти NX, NY, NZ для хранения количества вхождений символов X, Y, Z.
- Запускаем программу.
- Программа ищет символ X, сохраняет количество его вхождений в переменную NX.
- Программа ищет символ Y, сохраняет количество его вхождений в переменную NY.
- Программа ищет символ Z, сохраняет количество его вхождений в переменную NZ.
- Программа выводит результаты на экран.
- Программа завершается.
- Создаем процедуру поиска символа.
- Процедура ищет символ, начиная с начала строки.
- Процедура устанавливает цикл до конца строки.
- В цикле проверяет, равен ли текущий символ искомому.
- Если символы не равны, увеличивает счетчик количества вхождений.
- После цикла возвращает 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д