Меню

Регистр команды процессора счетчик команд процессора

Счетчик команд — Program counter

Программный счетчик ( PC ), обычно называемый указатель команд ( IP ) в Intel x86 и Itanium микропроцессоров , а также иногда называют регистр адреса инструкции ( IAR ), то счетчик команд , или только часть секвенсор команд, является регистр процессора , который указывает, где находится компьютер в своей программной последовательности.

Обычно ПК получает приращение после выборки инструкции и сохраняет адрес памяти (« указывает на») следующей инструкции, которая должна быть выполнена.

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

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

Содержание

Аппаратная реализация

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

Подобно другим регистрам процессора, ПК может представлять собой набор двоичных защелок, каждая из которых представляет один бит значения ПК. Количество бит (ширина ПК) зависит от архитектуры процессора. Например, «32-битный» CPU может использовать 32 бита, чтобы иметь возможность адресовать 2 32 единицы памяти. На некоторых процессорах ширина программного счетчика зависит от адресуемой памяти; например, у некоторых контроллеров AVR есть ПК, который завершает работу после 12 бит.

Если ПК является двоичным счетчиком, он может увеличиваться при подаче импульса на его вход COUNT UP, или CPU может вычислить какое-то другое значение и загрузить его в ПК с помощью импульса на его вход LOAD.

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

Последствия для машинной архитектуры

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

Это исследование также привело к способам ускорения работы обычных ЦП на базе ПК, в том числе:

  • Конвейерная обработка , при которой различное оборудование в ЦП одновременно выполняет разные фазы нескольких инструкций.
  • Архитектура с очень длинным командным словом (VLIW), в которой одна инструкция может достигать нескольких эффектов.
  • Методы для прогнозирования внеочередного исполнения и подготовить последующие инструкции для выполнения вне обычной последовательности.

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

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

Однако новые модели программирования выходят за рамки программирования с последовательным выполнением:

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

Символ

Поставщики используют разные символы для обозначения счетчика программ в программах на ассемблере . В то время как использование символа «$» распространено в документации процессоров Intel , Zilog , Texas Instruments , Toshiba , NEC , Siemens и AMD , Motorola , Rockwell Semiconductor , Microchip Technology и Hitachi вместо этого используют символ «*», тогда как SGS-Thomson Микроэлектроника использует «ПК».

Источник

Радиолюбитель

Последние комментарии

  • Сайид на Простой преобразователь напряжения 1,5 – 9 вольт
  • Евгений на Самодельный микропаяльник
  • Евгений на Самодельный микропаяльник
  • Коля+Пискарев на Компьютер – осциллограф, генератор, анализатор спектра
  • Коля Пискарев на Компьютер – осциллограф, генератор, анализатор спектра

Радиодетали – почтой

Регистры общего назначения, регистры ввода/вывода, стек, счетчик команд

Регистры общего назначения, регистры ввода/вывода, стек, счетчик команд

Процессорное ядро микроконтроллеров:
— регистры общего назначения
– регистры ввода/вывода
– стек
– счетчик команд

Читайте также:  Сроки поверки электросчетчиков се 102

Доброго дня уважаемые радиолюбители!
Приветствую вас на сайте “ Радиолюбитель “

Сегодня мы с вами продолжим более подробное изучение процессорного ядра микроконтроллера.
В прошлый раз мы рассмотрели арифметико-логическое устройство и организацию памяти микроконтроллера. В этой статье я постараюсь кратко, но и в тоже время как можно подробнее рассмотреть оставшиеся вопросы:
— регистры общего назначения
– регистры ввода/вывода
– стек
– счетчик команд
и очень подробно, но чуть позже, рассмотрим порты ввода/вывода.

Регистры общего назначения

Регистры общего назначения в любом микроконтроллере играют очень важную роль. В дальнейшем я буду сокращать их название – писать просто РОН.
РОН принимают участие в выполнении практически всех команд МК, и практически все данные проходят через них. В микроконтроллерах AVR имеется 32 РОН (и это очень хорошо, что их так много. А к примеру, в МК PIC – всего один регистр).
Каждый РОН имеет свое имя: R0, R1, R2 ….. R29, R30, R31. Все РОН объединяются в один файл, который называется файл регистров общего назначения. Регистры общего назначения восьмиразрядные (однобайтовые). Каждому РОН в области памяти данных (SRAM) отведен свой адрес – они занимают ячейки памяти с “нулевой” по “тридцать первую”, или в шестнадцатиричном исчислении – от $00 (0х00) до $1F (0x1F). Т.е., получается, что ячейки памяти SRAM с 0 по 31, одновременно являются и регистрами общего назначения. Мы можем в программе прописать команду: “записать 255 в регистр R31″, а можем прописать: “записать 255 в 31 ячейку памяти данных”, – результат будет один и тот же.

Надо помнить, что физически РОН (как и рассматриваемые ниже регистры ввода/вывода) не входят в память данных, но для повышения эффективности работы МК и его производительности, РОН (и регистры ввода/вывода) располагаются в адресном пространстве памяти данных, и к ним можно обращаться как по их именам, так и как к ячейкам памяти ОЗУ (SRAM).

Так как все РОН восьмиразрядные (однобайтовые) то и оперировать они могут только с однобайтными данными. В случае, если необходимо проводить операции с двухбайтными данными (шестнадцатиразрядными), то РОН с R26 по R31 могут образовывать сдвоенные регистры, которые в свою очередь могут выступать в роли самостоятельных шестандцатиразрядных регистров и тогда они имеют другие имена (такие сдвоенные регистры иногда называют “словом”, по аналогии с ячейками памяти программ):
R26 и R27 – сдвоенный регистр “Х”,
R28 и R29 – сдвоенный регистр “Y”,
R30 и R31 – сдвоенный регистр “Z”.
При этом первый регистр в такой паре (R26, или R28, или R30) играет роль младшего байта и обозначается дополнительной буквой “L”. Например: XL, YL, ZL.
Второй регистр в паре играет роль старшего байта и обозначается дополнительной буквой “H”. Например: XH, YH, ZH.
Это позволяет нам записать (или считать значение), к примеру, двухбайтовое число непосредственно в двойной регистр, обратившись к его буквенному обозначению X, Y или Z, а также считать любой байт (или записать в любой байт) выбрав буквенное обозначение младшего или старшего байта двойного регистра (к примеру XL или XH).

Кроме того необходимо помнить, что хотя и все регистры общего назначения одинаковы, но не все из них могут участвовать в некоторых операциях. При этом, регистрам с R16 по R31 доступны все операции, а регистрам с R0 по R15 – не все.
И еще. В некоторых МК (Tiny) двойной регистр только один – Z (R30,R31).

В описание каждой команды указывается, какие РОН могут участвовать в данной операции, к примеру:


Регистры ввода/вывода

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

Все регистры ввода/вывода (в дальнейшем буду писать РВВ) условно можно разделить на два типа:
служебные регистры микроконтроллера
регистры, относящиеся к конкретным периферийным устройствам
Все регистры ввода/вывода (как и РОН) занимают свое адресное пространство в памяти данных (SRAM) – от 32 до 95 (или в шестнадцатиричном счислении от $20 до $5F) и идут сразу за регистрами общего назначения, в так называемом адресном пространстве ввода/вывода. Каждый регистр восьмиразрядный и занимает память в один байт.
Всего МК может иметь 64 регистра ввода/вывода – максимальное число (за редким исключением). В тоже время, если МК простенький и в нем мало устройств, и он использует меньшее число РВВ, в области памяти данных все равно резервируется 64 адреса. Некоторым, слишком навороченным МК, стандартного значения в 64 РВВ недостаточно. В таких МК в адресном пространстве памяти данных выделяется еще дополнительно 160 ячеек памяти для дополнительных регистров ввода/вывода.

Еще раз напомню, что хотя РОН и РВВ выделяется место в памяти данных, но доступное пространство памяти данных для нас от этого не уменьшается, ведь физически они там не располагаются. Если написано, что МК имеет память данных 128 байт, то значит мы можем использовать эти 128 байт в своих целях. Просто первый адрес памяти данных будет начинаться не с нуля, как в памяти программ или энергонезависимой памяти.

Читайте также:  Счетчики для детских электромобилей

Каждый регистр ввода/вывода имеет свой номер – от 0 до 63 (или в шестнадцатиричном виде – от $00 до $3F), который соответствует его адресу в адресном пространстве ввода/вывода. Адрес РВВ в адресном пространстве ввода/вывода и адреса соответствующих им ячеек в ОЗУ (памяти данных) не совпадают. Если регистр имеет номер 0, то в адресном пространстве ОЗУ он будет занимать 32 ячейку памяти (ведь сначала идут 32 регистра общего назначения, а за ними уже – РВВ). Для определения адреса РВВ в области памяти данных необходимо прибавить к его номеру 32.
Помимо номера, каждый регистр имеет свое имя (буквенную аббревиатуру) – для удобства программистов.
Для разных МК имена регистров, имеющих одинаковое назначение, обычно совпадают, а вот номер регистра может отличаться. Но это не так и важно, потому, что при программирование оперируют в основном именами регистров.
К примеру, для управления портом ввода-вывода (а их мы рассмотрим очень подробно в следующей статье) имеется три РВВ – один служит для задания направления работы порта (на вывод или ввод информации), второй для … рассмотрим в следующей статье. И так каждое устройство.

Кусочек из таблицы регистров ввода/вывода (первое число – номер регистра, и оно же его адрес в адресном пространстве РВВ, в скобках указывается адрес регистра в адресном пространстве памяти данных, т.е. номер +32):

Назначение и работу РВВ мы будем изучать постепенно, по мере изучения работы устройств МК.
Следующую статью мы посвятим изучению одного, но самого главного, чаще всего используемого в программах – регистру состояния, под названием SREG.

Стек

Стек, или указатель стека – это специальный регистр, который предназначен для организации стековой памяти.
Можно сказать, что стек (точнее стековая память, стек состоит из двух частей: указатель стека и стековая память) – это туннель с тупиком в конце, состоящий из ячеек памяти. По мере заполнения ячеек памяти первые данные уходят в глубь стека, и добраться до них можно, только вытащив сначала последние введенные данные. Допустим, если мы запишем в стек последовательно три числа: 10,20 и 30, то для того, чтобы затем извлечь из стековой памяти число 10, предварительно придется извлечь числа 30 и 20. Т.е., значение записанное последним всегда будет прочитано первым.
Стек широко используются не только МК в своих целях, но и программистами.
К примеру, при выполнении команды перехода к подпрограмме, МК самостоятельно записывает в стек адрес следующей команды, с которой будет продолжено выполнение основной программы после возвращения из подпрограммы. Возвращаясь из подпрограммы, МК извлекает этот адрес и загружает в счетчик команд, в результате чего выполнение программы продолжается с прерванного места.
Для нас тоже очень удобно сохранять в стеке данные при входе в подпрограмму, а затем извлекать их по возвращению из подпрограммы. Также удобно в стеке сохранять промежуточные результаты вычислений, а затем, по мере необходимости, извлекать их.

В микроконтроллерах, в которых отсутствует память данных (ОЗУ), а это часть МК семейства Tiny, стек организуется аппаратно. В таких МК стек располагается в собственной памяти а глубина его равна трем уровням. Аппаратный стек не доступен программисту, его в своих целях использует только сам МК, сохраняя в нем адреса команд при переходе к подпрограммам. Так как возможности аппаратного стека мы использовать в своих целях не можем, то на этом и закончим его изучение.
Во всех остальных МК, которые имеют память данных, стек организуется программно. Стек в этом случае не имеет собственной памяти а использует память данных (ОЗУ). Такой стек доступен для наших целей и рассмотрим его подробней.
Для организации процесса записи данных в стек и их чтения предназначен указатель стека.
В качестве указателя стека используются один или два регистра ввода/вывода:
– если память данных небольшая (до 256 байт), используется один восьмиразрядный РВВ – SPL;
– если память данных большая (более 256 байт), к первому РВВ – SPL, добавляется второй – SPH, и вместе они составляют один шестнадцатиразрядный указатель стека.
В указателе стека содержится адрес ячейки памяти, в которую будут записаны или считаны данные.

Для программиста в системе команд МК есть две специальные команды:
PUSH – команда записи в стек
POP – команда чтения из стека
Давайте рассмотри как происходит запись в стек и чтение из него.
Запись данных в стек:
Для того, чтобы записать данные в стек, их предварительно необходимо загрузить в любой РОН.
По команде PUSH МК записывает данные из указанного нами РОН в память данных по адресу, на который указывает указатель стека, а затем уменьшает содержимое стека на 1 (если указатель восьмиразрядный) или на 2 (если указатель шестнадцатиразрядный). Новая команда PUSH запишет данные в следующую ячейку ОЗУ и опять уменьшит содержимое указателя стека. И так, далее.


Чтение данных из стека:
По команде POP, МК сначала увеличивает содержимое указателя стека на 1 или 2, а затем считывает данные с ячейки ОЗУ, на которую указывает указатель стека. И так, далее.


После сброса МК содержимое указателя стека равно нулю. Т.е. получается, что после сброса, указатель стека указывает на нулевую ячейку памяти ОЗУ.
А теперь смотрите, что получится, если мы попробуем что-то записать в стек:
– первая команда PUSH – содержимое РОН будет записано в нулевую ячейку памяти,а затем МК попытается уменьшить содержимое стека на 1 или 2 – и ни чего не получится – адрес ячейки памяти не может быть меньше нуля!
Поэтому, прежде чем пользоваться стековой памятью, необходимо записать в указатель стека значение его вершины – адрес конечной ячейки памяти с которой начнется запись в стек.
Обычно вершиной стека указывают адрес последней ячейки памяти данных. Если у вашего МК ОЗУ составляет 128 байт, то указывают адрес 128 ячейки памяти. Под стек можно использовать всю память, если только вы не будете хранить в ней свои переменные. Если в качестве вершины стека вы укажите конечную ячейку памяти, то следить за стековой памятью в большинстве случаев не обязательно. А если вершиной стека указать ячейку памяти поближе к началу, и при этом использовать ОЗУ для хранения своих данных, то следить за размерностью стека придется – он может залезть на ячейки в которых вы будете хранить свои данные.

Читайте также:  Газовые счетчики модели гранд

Счетчик команд

Счетчик команд – представляет собой регистр, в котором содержится адрес следующей исполняемой команды.

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

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

В продолжении этой статьи, а точнее – окончании, мы очень подробно рассмотрим порты ввода/вывода микроконтроллера.
После этого, вся теория пойдет вперемешку с практикой. Легче понимать работу микроконтроллера разрабатывая практическое устройство.
Расскажу немного о том, что будет дальше.
После портов ввода/вывода мы начнем собирать цифровой вольтметр, попутно изучая и необходимые для этого теоритические вопросы.
Вольтметр я буду собирать на основе МК ATiny26 – самый подходящий (как мне кажется) для этого микроконтроллер. Для вывода информации, в целях изучения вопроса подключения к МК различных типов устройств для отображения информации, мы будем использовать сначала светодиодные сегментные индикаторы, которые потом заменим сегментным LCD дисплеем, который потом заменим буквенно-цифровым ЖК индикатором, а его, в свою очередь, если не погибнем в процессе, графическим ЖК индикатором. Затем добавим к вольтметру амперметр, а сверху этого бутерброда положим частотомер. Что будет дальше, честно говоря, я пока не знаю.

Источник



Регистры. Счетчик команд. Стек.

Primary tabs

Forums:

ВНИМАНИЕ = вопрос не корректен, возможно два основных вариантов толкования «послания преподавателя» (рассуждаю так исходя из текста предыдущих ответов)=

  1. Регистры. Счетчик команд. Стек. + ПРОЦЕССА
  2. Регистры. Счетчик команд. + ПРОЦЕССОРА + Стек вообще (общее понятие)

но постараюсь обо всём по-немногу)))

Регистр процессора — блок ячеек памяти, образующий сверхбыструю оперативную память (СОЗУ) внутри процессора; используется самим процессором и большой частью недоступен программисту: например, при выборке из памяти очередной команды она помещается в регистр команд, к которому программист обратиться не может. (Имеются также регистры, которые в принципе программно доступны, но обращение к ним осуществляется из программ операционной системы, например, управляющие регистры и теневые регистры дескрипторов сегментов. Этими регистрами пользуются в основном разработчики операционных систем).

Стек вообще (англ. stack — стопка) — структура данных, в которой доступ к элементам организован по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»). Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю.

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

Соответственно, если применить все данные понятия к ПРОЦЕССУ , то основываясь на предыдущих общих определениях и этом билете можно сказать, что:

  1. Счетчик команд процесса — это «поле» элемента таблицы процесса, в котором сохраняется последнее состояние регистра-счётчика команд
  2. Регистры процесса— опять же — структура, например, в таблице процессов, хранящая последнее состояние регистров процессора при исполнении процесса
  3. Стэк процесса — область памяти ( представленная где либо, с возможностью обращения к ней ) , в которой хранятся необходимые для функционирования (в рамках системы)процесса данные в виде одноимённой структуры (стэка)

Источник