Как работает декодер в процессоре

Обновлено: 03.07.2024

В типичном командном цикле выборка, декодирование и выполнение вместе составляют один цикл. Мой вопрос касается этапа декодирования: какая часть декодируется, это код операции инструкции? Если да, то почему он тогда закодирован?

На самом деле, я понимаю декодирование здесь так же, как декодирование сообщения с помощью ключа в области безопасности, что меня немного смущает.

4 ответа 4

Декодирование означает анализ инструкции для определения ее значения.

Типичная инструкция состоит из кода операции и (обычно) одного или нескольких аргументов. Эти аргументы могут ссылаться на определенные регистры или адреса памяти или могут быть непосредственными значениями, которые будут использоваться непосредственно во время выполнения. Кроме того, некоторые инструкции могут иметь префиксы (например, LOCK в x86) или функциональные коды (например, поле функции для некоторых инструкций MIPS), которые изменяют их функциональность.

Во время декодирования процессор должен:

  • определить, какая инструкция представлена ​​кодом операции, чтобы инструкция могла быть передана правильному исполнительному блоку и чтобы была выполнена правильная операция
  • правильно интерпретировать аргументы, префиксы и другие значения, прикрепленные к инструкции, и передавать соответствующую информацию соответствующей схеме
  • (в большинстве современных процессоров) разбить инструкцию на соответствующие микрооперации

С современными процессорами это может быть сложной операцией, требующей нескольких этапов в конвейере. Чтобы ускорить этот процесс, можно использовать специальный кэш для хранения микроопераций для часто выполняемых инструкций.

Чтобы узнать больше о методах, используемых для обеспечения высокой производительности современных процессоров, вы можете прочитать этот ответ.

Инструкции по ассемблеру, помимо кода операции, часто содержат битовые поля, указывающие регистры и режимы адресации (абсолютный, относительный, автоинкрементный и т. д.).

Декодирование — это цикл, который интерпретирует код операции и другие битовые поля, чтобы определить, над чем будет работать инструкция или как-то иначе.

Сводка: выясняет необязательные детали инструкции

Пример: 0x90 ( 10010000 binary ) обычно считается NOP , отсутствием операции для набора инструкций 8086.

Но есть инструкция XCHG, представленная в виде двоичного кода 10010reg (reg=3 бита), (0x90 + reg), которая представляет собой 16-битный регистр обмена с инструкцией AX. 3 бита, обозначенные как «reg», определяют, с каким регистром производить обмен.

'reg' из двоичного кода 000 означает "с регистром AX". Таким образом, 0x90 декодируется как «обмен AX на AX», что мало что дает, AKA No Operation NOP

Ваш tldr; раздел не в том месте. Это должно быть наверху, так что люди просто прочитали это. В настоящее время вы бросили его где-то посередине, лишив его цели.

@IsmaelMiguel: Цель «tldr» в ответе из семи предложений лучше выполнять вверху? Боюсь, вы пишете это исключительно ни для кого.

Иногда tldr используется для обозначения сводки. Да, это не то, что буквально имелось в виду, когда эта фраза вошла в моду. это случайное использование, а не формальное. Изначально tldr был концом ответа, потом я решил добавить пример

@MarcksThomas tldr; это очень-очень короткая форма для тех, кто не хочет читать весь контент. Обычно на вершине. Резюме – это место, где вы делаете вывод. Они не одинаковы и не взаимозаменяемы. Я не редактировал его сам, потому что это очень незначительное редактирование. Если бы infixed не хотел его менять, его бы не заставляли. Если бы он хотел оставить его там, это было бы хорошо, но правка была бы менее полезной и, вероятно, была бы отброшена (на мой взгляд)

Декодируются инструкции и режимы адресации. Инструкции + режимы адресации состоят из кода операции и любых непосредственных данных (операндов), следующих за кодом операции.

Если да, то почему он закодирован?

Потому что мы используем значения в ОЗУ для обозначения инструкций и режимов адресации. Должна существовать схема, согласно которой X = любая инструкция + любой режим адресации. Подобно тому, как ASCII/Unicode представляет собой схему, которая «обозначает» цифры, буквы и коды управления терминалом.

На самом деле, я понимаю декодирование здесь так же, как декодирование сообщения с помощью ключа в области безопасности, что меня немного смущает.

Нет, это больше похоже на декодирование данных MPEG в необработанные видеоданные — необработанные данные MPEG нельзя отобразить на экране напрямую, их необходимо обработать и «распаковать», чтобы выяснить, что именно они означают.

Когда декодер инструкций обнаруживает инструкцию ветвления в конце фрагмента, он обновляет ПК, выбирая BTA или следующую инструкцию.

Связанные термины:

Скачать в формате PDF

Об этой странице

Архитектура PIC

5.2.2 Выполнение инструкции

Секция выполнения программы микроконтроллера содержит регистр инструкций, декодер инструкций, а также синхронизацию и логику управления. 14-битные инструкции, хранящиеся в памяти программ, копируются в регистр инструкций для декодирования; каждая инструкция содержит как код операции, так и операнд. Логика декодера инструкций преобразует биты кода операции в настройки для всех внутренних линий управления. Операнд предоставляет литерал, адрес файлового регистра или адрес программы, который будет использоваться инструкцией.

Если, например, используется инструкция MOVLW (переместить литерал в W), линии управления будут настроены на передачу литерального операнда в W через литеральную шину данных в мультиплексор и АЛУ. Если указана инструкция MOVWF, управляющие линии будут настроены на копирование содержимого W в указанный файловый регистр через внутреннюю шину данных. Операндом будет требуемый адрес файлового регистра (от 00 до 4F). Если мы посмотрим на коды инструкций «перемещения», приведенные в наборе инструкций, мы увидим разницу в структуре кода для трех инструкций перемещения:

MOVLW k = 11 00xx кккк кккк

MOVWF f = 00 0000 1ffff ffff

MOVF f,d = 00 1000 dfff ffff

Набор инструкций

5.1 Что такое набор инструкций

Все процессоры выполняют свои требуемые операции, выполняя последовательности инструкций. Каждая инструкция определяет простую операцию, например, простую операцию АЛУ, доступ к данным в системе памяти, операцию ветвления программы и т. д.

Для процессора он принимает инструкции в виде двоичного кода и декодирует их на внутреннем оборудовании (декодере инструкций), а затем передает информацию о декодированной инструкции на этап выполнения. В простых конструкциях процессоров требуются как минимум следующие типы инструкций:

Обработка данных (арифметические операции, такие как «сложение»/«вычитание», логические операции, такие как «И»/«ИЛИ»)

Инструкции доступа к памяти (чтение памяти, запись памяти)

Инструкции управления потоком программы (переходы, условные переходы, вызовы функций)

Кроме того, для процессоров ARM ® Cortex ® -M0 и Cortex-M0+ также есть инструкции для

Исключения и поддержка ОС

Доступ к специальным регистрам

Набор инструкций, поддерживаемый процессорами ARM Cortex-M, называется Thumb®, а процессоры Cortex-M0 и Cortex-M0+ поддерживают только подмножество определенных инструкций (56 из них). Большинство этих инструкций имеют размер 16 бит, и только шесть из них 32-битные.

В таблице 5.1 показаны базовые 16-битные инструкции Thumb, поддерживаемые процессорами Cortex-M0/M0+.

Таблица 5.1. 16-битные инструкции Thumb®, поддерживаемые процессорами Cortex®-M0 и Cortex-M0+

16-битные инструкции Thumb, поддерживаемые процессорами Cortex-M0/M0+
ADCADDADRИASRBBICBLXBKPTBX
CMNCMP< /td>CPSEORLDMLDRLDRHLDRSHLDRBLDRSB
LSLLSRMOVMVNMULNOPORRPOPPUSHREV
REV16REVSHRORRSBSBCSEVSTMSTRSTRHSTRB
SUBSVCSXTBSXTHTSTUXTBUXTH WFEWFIДОХОД

Процессоры Cortex-M0/M0+ также поддерживают ряд 32-битных инструкций Thumb из технологии Thumb-2 ( Таблица 5.2 ).

Таблица 5.2. 32-битные инструкции Thumb®, поддерживаемые процессорами Cortex®-M0 и Cortex-M0+

Инструкции по доступу к специальным регистрам MRS и MSR

Инструкции по синхронизации памяти ISB, DSB и DMB

Инструкция BL (BL поддерживалась в традиционном наборе инструкций Thumb, но определение битового поля было расширено в Thumb-2)

С таким небольшим набором команд процессоры Cortex-M0 и Cortex-M0+ не предназначены для тяжелых задач по обработке чисел. Процессоры Cortex-M3, Cortex-M4 и Cortex-M7 лучше подходят для этих приложений, поскольку они имеют гораздо более богатый набор инструкций. Процессоры Cortex-M0 и Cortex-M0+ предназначены для выполнения общих задач обработки данных и управления вводом-выводом, а также для систем со сверхнизким энергопотреблением и недорогих систем, в которых требуется крошечный размер микросхемы.

Одной из ключевых характеристик набора инструкций для процессоров Cortex-M является восходящая совместимость. Как показано на рисунках 1.4 и 2.7, рис. 1.4, рис. 2.7, набор инструкций, поддерживаемый процессорами Cortex-M0 и Cortex-M0+, поддерживается процессорами Cortex-M3, Cortex-M4 и Cortex-M7. Таким образом, программный код, разработанный для процессоров Cortex-M0 и Cortex-M0+, часто может работать на процессорах Cortex-M3, Cortex-M4 и Cortex-M7 без изменений.

Перенос приложения с процессора с более высокой производительностью на процессор с меньшим процессором также может быть выполнен легко. Если разработчику программного обеспечения необходимо перенести приложение с процессора Cortex-M3 на процессор Cortex-M0+, часто ему нужно всего лишь заменить драйвер устройства в проекте и перекомпилировать приложение. Программные модели этих процессоров очень похожи друг на друга, поэтому часто нет необходимости изменять исходный код C.

Встроенное программное обеспечение в системах обработки сигналов реального времени: технологии проектирования

ГЕРТ ГУССЕНС , . ЧЛЕН IEEE, Чтения по совместному проектированию аппаратного и программного обеспечения, 2002 г.

1 язык на основе списка соединений

Первый тип языков спецификации процессора описывает процессор как список соединений аппаратных строительных блоков , включая путь данных, память, декодер инструкций и контроллер. Этот подход используется в компиляторе MSSQ, который принимает спецификацию процессора на языке Mimola [32] . Преимуществом этих языков является их полнота. Однако список соединений не всегда может быть доступен разработчику компилятора. Кроме того, этот подход требует, чтобы архитектурный проект был завершен, что не позволяет создавать компиляторы во время этапа изучения архитектуры в проекте ASIP.

2 языка высокого уровня

В качестве альтернативы формализму на основе списка соединений было предложено несколько высокоуровневых языков описания процессора. Идея этих языков состоит в том, чтобы собрать информацию, доступную в руководстве программиста процессора. Обычно такое описание содержит структурный скелет процессора (по сути, объявление элементов памяти и типов данных) и описание фактического набора инструкций. Первым примером является язык ISP [33] и его потомок ISPS [34] . В ISP набор инструкций фиксируется путем указания поведения, соответствующего определенным наборам битов инструкций. Для последнего используется процедурный формализм. Совсем недавно был предложен язык nML [35]. nML использует атрибутивную грамматику. Продукционные правила грамматики определяют состав набора инструкций в компактной иерархической форме. Семантика инструкций (например, их поведение при передаче регистров, их сборка и двоичное кодирование) фиксируется атрибутами. nML используется компиляторами CBC [36] и Chess [22].

Дизайн микрокомпьютера

II.F Арифметико-логическое устройство (ALU)

По аналогии, АЛУ можно рассматривать как суперсчетную машину, ключи которой автоматически управляются управляющими сигналами, вырабатываемыми в декодере команд и схемах управления. По сути, именно так был задуман первый цифровой компьютер с хранимой в памяти программой. АЛУ, естественно, мало похож на настольный сумматор. Основное отличие заключается в том, что ALU выполняет расчеты, создавая электрическую аналогию, а не механическую аналогию. Еще одно важное отличие состоит в том, что АЛУ использует двоичные методы, а не десятичные, для представления чисел и манипулирования ими. В принципе, однако, удобно думать об АЛУ как о калькуляторе с электронным управлением. АЛУ должен содержать сумматор, способный объединять содержимое двух регистров в соответствии с логикой двоичной арифметики. Это положение позволяет процессору выполнять арифметические операции с данными, которые он получает из памяти и с других входных данных. Используя только базовый сумматор, способный программист может написать процедуры, которые будут вычитать, умножать и делить, предоставляя машине полные арифметические возможности. На практике, однако, большинство АЛУ предоставляют другие встроенные функции, включая аппаратное вычитание, булевы логические операции и возможности сдвига.

АЛУ содержит флаговые биты, которые регистрируют определенные условия, возникающие в ходе арифметических операций. Флаги обычно включают carry и zero. Можно запрограммировать переходы, условно зависящие от состояния одного или нескольких флагов. Например, программа может быть предназначена для перехода к специальной процедуре, если бит переноса установлен после инструкции добавления. Наличие переноса обычно указывает на переполнение аккумулятора и иногда требует специальных действий по обработке.

Работа микроконтроллера

2.1.3 Регистр инструкций и декодер

Для выполнения инструкции процессор копирует код инструкции из памяти программ в регистр инструкций (IR).Затем он может быть декодирован (интерпретирован) декодером команд, который представляет собой комбинационный логический блок, который настраивает линии управления процессором по мере необходимости. Эти линии управления не показаны явно на блок-схеме, так как они идут ко всем частям микросхемы и сделали бы ее слишком сложной. В PIC код инструкции включает операнд (рабочие данные), который может быть буквальным значением или адресом регистра. Например, если литерал (число), указанный в инструкции, должен быть загружен в рабочий регистр (W), он помещается на внутреннюю шину данных, а линии разрешения защелки регистра W активируются синхронизацией и логикой управления. Внутреннюю шину данных можно увидеть на блок-схеме производителя ( рис. 1-1 в техпаспорте PIC 16F84A).

Микроконтроллеры ARM

3.3.6 Архитектура ядра Cortex

Рис. 3.2 показана упрощенная блок-схема архитектуры ядра Cortex-M4. В верхней левой части мы видим ЦП, который включает в себя АЛУ, банки регистров, декодер инструкций, модуль DSP и интерфейс памяти. Модуль DSP недоступен в ядрах Cortex-M0 или Cortex-M3. Обратите внимание, что память не является частью ядра Cortex и поставляется компанией, производящей процессор. Контроллер вложенных векторных прерываний показан в верхнем левом углу рисунка. Это внешние входы прерывания, которые можно использовать в приложениях реального времени, управляемых прерываниями. Ядро включает в себя FPU, используемый для ускорения математических операций с плавающей запятой. Интерфейс тестирования и отладки показан в нижней правой части рисунка. Матрица шины, блок защиты памяти и периферийные интерфейсы расположены в нижней правой части рисунка. Обратите внимание, что ядро ​​не включает порты ввода-вывода.

 Рис. 3.2

Рис. 3.2. Упрощенная блок-схема ядра Cortex.

Рис. 3.3 показан микроконтроллер, построенный на ядре Cortex. Обратите внимание, что на этом рисунке указаны порты ввода-вывода, память и т. д.

 Рис. 3.3

Рис. 3.3. Микроконтроллер построен на ядре Cortex.

Используется с разрешения Arm Holdings.

Компьютеры и их применение

4.7.13 Реализация процессора

Значительный объем управляющей логики, необходимой для выполнения всех возможных инструкций ЦП и других функций, реализуется одним из двух способов.

4.7.13.1 Случайная логика

Случайная логика использует доступные логические элементы вентилей, триггеров и т. д., объединенные подходящим образом для реализации всех шагов для каждой инструкции, используя как можно больше общего между инструкциями. Различные логические комбинации вызываются выводами декодера команд.

4.7.13.2 Микрокод

Это последовательность внутренне запрограммированных шагов, составляющих каждую инструкцию. Эти шаги или микроинструкции загружаются в ПЗУ с использованием шаблонов, определенных во время разработки, и для каждой декодированной инструкции ПЗУ микропрограммы вводится в соответствующий момент для этой инструкции. При управлении внутренними часами микрокоманды задействуют соответствующие линии управления для выполнения тех же шагов, что и в случае, если бы ЦП был разработан с использованием метода (1).

Большое преимущество микрокодированных наборов инструкций заключается в том, что их можно легко модифицировать или полностью изменить с помощью альтернативного ПЗУ, которым может быть просто один чип в сокете. Таким образом, может быть задействован другой набор инструкций ЦП.

В сочетании с микрокодом микропроцессоры с побитовыми сегментами могут использоваться для реализации ЦП. Микропроцессор битового среза содержит срез или секцию всего ЦП, т. е. регистры, арифметику и логику, с подходящими путями между этими элементами. Слайс может иметь длину 1, 2 или 4 бита, и путем каскадного объединения нескольких из них можно получить любую желаемую длину слова. Требуемый набор инструкций реализуется путем соответствующего программирования микропроцессоров битовых срезов с использованием их внешних входов, управляемых микрокодом.

Комбинация микрокода, хранящегося в ПЗУ, и микропроцессоров с побитовыми срезами используется в реализации многих моделей ЦП, каждая из которых использует одно и то же устройство с срезами.

Традиционные микроархитектуры

Сигэюки Такано, Thinking Machines, 2021

2.1.2.2 Концепция модели программирования на микропроцессорах

Рис. 2.3 (а) показан псевдокод программы (вверху) и ее ассемблерный код (внизу). Программа использует массивы и цикл for.

Рисунок 2.3. Программная модель микропроцессора.

Массив транслируется в два значения индекса, а именно: базовый адрес памяти данных и индекс позиции (смещение), указывающий позицию относительно базового адреса. Сборка, двоичная инструкция, извлекается из памяти инструкций в регистр инструкций (IR) с помощью счетчика команд (PC), т. е. гарвардской архитектуры, которая разделяет адресное пространство инструкций и данных на каждое, как показано на рис. 2.3 (б). Декодер инструкций декодирует значение IR в набор управляющих сигналов. Сигнал определяет, какая операция должна быть выполнена, расположение исходных операндов в RF и местонахождение операнда назначения для хранения результата операции.

Типичный базовый блок имеет инструкцию перехода или ветвления в конце базового блока. Цикл for преобразуется в вычисление времени повторения, инструкция сравнивается для проверки времени повторения в цикле, достигнутого для выхода из цикла, а затем применяется условный переход с инструкцией перехода, как показано внизу Рис. 2.3 (а). Результат сравнения сохраняется в регистре состояния управления (CSR), и следующая инструкция перехода определяет следующий базовый блок на основе значения CSR. ПК обновляется со значением смещения больше 1 или меньше -1, если условие истинно; таким образом, ветвь делает условную ветвь для перехода на адрес памяти инструкций.

Микроконтроллерные системы PIC

Задания 1

Задание 1.1

Задание 1.2

Изучите список периферийных устройств SPI и I 2 C, которые могут быть полезны при создании приложений PIC. Определите типичные микросхемы памяти, интерфейсов и сенсоров, которые используют эти интерфейсы, и суммируйте диапазон устройств, доступных для каждого интерфейса.

Задание 1.3

Приложения, ASIC и доменно-ориентированные архитектуры

Сигэюки Такано, Thinking Machines, 2021

4.2.1.1 Концепция местоположения

Каждая инструкция, составляющая поток инструкций, может быть идентифицирована по адресу памяти, который является адресом отображения инструкции, хранящейся в памяти, как показано на рис. 4.1 (a). Точно так же все данные или переменные также могут быть идентифицированы по адресу памяти, который является адресом отображения данных, хранящихся в памяти данных. Что касается потока управления, фрагмент потока команд обычно имеет инструкцию перехода в конце фрагмента, при этом переход обновляет BTA. Фрагмент называется базовым блоком, как показано на рис. 4.1 (б). Существует петлевая часть «BB-F». Выполнение программы имеет указатель, называемый ПК, который обращается к следующей инструкции выборки. PC увеличивается каждый цикл на базовом блоке. Когда декодер инструкций обнаруживает инструкцию ветвления в конце фрагмента, он обновляет ПК, выбирая BTA или следующую инструкцию.

 Рисунок 4.1

Рисунок 4.1. Программа в памяти и управление потоком при выполнении.

Следующая инструкция находится по адресу памяти следующей инструкции, исходя из предположения о последовательном выполнении в базовом блоке. Для адресного пространства памяти команд характеристики шаблона адреса, основанные на приращении, называются пространственной локальностью. Данные также имеют пространственную локализацию, когда несколько данных объединяются в массив, а также при доступе к массиву по определенному шаблону в порядке следования, например, на основе увеличения адреса памяти данных.

Когда определенный базовый блок, такой как часть цикла в программе, выполняется повторно, этот базовый блок, имеющий повторяющиеся выполнения, имеет доступ к одним и тем же адресам с временным шаблоном, который называется временной локальностью. При многократном повторении выполнения и доступе к определенной области адресов памяти возникает высокотемпоральная локальность.

Подобно инструкции, данные, имеющие временную локализацию на основе шаблона доступа к памяти, можно рассматривать как адреса на временной шкале. Поэтому у программы есть своя уникальная местность. Изменение потока управления основано на специальном регистре (CSR), содержащем условие перехода, и имеет характеристики, аналогичные данным, как описано в разделе 4.2.3. Кэш-память инструкций и данных являются типичными примерами использования пространственной и временной локализации на основе непрерывного адресного пространства памяти и отображения на такую ​​область памяти.

В назначении набора инструкций нам предлагается написать последовательность инструкций для арифметических операций, необходимых в различных архитектурных моделях: накопитель, стек, загрузка/сохранение, память/память.

  • Код операции – 8 бит.
  • Адреса памяти — 16 бит
  • Все регистры кодируются 4 битами.
  • Все операнды данных — 32 бита
  • Все инструкции должны состоять из четного числа байтов, т. е. 8 x N бит, где N — натуральное число.

И!Адреса регистров можно упаковывать вместе

Вопрос 1. Когда мы упаковываем два регистра вместе? Откуда система знает, что это не один регистр, закодированный в 4 бита? Не могли бы вы привести пример?

Скажем, нам дано A = B + C. Инструкции, необходимые в модели загрузки/сохранения для этой операции:

Первая инструкция имеет длину 28 бит, поэтому нам нужны дополнительные 4 бита.

Вопрос 2: есть ли разница, куда поместить 4 бита в форме 0000? Как бы вы сделали инструкцию целого числа байтов?

Я буду очень признателен за вашу помощь.



От вас зависит, как вы разработаете свой набор инструкций. Возможно, вам нужен оператор NOP, который представляет собой 4-битные инструкции, которые ничего не делают, и вы можете использовать их везде, где в итоге вы получите не 32-битный размер.

Спасибо за ответ. Скажите, пожалуйста, когда мы хотим упаковать два регистра в один? Например, я использую регистры r1 и r2, и в закодированном виде они выглядят как 0001 и 0010. Могу ли я записать их оба только с 4 битами? Как бы они выглядели? Что-то вроде 0110? Я совсем запутался.

Как я уже сказал, решать вам. это ваш набор инструкций, и вам решать, как его представлять.

1 Ответ 1

Хотя вопрос кажется немного расплывчатым, я рискну ответить и, возможно, спровоцировать полезную дискуссию.

Вопрос 1. Когда мы упаковываем два регистра вместе? Откуда система знает, что это не один регистр, закодированный в 4 бита? Не могли бы вы привести пример?

ID (декодер инструкций) в ЦП сначала будет считывать код операции. Это означает, что, зная инструкцию, которую нужно декодировать, он знает, как интерпретировать следующие биты. Вы можете закодировать свои регистры на 4 бита, что означает, что у вас есть 16 регистров. Но представьте, что у вас есть инструкция, которая может работать только с двумя регистрами из подмножества из четырех регистров. В этом случае вы можете использовать только 4 бита для идентификации 2 регистров. Таким образом, вы упаковали в 4 бита «идентификаторы» 2 регистров.

Вопрос 2: есть ли разница, куда поместить 4 бита в форме 0000? Как бы вы сделали инструкцию целого числа байтов?

Учитывается, куда вы поместили 4 бита. В зависимости от каждого кода операции декодер инструкций знает, где взять адрес регистра, который он использует. Например, для инструкции загрузки, если вы разработали инструкцию с 4 битами сразу после кода операции, когда декодер идентифицирует загрузку, интерпретирует следующие 4 бита как идентификаторы регистров.

Я не думаю, что вы обязаны использовать целое число байтов в том смысле, что каждый бит в инструкции имеет значение. Инструкция может состоять из целого числа байтов, просто содержащих несколько неиспользуемых битов (обычно в конце).

Теперь вы увидите, как ЦП может выполнять вычисления, используя процесс, известный как цикл выборки-декодирования-выполнения. Здесь у вас есть представление о процессоре и оперативной памяти. Также показаны регистры, в которых можно временно хранить данные.

Поделиться этой публикацией

Теперь вы увидите, как ЦП может выполнять вычисления, используя процесс, известный как цикл выборки-декодирования-выполнения.

Здесь у вас есть представление ЦП и ОЗУ. Также показаны регистры, в которых можно временно хранить данные.

Получить

Счетчик программ (ПК) начинается с 0000. Это означает, что первый адрес в ОЗУ, по которому компьютер будет искать инструкцию, равен 0000.

Хотите продолжать
учиться?

Как работают компьютеры: Демистификация вычислений

Компьютеру нужно где-то хранить текущий адрес в ОЗУ, который он ищет. Для этого предназначен регистр адреса памяти (MAR). Поэтому адрес 0000 копируется в MAR.

Теперь сигнал отправляется по адресной шине в ОЗУ. Блок управления посылает сигнал чтения памяти, и содержимое адреса 0000 копируется через шину данных в регистр данных памяти (MDR).

Поскольку данные, полученные на этапе выборки, являются инструкцией, они копируются в регистр инструкций (IR).

Поскольку первая инструкция была выбрана, система находится в конце этапа выборки цикла. Счетчик программ можно увеличить на 1, чтобы система была готова прочитать следующую инструкцию, когда начнется следующий цикл выборки.

Расшифровать

Теперь инструкцию нужно расшифровать. Он отправляется по шине данных в блок управления, где разделяется на две части. Первая часть — это код операции или код операции, который в данном примере ЦП представляет собой первые четыре бита. Это команда, которую будет выполнять компьютер. Вторая часть, в данном случае вторые четыре бита, является операндом. Это адрес в оперативной памяти, откуда данные будут считываться или записываться в зависимости от операции.

Блок управления может преобразовывать коды операций в инструкции. Итак, здесь блок управления переводит код операции 0101 в инструкцию ЗАГРУЗИТЬ ИЗ ОЗУ.

Выполнить

Теперь команда будет выполнена. Операнд копируется в MAR, так как он содержит адрес загружаемых данных (в данном случае 0100).

Данные по адресу 0100 затем извлекаются из ОЗУ и передаются по шине данных в видеорегистратор. Поскольку это не инструкция, а просто данные, они затем передаются в аккумулятор (Acc).

Это полный цикл извлечения-декодирования-исполнения.

Второй цикл выборки, декодирования и выполнения

Теперь вы выполните оставшиеся два цикла программы. ПК теперь содержит 0001, поэтому вы получаете, декодируете и выполняете инструкцию по этому адресу.

  1. Компьютер находится на 0001, так что это следующая инструкция, которую нужно получить.
  2. Код инструкции и операнд адреса помещаются в IR, а PC снова увеличивается на 1.
  3. Инструкция декодируется, а адрес данных, над которыми нужно действовать, помещается в MAR. Инструкция оказывается ADD, которая складывает две части данных вместе.
  4. Новые данные извлекаются из адреса и в итоге попадают в аккумулятор вместе с результатами предыдущего цикла.
  5. Чтобы завершить этот этап, два значения в накопителе передаются в АЛУ, где их можно сложить вместе, как указано в коде операции.
  6. Затем результат помещается обратно в аккумулятор.

Второй цикл завершен.

Третий цикл выборки, декодирования и выполнения

Последний цикл предназначен для инструкции с номером 0010. Он использует код операции 0011, то есть STORE, и операнд 0110, который является последним показанным адресом в ОЗУ.

Таким образом, этот цикл берет результаты сложения в аккумулятор и сохраняет их обратно в ОЗУ по адресу 0110, как и было запрошено.

Напомним, что наша программа использовала три инструкции для сложения двух чисел и сохранения результата в памяти:

  1. Первая инструкция загрузила часть данных с указанного адреса.
  2. Второй ДОБАВИЛ это к данным, найденным по другому адресу.
  3. Последняя инструкция сохраняет результат сложения обратно по указанному адресу в памяти.

Чтобы понять цикл извлечения-декодирования-выполнения, необходимо изучить много информации. Многих это сбивает с толку, когда они следуют ему в первый раз. Возможно, вам будет полезно выполнить это задание во второй раз.

Читайте также:

32-битные инструкции Thumb, поддерживаемые процессорами Cortex-M0/M0+
BLDSBDMBISBMRSMSR