давно занимает эта тема
вот, решил потестировать все компиляторы, до которых дотянулись руки
проверял на банальнейшей штуке - заливке всего экрана черным цветом, вот такой вот код:
специально не использовал никаких библиотек, если что, их всегда можно написать самому, да и не нужна на спеке добрая половина их возможностей.Код:int main() { unsigned char* t; t = 16384; while (t<16384+6144) { *t = 255; t++; } return 0; }
первым попался под руку z88dk
вот что он мне выдал
то есть даже в таком примитивном коде наворочено по максимумуКод:._main ld hl,16384 ;const push hl .i_3 pop hl push hl ld de,22528 ;const ex de,hl call l_ult jp nc,i_4 pop hl push hl ld (hl),#(255 % 256 % 256) pop hl inc hl push hl dec hl jp i_3 .i_4 ld hl,0 ;const pop bc ret
причем, это только асмовый исходник, после линковки он добавляет еще мусора
пытаться скомпилировать этот код руками не стал, нервы дороже
в общем, барахло, а не компилятор
Дальше был sdcc
им уже вполне можно пользоваться, судите сами:
слишком много явно лишних операций(типа вычитания нуля из аккумулятора), но это уже что-тоКод:org #9c40 _main_start:: _main: ld bc,#4000 _l00101: ld e,c ld d,b ld a,e sub a,#00 ld a,d sbc a,#58 jp p, _l00103 ld a,#FF ld (bc),a inc bc jp _l00101 _l00103: ld hl,#0000 _l00104: ret
но хотелось лучшего и я полез в инет
нашел еще компилятор от Softools, но он слишком хотел денег и у меня запуститься отказался наотрез
и, в конце-концов наткнулся на компилятор от IAR. Плох он тем, что нет command-line утилит, все встроено в IDE, и писать приходится в нем, неудобно, все же FAR роднее
вот такое вот чудо он нагенерировал:
оно, конечно, работает, но не радует, блинКод:org #9c40 main: PUSH BC PUSH IX LD IX,0 ADD IX,SP PUSH AF LD (IX-2),0 LD (IX-1),64 l0001: LD BC,22528 LD L,(IX-2) LD H,(IX-1) AND A SBC HL,BC JR NC,l0000 l0002: LD L,(IX-2) LD H,(IX-1) LD (HL),255 INC (IX-2) JR NZ,l0003 INC (IX-1) l0003: JR l0001 l0000: LD SP,IX POP IX POP BC RET
и тут меня как ударило - что-то слишком активно с памятью он работает, и я полез искать в опциях настройки компиляции
и вот оно! оптимизация - Default/Size/Speed
ну, поставил Speed на максимум
вот что выдал:
довольно непривычно глазу(я б не так написал :-)), но работаетКод:org #9c40 main: PUSH BC PUSH DE LD DE,16384 l0001: LD BC,22528 LD H,D LD L,E AND A SBC HL,BC JR NC,l0000 l0002: LD H,D LD L,E LD (HL),255 INC DE JR l0001 l0000: POP DE POP BC RET
а, главное, действительно оптимизировано, лень такты подсчитывать, но, думаю, это самый быстрый вариант
к чему я это все? да ни к чему, просто хотелось радостью поделиться, нашел хоть один нормальный компилятор :-)
вообще, неудивительно, что он дает такой неплохой код, все-таки коммерческая разработка для промышленного применения
если кто заинтересовался - компилер можно бесплатно скачать с www.iar.com(4 мега). Там написано, что это демо-версия, но никаких ограничений пока не заметил
ЗЫ везде из сгенеренного компилером кода вычищен весь мусор и сам код переделан для нормального ассемблирования сторонним спектрумским ассемблером(я юзал sjasm)




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
