Подсчитать количество вхождений символа в строку - Assembler
Формулировка задачи:
Помогите найти ошибку.Запускаю программу,но счетчик вхождения символов в строку не увеличивается,так в конце и выводится равный 0.В чем может быть ошибка?
#include <iostream> #include <conio.h> using namespace std; extern "C" void schit(char *str,char *simv,int kol,int lens); void main(){ char *str= new char [100]; char *simv= new char [3]; int kol=0; cout <<"vvedite stroku"<<endl; gets(str); cout <<"vvedite simvol"<<endl; gets(simv); schit(str,simv,kol,strlen(str)); cout<<kol<< endl; system("pause"); }
.686 .model flat .code public schit schit proc C strok:dword,simv:byte,len:dword,lens:dword mov esi,strok mov al,simv mov ecx,lens mov edi,len cycl: mov dl,[esi] cmp al,dl je pereh inc esi pereh: inc edi inc esi loop cycl ret schit endp end
Решение задачи: «Подсчитать количество вхождений символа в строку»
textual
Листинг программы
#include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; void main(){ char *str= new char [100]; char *simv= new char [3]; int kol=0; cout <<"vvedite stroku"<<endl; gets(str); cout <<"vvedite simvol"<<endl; gets(simv); int lens=strlen(str); //schit (str,simv,kol,lens); __asm { mov ecx,lens mov kol,0 mov edi,simv mov al,[edi] mov edi,str poisk: repne scasb jecxz exit inc kol jmp poisk exit: } cout<<kol<< endl; system("pause"); }
Объяснение кода листинга программы
В этом коде на языке ассемблера выполняется подсчет количества вхождений символа в строку.
- Сначала подключаются необходимые заголовочные файлы.
- Затем определяется функция main, в которой выделяется память под строку str и символ simv.
- Далее, с помощью функции cout выводится сообщение
введите строку
и считывается сама строка. - После этого выводится сообщение
введите символ
и считывается символ. - Затем определяется переменная lens, которая хранит длину строки.
- Выполняется подсчет количества вхождений символа с помощью ассемблерного кода.
- После выполнения ассемблерного кода, значение переменной kol выводится на экран с помощью функции cout.
- В конце программы выполняется пауза с помощью функции system(
pause
).