Я не понимаю, как AVR-микроконтроллер производит сложение за один машинный такт.
Есть предположим в регистрах общего назначения (например R16 и R17) два числа.
Строкой ADD R16, R17 мы за один такт складываем оба числа и перезаписываем результат в R16.
А как же АЛУ умудряется за один такт извлечь число из R16 и тут же перезаписать результат
обратно в R16? Извлекает и записывает одновременно что ли?
АЛУ в AVR-микроконтроллерах прямо к РОНам подсоединено (судя по документации). Это как? Отдельная шина от АЛУ к РОНам что ли? Или всё же через общую шину данных обмен идёт, просто без промежуточных регистров-защёлок на входах АЛУ (тогда в принципе можно сказать, что АЛУ напрямую к РОНам подсоединено).
Но в любом случае это дело не меняет. Как можно извлекать информацию из регистра и тут же в него же что-то записывать ?
На диаграмме "Функционирование АЛУ" (из книги Евстифеева) в течение одного машинного такта производится и выборка данных, и сложение, и запись обратно. Как так получается? Там как-то временные сдвиги организуются между выборкой и записью? Тогда АЛУ получается работает не на 16 МГц, а на 48 МГц.
Или же фраза "сложить за один такт" несколько условна. Там же конвейерная обработка идёт. Пока идет выполнение команды, производится выборка и дешифровка следующей команды.
Тогда фраза "выполняется за один такт" просто-напросто означает, что никакие узлы микроконтроллера не простаивают. Что с каждым тактовым импульсом микроконтроллер один новый готовый результат выдаёт, нет никаких простоев и ожиданий в исполнительных узлах (АЛУ, Порты).
Содается иллюзия, что вроде как микроконтроллер за один такт инструцию выполняет, но на самом деле на выполнение сложения два такта нужно (извлечение из двух РОН + одновременное сложение >> запись в один из РОН).
Что скажете по этому поводу? Спасибо!


