Цитата Сообщение от Titus Посмотреть сообщение
Да, основная часть пишется на си, но критичные участки (если они есть) на асме.
Кстати, где-то на форуме была именно эта тема 'си vs ассемблер', там все было многократно разжевано и оспорено)
"Критические участки" выглядят в программах на си часто типа asm("LIDT [IDT]"); :-) C ассемблером как раз и работают гуру по оптимизации. Если писать просто одинаковые алгоритмы чистым кодом, то ассемблер его превратит в эквивалентный машинный код, а оптимизирующий компилятор превратит его в что-то неудобочитаемое, не похожее на оригинал, но очень быстрое.
Код:
fib:    cmp     rax,2           ;in: rax;  out: rcx
        ja      .l1
        mov     rcx,1
        ret

.l1:    dec     rax
        push    rax
        call    fib
        pop     rax
        push    rcx
        dec     rax
        call    fib
        pop     rax
        add     rcx,rax
        ret
Вот, кстати, эквивалент кода на ассемблере для приведённой ранее функции Фибоначчи. Если вы так хорошо знаете ассемблер, то попробуйте написать быстрее, не изуродовав код и сознание пишущего его программиста.
И спорить тут не о чем: ЛЮБАЯ проблема кодируются хорошим оптимизирующим транслятором в более быстрый код. Если потратить на кодирование в разы больше времени и получить совершенно нечитаемый код, то можно чуть-чуть и обогнать транслятор, но ценой возможно подорванного здоровья. ;-)
Вот и спрашивал, как хороша оптимизация для бк-ного кода? Сам хотел gcc для этого настроить, но так и не получилось. Интересно, на системах, сравнимых с БК gcc используют? GCC вроде не поддерживает 6502 и z80, но поддерживает лучший 8-битник 6809 (использовался на Tandy TRS-80 Color, Dragon-32/64, ...).