|
Я перепробовал 6 компиляторов СИ для AVR. Откомпилируйте код
if (a<0) b=0;
if (a==0) b=1;
if (a>=0) b=2;
Даже хваленый IAR, и тот будет трижды загружать в регистр из памяти значение переменной, трижды sts и три условных перехода. Только GCC способен догадаться, что достаточно один раз загрузить число в регистр. Но даже и он не способен догадаться, что CP или TST то же достаточно делать один раз.
Однако, и бедность команд процессора значит очень много. При одной и той же длине инструкции (16 бит для того же AVR) если ядро разрабатывалось знающими людьми, то увеличение количество регистров всегда производится в ущерб количеству команд. Такова природа процессора. Нет ничего революционного в удвоении числа регистров, но надо помнить за счет чего это делается.
E-mail: info@telesys.ru