Можем конечно, например CALL/JMP, но вот в чем беда 2х словные команды занимают больше памяти и считываются в 2 раза дольше. Не знаю как это кратко объяснить, может чем-то поможет эта статья... Смысл в том, чтобы максимум команд, которые используются чаще всего закодировать минимумом бит (в данном случае 16-ю или 32-я). Так вот, если для решения того, будет ли команды 16 или 32 разрядная, использовать 1 бит, то для всех возможных сочетаний команд и операторов остается 15 бит, 32768, вроде много, но если посмотреть все коды операций AVR станет понятно что это предел, сюда не поместились даже так необходимые на первый взгляд операции с константой для младших регистров. Но зато они все выполняются за 1 такт (не считая умножения и переходов) и занимают одно слово, а для редко используемых CALL/JMP не жалко и 2 слов.FreshMan писал(а):мы можем использовать 2 слова
Для одной только LDI R15,XX пришлось бы задействовать 256 кодов, если пихать ее в однословные команды.
Можно было запихнуть в 2-словные команды не 2 а 4 команды, но большого толку от этого не было бы, а увеличение таких команд в 2 раза 1) уменьшает адресное пространство CALL/JMP в 2 раза 1) делает эти команды в 2 раза медленнее и длиннее. Вы готовы ради универсальности команд заплатить быстродействием в 2 раза?
Чтобы определить сколько команд должно быть 2х словными достаточно статистически посчитать количество используемых команд в программах и построить дерево кодирования Хаффмана, предполагаю что пути до команд CALL/JMP были самые длинные, а остальные гораздо короче, поэтому их оставили 2-словными.
Ну и не стоит забывать тот факт, что в младших AVR-ках 2-словных команд вообще нет!
FreshMan, вы лезите в глубокие дебри процессорной архитектуры, я понимаю что это интересно, но чтобы ответить приходится писать посты на пол-страницы. Если так интересно, лучше найдите какой-нибудь ресурс по устройству микропроцессорных систем.


