[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