
Сообщение от
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, ...).