[elektro] xc16 optimalizáció mizéria
elight
elight at gmail.hu
Fri Jun 23 15:57:13 CEST 2017
Na nemazért mondtam.
Láttam már én is azt a "karónvarjút" is párszor!
Üdv István
2017-06-23 15:50 keltezéssel, Bánhidi István írta:
> Nem mondom, hogy nem találkoztam faék egyszerűségű sima sztringként
> eltárolt jelszóval if-fel vizsgálva, de azért általában ennél sokkal
> trükkösebbek szoktak lenni.
>
> Steve
>
> 2017.06.23. 13:57 keltezéssel, elight írta:
>> :-)
>>
>>
>> Küldöm a programokat, kérem a jelszót! ;-)
>>
>>
>>
>>
>> Ja, rájöttem: "1234" :-D
>>
>> Üdv István
>>
>>
>> 2017-06-23 13:54 keltezéssel, Bánhidi István írta:
>>> Eeez igen Feri,
>>>
>>> Gratula a szép levezetéshez!
>>>
>>> Egyben már gyerekkoromban is sejtettem, de felnőtté válásom óta már
>>> tudom,
>>> hogy aki a mai világban asm-ezik az tuti mazochista vagy elmebeteg!
>>> Mivel proc-ról van szó, mindig lehet találni egy nagyobb teljesítményű
>>> példányt, ezért én tuti megmaradok a C-nél.
>>>
>>> A fentieket KÉREM senki NE vegye magára!
>>> De részemről asm-ezzen az, akinek két anyja van!
>>>
>>> Egyébként meg full respect az asm guruknak!
>>>
>>> Megj.: Az asm-ről még annyit, hogy csak akkor olvasom (és csakis) PC-n,
>>> amikor épp reverse engineeringet játszok egy programon egy jelszóért,
>>> sorozatszámért stb ;)
>>>
>>> Steve
>>>
>>>
>>> 2017. június 23. 13:22 Ferenc Wágner írta, <wferi at niif.hu>:
>>>
>>>> Balla Zoltán <sdrlab at yandex.ru> writes:
>>>>
>>>>> 2017.06.23. 10:12 keltezéssel, Ferenc Wágner írta:
>>>>>
>>>>>> Balla Zoltán <sdrlab at yandex.ru> writes:
>>>>>>
>>>>>>> void __attribute__ ((section("my_other"))) FlashRead (u32 Cim, u8
>>>>>>> *Puffer, u16 Hossz)
>>>>>>> {
>>>>>>> u16 temp=Cim;
>>>>>>> u8 i,i1;
>>>>>>> TBLPAG=Cim >> 16;
>>>>>>> asm ("mov %0, W6": "+g"(temp));
>>>>>> Bocs, ha hülyeséget írok, most néztem meg az asm és a PIC doksit is.
>>>>>>
>>>>>> Most itt a %0 (vagyis a temp) kimenet vagy bemenet? Mert a szokásos
>>>>>> sorrendezéssel a MOV forrása, de a kimeneti listában szerepelteted.
>>>>> Más a szintaktikája az inline assemblynek és a normálnak!
>>>> Pontosabban az asm kulcsszó különböző assembly dialektusokat is
>>>> támogat.
>>>> Alapvetően én is azt javaslom, hogy kerüld el ezt az egész
>>>> mizériát, és
>>>> használd a rendelkezésedre álló C makrókat. Ha viszont szeretnéd
>>>> megérteni, hogy pontosan mi okozza a jelenlegi problémát, akkor hajrá!
>>>>
>>>> Az optimalizáció nélküli kódról ezt írtad:
>>>>
>>>> ! u16 temp=Cim;
>>>> 0x15642: MOV [W14+4], W1
>>>> 0x15644: MOV W1, [W14+2]
>>>>
>>>> Ebből szerintem világos, hogy a W14+4 a Cim változód címe, a W14+2 a
>>>> temp változódé, és az adatmozgás balról jobbra történik a fenti
>>>> listában. Később:
>>>>
>>>> ! asm ("mov %0, W6": "+g"(temp));
>>>> 0x15650: MOV [W14+2], W8
>>>> 0x15652: MOV W8, W6
>>>> 0x15654: MOV W8, [W14+2]
>>>>
>>>> Ebből megtudjuk, hogy a %0 helyére W8 került, és az asm kulcsszó utáni
>>>> assembly szintaxisban is balról jobbra mozognak az adatok.
>>>>
>>>>> A %0 ha jól emlékszem a temp változó típusát adja csak meg,
>>>> Nem, a %0 a temp változó automatikusan generált szimbolikus neve.
>>>> https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#OutputOperands
>>>>
>>>>> természetesen bemeneti listaban van a temp!
>>>> A https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html szerint:
>>>>
>>>> asm [volatile] ( AssemblerTemplate
>>>> : OutputOperands
>>>> [ : InputOperands
>>>> [ : Clobbers ] ])
>>>>
>>>> Esetedben az AssemblerTemplate "mov %0, W6", az OutputOperands pedig
>>>> "+g"(temp), vagyis a kimeneti listában van a temp. De a + jel miatt a
>>>> %0 olvasásra *is* használható.
>>>>
>>>> És azért generálja a fordító a MOV W8, [W14+2] utasítást, mert nem
>>>> értelmezi az AssemblerTemplate-et, tehát nem tudja, hogy az
>>>> megváltoztatta-e a %0 (a adott esetben W8) értékét. Tehát mivel a %0
>>>> kimenet, ezért visszaírja a temp változóba.
>>>>
>>>>>> Ettől függetlenül a W6-ot nem használhatod a fordító háta mögött.
>>>>> Nem is teszem azt! A fordító látja, melyik regisztert használom,
>>>>> és ha
>>>>> az általa már érintett valahol, akkor automatikusan menti azt...
>>>> Nem látja (lásd fent), és ennek folytán nem is menti, hacsak nem
>>>> jelzed
>>>> külön: https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Clobbers.
>>>> --
>>>> Feri
>>>>
>>>> -----------------------------------------
>>>> elektro[-flame|-etc]
>>>>
>>> -----------------------------------------
>>> elektro[-flame|-etc]
>>
>> -----------------------------------------
>> elektro[-flame|-etc]
>
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list