Подсчитать количество вхождений символа в строку - 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).