[elektro] C kérdés
Papp Zoltán
zombi at c2.hu
Thu Sep 24 12:29:22 CEST 2009
2009.09.23. 16:00:32 dátumon potyo <potyo.ada at gmail.com> írta:
> Néhány példa a listing fájlból különféle próbálkozásokra (minden
> optimalizálás be van kapcsolva)
>
> 144: if (address&(1<<10)) EE_A10_IO=1; else
> EE_A10_IO=0;
> 00078 010F MOVLB 0xf
> 0007A 5121 MOVF 0x21, W, BANKED
> 0007C 0B00 ANDLW 0
> 0007E E002 BZ 0x84
> 00080 8090 BSF LATH, 0, ACCESS
> 00082 D001 BRA 0x86
> 00084 9090 BCF LATH, 0, ACCESS
>
> 145: if (*((unsigned
> char*)((&address)+1))&(1<<(10-8))) EE_A10_IO=1; else EE_A10_IO=0;
> 00086 010F MOVLB 0xf
> 00088 A523 BTFSS 0x23, 0x2, BANKED
> 0008A D002 BRA 0x90
> 0008C 8090 BSF LATH, 0, ACCESS
> 0008E D001 BRA 0x92
> 00090 9090 BCF LATH, 0, ACCESS
>
> 146: address&(1<<10)?(EE_A10_IO=1):(EE_A10_IO=0);
> 000A0 010F MOVLB 0xf
> 000A2 5121 MOVF 0x21, W, BANKED
> 000A4 0B00 ANDLW 0
> 000A6 E003 BZ 0xae
> 000A8 8090 BSF LATH, 0, ACCESS
> 000AA 0E01 MOVLW 0x1
> 000AC D002 BRA 0xb2
> 000AE 9090 BCF LATH, 0, ACCESS
> 000B0 0E00 MOVLW 0
>
> 147: EE_A10_IO=((address&(1<<10))==(1<<10));
> 000B2 010F MOVLB 0xf
> 000B4 5121 MOVF 0x21, W, BANKED
> 000B6 0B00 ANDLW 0
> 000B8 E002 BZ 0xbe
> 000BA 0E00 MOVLW 0
> 000BC D001 BRA 0xc0
> 000BE 0E01 MOVLW 0x1
> 000C0 B0E8 BTFSC WREG, 0, ACCESS
> 000C2 8090 BSF LATH, 0, ACCESS
> 000C4 A0E8 BTFSS WREG, 0, ACCESS
> 000C6 9090 BCF LATH, 0, ACCESS
>
> Tehát mint látható, a castolásos módszer adja a legkisebb kódot. Az első
> kettő sem rossz, de van egy felesleges ANDLW művelet benne. Szimulátorral
> kimértem a végrehajtási időket, sorban 6,5,7,11 utasításciklus kell nekik
> (ugyan itt még hibás a castolás, de ebből a szemponból nem lényeges)
> -----------------------------------------
> elektro[-flame|-etc]
Szia!
Arra mit ad, hogy:
EE_A10_IO=((address&(1<<10))>>10; ?
Én mondjuk csak IAR C for AVR alatt próbálkoztam, azaz AVR maggal, de ott nekem ezt mindenféle optimalizálás nélkül is kb. olyasmire fordítja mint neked a 2. versenyzőt.
Azaz egyből vágja, hogy csak egy bájttal kell foglalkozni a 2 bájtos változóból, ezt elméletileg egy 8-bites magra írt fordítónak illene tudnia. úgy látszik ez nem tudja :(
Üdv
--
Papp Zoltán
OneWay Electronics Kft
Hangszerviz
szkájp: oneway[aláhúzás]papp[aláhúzás]zoltan
More information about the Elektro
mailing list