Assembler - zliczanie znaków

0

Program ma zliczać wystąpienie poszczególnych znaków alfanumer. i liczby wystąpień umieszczać w odpowiedniej tablicy bajtów. Mam to tak napisane, ale mi nie działa i nie wiem w czym tkwi problem.


string tekst;
char wynik[131]="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";


int _tmain(int argc, _TCHAR* argv[])

{
cout<<"Podaj tekst : ";
	getline(cin,tekst);                        

	 int dlugosc = tekst.length();         
	 char pomoc;



	for(int i = 0; i < dlugosc;i++)
	{
		pomoc = tekst[i];           

	_asm
	{
		mov EDI,offset wynik
		mov EBX,0
		mov AL,pomoc               

petla:
		cmp AL, BL                 
		je wyskok               
		add BL,1
		jmp petla

wyskok:
		add EDI,EBX
		add [EDI],1
	}

	}

	for(int i=0;i<125;i++)
	{
		if((int)wynik[i] != 48)

		cout<<char(i)<< " = " << (int)wynik[i]-48<<endl;

	cin.get();
	getchar();
	return 0;
	}
}
 
1

To co napisałeś nie ma sensu. Pokazuje też że zupełnie nie rozumiesz idei asemblera. Każdy znak ASCII ma swój numer. Czytasz go do al, super. A teraz po co ta pętla? Czemu po prostu nie dodasz tej wartości do offsetu tablicy? Skoro offset mówi że tablica zaczyna się na komórce o numerze x to komórka dla znaku numer 64 ma adres x+64. A znak numer 64 ma taka właśnie wartość liczbową...

1 użytkowników online, w tym zalogowanych: 0, gości: 1