Оценок пока нет Как работает ЦПУ (CPU) AVR

Очень значимо понимание работы ЦПУ (Центральное Процессорное Устройство) для понимания и хорошего освоения языка ассемблера. ЦПУ читает инструкции (берет инструкцию) из программной памяти (FLASH – память), транслирует его во внутренние выполняемые шаги и выполняет ее. В AVR каждая инструкция имеет длину в 16 бит внутри FLASH – памяти и читаются оттуда за один шаг (за один такт тактового генератора). Если проследить весь этап работы ЦПУ, то это будет выглядеть вот так:

  • команда читается(первый шаг);
  • транслируется(второй шаг);
  • читается числа из программной памяти в регистры R0 и R1, подставляя на входы АЛУ(третий шаг);
  • суммирует их(четвертый шаг);
  • записывает результат в регистр R0(пятый шаг).

Регистры представляют из себя простые 8 – битные хранилища, которыми может управлять АЛУ, читая или записывая из них информацию. Пример кодирования инструкции продемонстрирован на нижеуказанном примере

Операции ЦПУ Код (binary) Код (hex)
Отправка ЦПУ в спячку 1001.0101.1000.1000 9588
Суммировать значения в регистрах R1 и R0 0000.1100.0000.0001 0C01
Вычесть значение регистра R1 из значения регистра R0 0001.1000.0000.0001 1801
Записать константу 170 в регистр R16 1110.1010.0000.1010 EA0A
Умножить значение регистра R3 со значением регистра R2 и записать значение в регистр R1 (MSB) и
R0 (LSB)
1001.1100.0011.0010 9C32

Итак, если ЦПУ читает число 9588 из FLASH – памяти, то ЦПУ больше не делает выборку инструкции. После каждой выборки счетчик команд увеличивается а единицу. Счетчик команд – это специальный регистр, который недоступен пользователю для записи, в нем храниться номер текущей команды в памяти программы. Он необходимо для создания условных и безусловных переходов внутри программы в пределах все области программной памяти.
Когда ЦПУ читает 0C01, то R0 и R1 суммируются и результат записывается в регистр R0. Данная операция продемонстрирована на рисунке
avr-hardware-how-toworkavr-cpu1.    Сперва читается инструкция с размером в 16 битное слово из памяти FLASH и транслируется в выполняемый шаг;
2.    Следующий шаг соединяет регистры R0 и R1 со входами АЛУ и АЛУ суммирует их содержимое;
3.    Далее результат записывается обратно в регистр R0.

Когда ЦПУ читает 9C23 из FLASH, то регистры R3 и R2 перемножаются и результат перезаписывается в R1(верхний 8 бит) и R0(нижний 8 бит). Если АЛУ не оборудован на аппаратном уровне устройством перемножения (как в ATtiny13), то с числом 9C23 ничего не делается.
В принципе ЦПУ может выполнить 65.536(16 – битных) различных инструкций из-за двухбайтовой системы команды во FLASH-памяти.
Когда записываем 170, то он должен быть записан в определенный регистр. Записываемое число в регистр может быть в пределах от 0 до 255 и может быть записан в любой регистр между R16 и R31.

 

 

Пожалуйста, оцените материал

WebSofter

Web - технологии