#include <stdio.h>
#include <string.h>
int main( ) {
char * x = "asbc4a2bab " ;
char * y = "ab" ;
char bufor[ 100 ] ;
asm volatile (
".intel_syntax noprefix;"
"mov ecx,%0;"
"push ecx;" //wrzuca na stos
"mov ecx,%1;"
"mov eax,%2;"
"call zadanie1;"
"jmp wyjscie;"
"zadanie1:"
"push ebp;" //wrzucamy ebp na stos
"push eax;"
"push ecx;" //ecx zliczanie
"push edi;" //edi destination
"mov ebp,esp;" //do ebp adres stosu
"mov esi,[ebp+20];" //esi bezposrednio do x
"mov edi,[ebp+4];" //edi adres y
"mov ebx,[ebp+8];" //ebx bufor
"mov eax,0;" //eax to false
"push eax;"
"push esi;"
"push eax;"
"etykieta_x:"
"mov eax,[esp+8];"
"cmp eax,0;"
"je etykieta_y;"
"mov [esp+4],esi;"
"mov eax,0;"
"mov [esp+8],eax;"
//"mov [esp+4],esi;"
"etykieta_y:"
"mov eax,[edi];"
"cmp eax,'\0 ';" //porownoje eax z koncem
"je koniec_etykiety_x;"
"add edi,1;" //zwiekszamy petle
"cmp eax,[esi];" //porownoje y i x
"jne etykieta_y;" //wrocimy do etykiety y jesli nie sa rowne
"ustaw_flage:"
"pop eax;"
"mov eax,1;" //ustawia flage
"push eax;"
"koniec_etykiety_x:"
"pop eax;"
"cmp eax,1;"
"jne iteruj_dalej;"
"mov eax,0;"
"push eax;"
"iteruj_po_znakach:"
"add esi,1;"
"mov eax,[esi];"
"cmp eax,'\0 ';"
"je koniec;"
"cmp eax,' ';"
"je spacja_wykryta;"
"jmp etykieta_x;"
"spacja_wykryta:"
"mov eax,1;"
"mov [esp+8],eax;"
"jmp iteruj_po_znakach;"
"iteruj_dalej:"
"mov eax,0;"
"push eax;"
"add esi,1;" //zwiekszamy adres
"mov eax,[esi];" //pobieramhy nast zznak
"cmp eax,'\0 ';"
"je zapisz_do_bufora;"
"cmp eax,' ';"
"je spacja_wykryta_2;"
"mov eax,[esp+8];"
"cmp eax,0;"
"je etykieta_x;"
"jmp zapisz_do_bufora;"
"spacja_wykryta_2:"
"mov eax,1;"
"mov [esp+8],eax;"
"jmp iteruj_dalej;"
"zapisz_do_bufora:"
"mov eax,[esp+4];"
"interuj_po_slowie:"
"mov edx,[eax];"
"cmp edx,' ';"
"je etykieta_x;"
"cmp edx, '\0 ';"
"je etykieta_x;"
"mov [ebx],edx;"
"add eax,1;"
"add ebx,1;"
"jmp iteruj_po_slowie;"
"koniec:"
"pop edi;" //zdejmuje ze stosu
"pop ecx;"
"pop eax;"
"pop ebp;"
"ret;" //wyjdzie z funkcji
"wyjscie:"
".att_syntax_prefix;"
:
: "r" ( x) , "r" ( y) , "r" ( bufor)
: "eax" , "ecx"
) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmludCBtYWluKCl7CgljaGFyICp4ID0gImFzYmM0YTJiYWIgIjsKCWNoYXIgKnkgPSAiYWIiOwoJY2hhciBidWZvclsxMDBdOwphc20gdm9sYXRpbGUgKAoJIi5pbnRlbF9zeW50YXggbm9wcmVmaXg7IgoJIm1vdiBlY3gsJTA7IgoJInB1c2ggZWN4OyIgLy93cnp1Y2EgbmEgc3RvcwoJIm1vdiBlY3gsJTE7IgoJIm1vdiBlYXgsJTI7IgoJImNhbGwgemFkYW5pZTE7IgoJImptcCB3eWpzY2llOyIKCSJ6YWRhbmllMToiCgkicHVzaCBlYnA7IiAvL3dyenVjYW15IGVicCBuYSBzdG9zCgkKCSJwdXNoIGVheDsiCgkicHVzaCBlY3g7IiAvL2VjeCB6bGljemFuaWUKCSJwdXNoIGVkaTsiIC8vZWRpIGRlc3RpbmF0aW9uCgkibW92IGVicCxlc3A7IiAvL2RvIGVicCBhZHJlcyBzdG9zdQoJCgkibW92IGVzaSxbZWJwKzIwXTsiIC8vZXNpIGJlenBvc3JlZG5pbyBkbyB4CgkibW92IGVkaSxbZWJwKzRdOyIgLy9lZGkgYWRyZXMgeQoJIm1vdiBlYngsW2VicCs4XTsiLy9lYnggYnVmb3IKCSJtb3YgZWF4LDA7Ii8vZWF4IHRvIGZhbHNlCgkicHVzaCBlYXg7IgoJInB1c2ggZXNpOyIKCSJwdXNoIGVheDsiCgkiZXR5a2lldGFfeDoiCgkKCSJtb3YgZWF4LFtlc3ArOF07IgoJImNtcCBlYXgsMDsiCgkiamUgZXR5a2lldGFfeTsiCgkibW92IFtlc3ArNF0sZXNpOyIKCSJtb3YgZWF4LDA7IgoJIm1vdiBbZXNwKzhdLGVheDsiCgkvLyJtb3YgW2VzcCs0XSxlc2k7IgoJCSJldHlraWV0YV95OiIKCQkKCQkJIm1vdiBlYXgsW2VkaV07IgoJCQkiY21wIGVheCwnXDAnOyIgLy9wb3Jvd25vamUgZWF4IHoga29uY2VtCgkJCSJqZSBrb25pZWNfZXR5a2lldHlfeDsiCgkJCSJhZGQgZWRpLDE7Ii8vendpZWtzemFteSBwZXRsZQoJCQkiY21wIGVheCxbZXNpXTsiLy9wb3Jvd25vamUgeSBpIHgKCQkJImpuZSBldHlraWV0YV95OyIvL3dyb2NpbXkgZG8gZXR5a2lldHkgeSBqZXNsaSBuaWUgc2Egcm93bmUKCQkJInVzdGF3X2ZsYWdlOiIKCQkJCSJwb3AgZWF4OyIKCQkJCSJtb3YgZWF4LDE7IiAvL3VzdGF3aWEgZmxhZ2UKCQkJCSJwdXNoIGVheDsiCgkJCgkJImtvbmllY19ldHlraWV0eV94OiIKCQkicG9wIGVheDsiCgkJImNtcCBlYXgsMTsiCgkJImpuZSBpdGVydWpfZGFsZWo7IgoJCSJtb3YgZWF4LDA7IgoJCSJwdXNoIGVheDsiCgkJCgkJIml0ZXJ1al9wb196bmFrYWNoOiIKCQkJImFkZCBlc2ksMTsiCgkJCSJtb3YgZWF4LFtlc2ldOyIKCQkJImNtcCBlYXgsJ1wwJzsiCgkJCSJqZSBrb25pZWM7IgoJCQkiY21wIGVheCwnICc7IgoJCQkiamUgc3BhY2phX3d5a3J5dGE7IgoJCQkiam1wIGV0eWtpZXRhX3g7IgoJCQkKCQkJInNwYWNqYV93eWtyeXRhOiIKCQkJCSJtb3YgZWF4LDE7IgoJCQkJIm1vdiBbZXNwKzhdLGVheDsiCgkJCQkiam1wIGl0ZXJ1al9wb196bmFrYWNoOyIKCQkJCgkJCgkJCgkJIml0ZXJ1al9kYWxlajoiCgkJCSJtb3YgZWF4LDA7IgoJCQkicHVzaCBlYXg7IgoJCQkiYWRkIGVzaSwxOyIvL3p3aWVrc3phbXkgYWRyZXMKCQkJIm1vdiBlYXgsW2VzaV07Ii8vcG9iaWVyYW1oeSBuYXN0IHp6bmFrCgkJCSJjbXAgZWF4LCdcMCc7IgoJCQkiamUgemFwaXN6X2RvX2J1Zm9yYTsiCgkJCSJjbXAgZWF4LCcgJzsiCgkJCSJqZSBzcGFjamFfd3lrcnl0YV8yOyIKCQkJCgkJCQkibW92IGVheCxbZXNwKzhdOyIKCQkJCSJjbXAgZWF4LDA7IgoJCQkJImplIGV0eWtpZXRhX3g7IgoJCQkJImptcCB6YXBpc3pfZG9fYnVmb3JhOyIKCQkJCgkJCSJzcGFjamFfd3lrcnl0YV8yOiIKCQkJIm1vdiBlYXgsMTsiCgkJCSJtb3YgW2VzcCs4XSxlYXg7IgoJCQkiam1wIGl0ZXJ1al9kYWxlajsiCgkJCQkKCQkJCgkJCSJ6YXBpc3pfZG9fYnVmb3JhOiIKCQkJCSJtb3YgZWF4LFtlc3ArNF07IgoJCQkKCQkJCSJpbnRlcnVqX3BvX3Nsb3dpZToiCgkJCQkJIm1vdiBlZHgsW2VheF07IgoJCQkJCSJjbXAgZWR4LCcgJzsiCgkJCQkJImplIGV0eWtpZXRhX3g7IgoJCQkJCSJjbXAgZWR4LCAnXDAnOyIKCQkJCQkiamUgZXR5a2lldGFfeDsiCgkJCQkJCgkJCQkJIm1vdiBbZWJ4XSxlZHg7IgoJCQkJCSJhZGQgZWF4LDE7IgoJCQkJCSJhZGQgZWJ4LDE7IgoJCQkJCSJqbXAgaXRlcnVqX3BvX3Nsb3dpZTsiCgkJCQoJImtvbmllYzoiCgkicG9wIGVkaTsiIC8vemRlam11amUgemUgc3Rvc3UKCSJwb3AgZWN4OyIKCSJwb3AgZWF4OyIKCSJwb3AgZWJwOyIKCSJyZXQ7IiAvL3d5amR6aWUgeiBmdW5rY2ppCgkid3lqc2NpZToiCgkiLmF0dF9zeW50YXhfcHJlZml4OyIKCToKCToiciIoeCksICJyIih5KSwgInIiKGJ1Zm9yKQoJOiJlYXgiLCAiZWN4IgoJKTsKCXJldHVybiAwOwp9