Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 12.5.2011, 21:49   #41
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: C++ Pomozite mi

Jel moze ovde kratko objasnjenje?
Po nekoj mojoj logici kad gledam ovo:
Kod:
01011080  mov         esi,dword ptr [eax]//esi pokazuje na element registra eax (verovatno arr) 
01011082  and         esi,1  //esi & 1 
01011085  add         eax,14h //??? dodaj nesto? 
01011088  dec         ecx  //dekrementacija pokazivaca  
01011089  jne         main+60h (1011080h)//skok na neku lokaciju u kodu
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 12.5.2011, 21:49   #42
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom Re: C++ Pomozite mi

Citat:
MG-RAY kaže: Pregled poruke
Nadjoh...

Kod:
        temp = arr[i] % 2;
01011080  mov         esi,dword ptr [eax]  
01011082  and         esi,1  
01011085  add         eax,14h  
01011088  dec         ecx  
01011089  jne         main+60h (1011080h)
Kod:
 temp = arr[i] & 1;
01011120  mov         esi,dword ptr [eax]  
01011122  and         esi,1  
01011125  add         eax,14h  
01011128  dec         ecx  
01011129  jne         main+100h (1011120h)
That covers it...
Da, u oba slučaja radi isto. Jel uključena neka optimizacija?
Geomaster je offline   Odgovor sa citatom ove poruke
Stara 12.5.2011, 21:52   #43
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: C++ Pomozite mi

@Todors
Kod:
ulong* arr = new ulong[brElemenata];
...
delete [] arr;
Belphegor je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Belphegor na korisnoj poruci:
Todors (12.5.2011)
Stara 12.5.2011, 22:00   #44
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: C++ Pomozite mi

Evo i sa 50m



Moguće da ima veze i do procesora.
Todors je offline   Odgovor sa citatom ove poruke
Stara 12.5.2011, 22:06   #45
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: C++ Pomozite mi

Jesi li siguran da si "build-ovao" kao release?



edit:


AUUU al' sam se izleteo mozda covek koristi drugi kompajler.
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 12.5.2011, 22:13   #46
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: C++ Pomozite mi

lol, to nisam dirao . U pravu si, evo sad i meni izračunava isto. U čemu je caka?
Ja sam samo ovo drugo promenio
Todors je offline   Odgovor sa citatom ove poruke
Stara 12.5.2011, 22:13   #47
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: C++ Pomozite mi

@Todors

Koji kompajler koristis?

@Geomaster
Pogledaj moj editovani post. Kratak odgovor je - da, full.

@Belphegor
00FF1080 mov esi,dword ptr [eax]
Smesta vrednost u nizu na koju pointer (cija se vrednost nalazi u EAX) pokazuje u ESI registar (koji je zapravo temp).

00FF1082 and esi,1
konkretna and operacija nad ESI registrom

00FF1085 add eax,14h
Inkrementacija pointera na sledeci element

00FF1088 dec ecx
Smanjuje brojac for petlje

00FF1089 jne main+60h (0FF1080h)
Ukoliko ZF (zero flag) flag nije setovan, skace na adresu 0ff1080h (prva instrukcija). ZF ce biti setovan kada poslednja aritmetička operacija (u ovom slučaju dec ecx) rezultira nulom.

Poslednja ispravka: MG-RAY (12.5.2011 u 22:30)
MG-RAY je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku MG-RAY na korisnoj poruci:
Belphegor (12.5.2011)
Stara 12.5.2011, 22:17   #48
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: C++ Pomozite mi

@MG-RAY
Hvala puna na objasnjenju.
Isti mi je rezlutat iako je temp deklarisan van petlje.
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 12.5.2011, 22:25   #49
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: C++ Pomozite mi

Citat:
Belphegor kaže: Pregled poruke
@MG-RAY
Hvala puna na objasnjenju.
Isti mi je rezlutat iako je temp deklarisan van petlje.
NP. Važno je da se uči.

Verovatno nisi koristio dodeljenu vrednost temp promenljive nigde, samim tim kompajler ne vidi nikakvu potrebu da se taj kod uopšte izvrši?
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 12.5.2011, 22:29   #50
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: C++ Pomozite mi

@MG-RAY
sad sam dodao da ispise temp cisto da zna da se koristi i rezlutat je:

WTF? Brzi modulo??!!!??

prvi loop
Kod:
for(ulong i = 0; i < brElemenata; ++i)
012B107F  xor         eax,eax  
012B1081  xor         ecx,ecx  
012B1083  add         eax,1  
012B1086  adc         ecx,0  
012B1089  jne         main+72h (12B1092h)  
012B108B  cmp         eax,2FAF080h  
012B1090  jb          main+63h (12B1083h)  
    {
        temp = arr[i] % 2;
    }
drugi loop
Kod:
for(ulong i = 0; i < brElemenata; ++i)
012B1111  xor         eax,eax  
012B1113  xor         ecx,ecx  
    {
        temp = arr[i] & 1;
012B1115  mov         esi,dword ptr [edi+eax*8]  
012B1118  and         esi,1  
012B111B  xor         ebx,ebx  
012B111D  add         eax,1  
012B1120  adc         ecx,ebx  
012B1122  jne         main+10Bh (12B112Bh)  
    for(ulong i = 0; i < brElemenata; ++i)
012B1124  cmp         eax,2FAF080h  
012B1129  jb          main+0F5h (12B1115h)  
    }
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 12.5.2011, 22:31   #51
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: C++ Pomozite mi

Citat:
Belphegor kaže: Pregled poruke
@MG-RAY
sad sam dodao da ispise temp cisto da zna da se koristi i rezlutat je:
...slika...
WTF? Brzi modulo??!!!??
Hoćeš da C/P kompletan Dissasembly ovde da vidimo u čemu je problem?

P.S. Ispiši vrednost posle svake petlje, jer ako uradiš to samo posle druge, opet će ukloniti prvu, jer se tehnički ne koristi... Možeš da pogledaš moj kod na prethodnoj strani i vidiš o čemu pričam...

EDIT:

Sada vidim, u prvom slučaju kompajler je razvio samo praznu petlju....
MG-RAY je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku MG-RAY na korisnoj poruci:
Belphegor (12.5.2011)
Stara 12.5.2011, 22:36   #52
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: C++ Pomozite mi

Citat:
Ispiši vrednost posle svake petlje...
To je to. Sad su slicni.
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 12.5.2011, 22:38   #53
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: C++ Pomozite mi

Citat:
Belphegor kaže: Pregled poruke
@MG-RAY
sad sam dodao da ispise temp cisto da zna da se koristi i rezlutat je:
Koji si ti car . Na kraju će ispasti da sam ja ipak u pravu
Todors je offline   Odgovor sa citatom ove poruke
Sledećih 2 korisnika se zahvaljuje korisniku Todors na korisnoj poruci:
Belphegor (12.5.2011), zokocx (12.5.2011)
Stara 12.5.2011, 22:43   #54
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom Re: C++ Pomozite mi

To je to, problem solved
Inače, nikad nisam gledao kako kompajler pretvara kôd u asm, ali sada kad vidim mogu da kažem da je inteligentno, "setio se" da u okviru optimizacije koristi pointer
Geomaster je offline   Odgovor sa citatom ove poruke
Stara 14.5.2011, 14:17   #55
Sass Drake
V.I.P. Zaštita
 
Član od: 30.9.2007.
Lokacija: Hypnos Control Room, Tokyo Metropolitan Government Building
Poruke: 5.914
Zahvalnice: 1.181
Zahvaljeno 1.320 puta na 1.094 poruka
Određen forumom Re: C++ Pomozite mi

Da ne otvaram novu temu, da i ja nešto priupitam.
Da li postoji neki način da se fajl učita navođenjem „%AllUsersProfile%\\Application Data\\...” i „"%ProgramData%\\...” umjesto navođenja aspolutne adrese (C:\\...) ili postoji neka metoda koja vraća string lokacije %AllUsersProfile% i %ProgramData%?
Sass Drake je offline   Odgovor sa citatom ove poruke
Stara 14.5.2011, 14:58   #56
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom Re: C++ Pomozite mi

Citat:
Sass Drake kaže: Pregled poruke
Da ne otvaram novu temu, da i ja nešto priupitam.
Da li postoji neki način da se fajl učita navođenjem „%AllUsersProfile%\\Application Data\\...” i „"%ProgramData%\\...” umjesto navođenja aspolutne adrese (C:\\...) ili postoji neka metoda koja vraća string lokacije %AllUsersProfile% i %ProgramData%?
getenv(imevarijable) će vratiti sadržaj environment varijable.
Kod:
std::string str(getenv("ProgramData"));
str += "\\...";
bi trebalo da radi to što tebi treba.
Geomaster je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Geomaster na korisnoj poruci:
Sass Drake (15.5.2011)
Odgovor

Bookmarks sajtovi

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Pomozite u izboru ekvi ŠDK - Prenosni računari 6 22.2.2011 22:21
msi nx7600gt agp problem pomozite Daco89 Kvarovi 0 23.1.2010 21:40
Monitor Trilema? Pomozite maestrobg ŠDK - Osnovne komponente 8 22.1.2010 12:43
Maticna ploca! Pomozite MOLIM WAS!! whYY Ostale komponente 1 8.1.2010 5:03
Molim pomozite, posao mi zavisi od ovoga (Thunderbird)! salegl Aplikativni softver 20 3.4.2008 22:28


Sva vremena su po Griniču +2 h. Sada je 9:58.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com