<html><body>Dobry den,<br><br>kedysi to vedeli balicky C prekladacov od Hi-Techu. Mali v sebe asembler, ktory vedel optimalizovat asm zdrojaky. Aspon sa tym chvalili vo svojich marketingovych letacikoch. Zial odkedy sa kupili s Microchipom, robia uz len PIC, a myslim, ze aj ich povodne produkty sa uz asi tiez moc nevyvyjaju.<br><br>Druha stranka je ta, ze to ma asi nejaky hlbsi dovod, preco to koduju tak, ako to koduju. Myslim, ze sme to tu niekolkokrat rozoberali, zial hladat v archive nie je take jednoduche ako rychlo listovat v poznamkovom zosite...<br><br>Myslim si, ze vymysliet funkcionalitu a nejaky algoritmus je totiz jedna vec a naprogramovat ho s ohladom na rozne normy a rozne featury vec druha. To sa Vam totiz moze stat, ze Vas sw vytvor sa dostane do ruk roznych "sliedicov, snoricov a kazisvetov" - jednym slovom reverznych inzinierov - a budu sa Vam potom za chrbtom nahlas smiat, ze ani len tu jednoduchu SPI zbernicu neviete naprogramovat... A budu si o Vas, samozv
 anom expertovi, pri pive spievat rozne pesnicky a vypravat vtipy. A potom pochopite, ze neviete naozaj vobec nic.<br><br>A.<br><br><br><br>On&nbsp;Sat, 24 Sep 2011 10:40:07 +0200<br> Pavel Troller <patrol@sinus.cz> wrote:<br>&gt; Zdravím při víkendu,<br>&gt;  pomalu dokončuji reverzní inženýring firmware jednoho hezkého <br>&gt;zařízení <br>&gt; a chtěl bych ho po svých autorských změnách přeložti zpětně do <br>&gt;bináru a<br>&gt; spustit. V zařízení je použita klasická 8052.<br>&gt;  Problém je, že původní firmware je buďto přeložen z jiného (asi <br>&gt;mírně<br>&gt; vyššího) jazyka jako je C, nebo psán v nějakém makroassembleru s <br>&gt;nevhodně<br>&gt; navrženými makry, takže je vyloženě skličující jej číst a studovat a <br>&gt;je<br>&gt; mi líto chudáka MCU, ten si taky myslí svoje. Zcela reprezentativní <br>&gt;je<br>&gt; například tento kousek:<br>&gt;         MOV        DPTR,#SOMETHING<br>&gt;         MOVX        A,@DPTR<br>&gt;         MOV        DPTR,#SOMETHING<br>&gt;         PUSH        ACC<br>&gt;         CLR        A<br>&gt;         M
 OVX        @DPTR,A<br>&gt;         POP        ACC<br>&gt;         MOV        R6,A<br>&gt;         MOV        A,R6<br>&gt;         CJNE        A,#1,nekam<br>&gt;         MOV        A,R6<br>&gt;         CJNE        A,#2,jinam<br>&gt;         MOV        A,R6<br>&gt;         CJNE        A,#3,estejinam<br>&gt;         ...<br>&gt;  Zkrátka odhadem třetina (nepřeháním, to číslo zhruba sedí) <br>&gt;instrukcí je<br>&gt; v programu zcela zbytečných.<br>&gt;  Program generuje 48k bináru. Zatím nevím, kolik má přesně source <br>&gt;(ještě<br>&gt; jsem jej nevyexportoval z IDA), ale jistě uznáte, že na manuální<br>&gt; optimalizaci je to moc.<br>&gt;  V uvedené ukázce bych rád optimalizaci alespoň takovou, aby to <br>&gt;vyhodilo<br>&gt; druhý MOV DPTR a samozřejmě všechny instrukce pracující s R6, které <br>&gt;jsou tam<br>&gt; naprosto zbytečné - do žádného místa programu se zvenčí neskáče a R6 <br>&gt;je<br>&gt; vzápětí využit zase jako dočasný registr pro podobně nesmyslnou <br>&gt;operaci.<br>&gt; Ještě lepší optimalizaci, kdy např. ke přesunu do R6 by došlo ihned <br>&gt;po <br>&gt; prvním MOVX, pak by s
 e eliminovaly i PUSH/POP a a CJNE by byly s R6 <br>&gt;místo<br>&gt; s A, už nevyžaduji, ikdyž samozřejmě by byla pěkná.<br>&gt;  Existuje nějaký program tohoto schopný ? Vím, že třeba GNU <br>&gt;toolchain <br>&gt; optimalizovat umí, ale nevím zdaleka, nakolik to dělá na úrovni ASM <br>&gt;a nadto<br>&gt; by to asi nezvládl na mnemonice I8051, ale to by se možná dalo <br>&gt;udělat <br>&gt; nějakým předpřekladem do toho jeho "metaassembleru". Nicméně nějaký <br>&gt; specializovanější nástroj by samozřejmě byl lepší.<br>&gt;  Zdraví Pavel<br>&gt; _______________________________________________<br>&gt; HW-list mailing list  -  sponsored by www.HW.cz<br>&gt; Hw-list@list.hw.cz<br>&gt; http://list.hw.cz/mailman/listinfo/hw-list<br></patrol@sinus.cz></body></html>