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

Объяснение кода листинга программы

В этом коде на языке ассемблера выполняется подсчет количества вхождений символа в строку.

  1. Сначала подключаются необходимые заголовочные файлы.
  2. Затем определяется функция main, в которой выделяется память под строку str и символ simv.
  3. Далее, с помощью функции cout выводится сообщение введите строку и считывается сама строка.
  4. После этого выводится сообщение введите символ и считывается символ.
  5. Затем определяется переменная lens, которая хранит длину строки.
  6. Выполняется подсчет количества вхождений символа с помощью ассемблерного кода.
  7. После выполнения ассемблерного кода, значение переменной kol выводится на экран с помощью функции cout.
  8. В конце программы выполняется пауза с помощью функции system(pause).

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы