Подсчитать сколько раз в строке встречается заданная буква - Assembler
Формулировка задачи:
Нашел код тут на форуме скоммпилировал в tasm выводит не понятно, что, а долно выводить количество заданых букв в тексте.
.model tiny .code .386 org 100h start: mov ah,10 ;ввод строки lea dx,strBig int 21h mov ah,2 ;перевод строки mov dl,10 int 21h xor bx,bx ;очистить счетчик xor cx,cx mov cl,[len] ;длина строки lea di,str ;на строку mov al,'c' ;символ, который надо подсчитать m1: repne scasb ;искать символ в строке jnz short exit ;символ не найден, выход m2: ;найден inc bl ;увеличить счетчик на 1 test cx,cx ;если СХ не 0, в строке есть символы, jnz short m1 ; продолжить поиск exit: ;----------Вывод на экран--------- mov ax,bx ;вывод на экран xor cx, cx mov bx, 10 ; основание сс. 10 для десятеричной и т.п. oi2: xor dx,dx div bx ; Делим число на основание сс. В остатке получается последняя цифра. ; Сразу выводить её нельзя, поэтому сохраним её в стэке. push dx inc cx ; А с частным повторяем то же самое, отделяя от него очередную ; цифру справа, пока не останется ноль, что значит, что дальше ; слева только нули. test ax, ax jnz oi2 ; Теперь приступим к выводу. mov ah, 02h oi3: pop dx ; Извлекаем очередную цифру, переводим её в символ и выводим. add dl, '0' int 21h ; Повторим ровно столько раз, сколько цифр насчитали. loop oi3 ;----------------------------------------- xor ax,ax ;ждать нажатия клавиши int 16h ret ;выход из программы ;--------Строка----------- strBig db 41 ;40 символов len db ? ;длина str: ;строка end start
При запуске программы выводит сразу 1 и потом при вводе символов выводить числа "1044" и т.д.
Решение задачи: «Подсчитать сколько раз в строке встречается заданная буква»
textual
Листинг программы
.model tiny .code .386 org 100h start: mov ah,10 ;ввод строки lea dx,strBig int 21h mov ah,2 ;перевод строки mov dl,10 int 21h xor bx,bx ;очистить счетчик xor cx,cx mov cl,[len+1] ;длина строки lea di,strBig ;на строку mov al,'c' ;символ, который надо подсчитать m1: repne scasb ;искать символ в строке jnz short exit ;символ не найден, выход m2: ;найден inc bl ;увеличить счетчик на 1 test cx,cx ;если СХ не 0, в строке есть символы, jnz short m1 ; продолжить поиск exit: ;----------Вывод на экран--------- mov ax,bx ;вывод на экран xor cx, cx mov bx, 10 ; основание сс. 10 для десятеричной и т.п. oi2: xor dx,dx div bx ; Делим число на основание сс. В остатке получается последняя цифра. ; Сразу выводить её нельзя, поэтому сохраним её в стэке. push dx inc cx ; А с частным повторяем то же самое, отделяя от него очередную ; цифру справа, пока не останется ноль, что значит, что дальше ; слева только нули. test ax, ax jnz oi2 ; Теперь приступим к выводу. mov ah, 02h oi3: pop dx ; Извлекаем очередную цифру, переводим её в символ и выводим. add dl, '0' int 21h ; Повторим ровно столько раз, сколько цифр насчитали. loop oi3 ;----------------------------------------- xor ax,ax ;ждать нажатия клавиши int 16h ret ;выход из программы ;--------Строка----------- strBig db 41 ;40 символов len db ? ;длина ;str: ;строка end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д