C nebo ASM?

Hynek Sladky econf@centrum.cz
Pátek Květen 22 06:54:52 CEST 2009


Assemblerovskemu zapisu IMHO spis odpovida neco takoveho:

for (ptr=&buffer[8], pom=0, pocet=32; pocet; pocet--)
   pom += *ptr++;

Pocitace jsou hloupe stroje, ktere se ale snazi presne delat to, co se 
jim rekne. Takze obcas musi nastoupit uz zminovana "programatorova" 
optimalizace, tj. co nejpresneji rict, co vlastne po tom pocitaci chci...
Takove veci jsem resil tim, ze jsem se vzdy dival, jaky assembler z 
jakeho zapisu vypadne, a podle toho jsem to pak v C pouzival...

Hynek Sladky



Michal Gregor wrote:
> Mne se jednalo o kod v asembleru:
> PIC ma specielni registry pro neprimou obsluhu pameti. Finta je v tom ze se 
> ty registry po precteni automaticky navysuji, snizuji a podobne. Takze na 
> rozdil od C pracuji primo s nimi a vysledny kod je kratky a rychly:
> Pocitej
>          addwf POSTINC0,W ; Pricti obsah Pole a prejdi na dalsi bunku
>           decfsz Rx1_Pocet_B   ; Vse secteno?
>            bra Pocitej
> 
> Kdezto v Cecku:
>    Pom=0;
>    for (Ukazatel=8;Ukazatel<32+8;++Ukazatel) {
>     Pom=Pom+Bufer[Ukazatel];
>    }
> 
> vysledkem je docela dlouhy kod, protoze index na pole se pokazde pocita.
> Jak sem jiz psal jde to optimalizovat, ale vysledny kod je nepronosny na 
> jine procesory nebo PC.



Další informace o konferenci Hw-list