Счетчик программ (PC), обычно называемый указателем команд (IP) в Intel x86 и Itanium микропроцессоры, иногда называемые адресным регистром команд (IAR ), команда counter или просто часть последовательности команд - это регистр процессора, который указывает, где компьютер находится в его программе последовательности.
Обычно ПК получает приращение после выборки инструкции и сохраняет адрес памяти («указывает на») следующей инструкции, которая должна быть выполнена..
Процессоры обычно последовательно выбирают инструкции из памяти, но инструкции передачи управления изменяют последовательность, помещая новое значение в ПК. К ним относятся переходы (иногда называемые переходами), вызовы подпрограмм и возврат. Передача, обусловленная истинностью некоторого утверждения, позволяет компьютеру следовать другой последовательности при разных условиях.
Ветвь обеспечивает выборку следующей инструкции из другого места в памяти. Вызов подпрограммы не только разветвляется, но и где-то сохраняет предыдущее содержимое ПК. Возврат извлекает сохраненное содержимое ПК и помещает его обратно в ПК, возобновляя последовательное выполнение с инструкцией, следующей за вызовом подпрограммы.
В простом центральном процессоре (ЦП) ПК представляет собой цифровой счетчик (который является источником термина «программный счетчик»), который может быть одним из нескольких аппаратных регистров. Цикл команд начинается с выборки, при которой ЦП помещает значение ПК в адресную шину , чтобы отправить его в память. Память отвечает, отправляя содержимое этой ячейки памяти по шине данных . (Это компьютерная модель с хранимой программой, в которой одно пространство памяти содержит как исполняемые инструкции, так и обычные данные.) После выборки ЦП переходит к выполнению, предпринимая некоторые действия на основе содержимого памяти, которое это получилось. В какой-то момент этого цикла ПК будет изменен так, чтобы следующая выполняемая инструкция была другой (обычно, увеличивалась так, чтобы следующая инструкция начиналась с адреса памяти, следующего сразу за последней ячейкой памяти текущей инструкции).
Подобно другим регистрам процессора, ПК может представлять собой набор двоичных защелок, каждая из которых представляет один бит значения ПК. Количество бит (ширина ПК) зависит от архитектуры процессора. Например, «32-битный» ЦП может использовать 32 бита, чтобы иметь возможность адресовать 2 единицы памяти. На некоторых процессорах ширина программного счетчика зависит от адресуемой памяти; например, некоторые контроллеры AVR имеют ПК, который выполняет циклический переход после 12 бит.
Если ПК является двоичным счетчиком, он может увеличиваться при подаче импульса на его вход COUNT UP, или ЦП может вычислить какое-то другое значение и загрузить его в ПК с помощью импульса на вход ЗАГРУЗКИ.
Для идентификации текущей инструкции ПК может быть объединен с другими регистрами, которые идентифицируют сегмент или стр.. Этот подход позволяет ПК иметь меньше битов, предполагая, что большинство интересующих модулей памяти находятся в непосредственной близости от него.
Использование ПК, который обычно имеет приращение, предполагает, что то, что делает компьютер, - это выполнение обычно линейной последовательности инструкций. Такой ПК является центральным элементом архитектуры фон Неймана. Таким образом, программисты пишут последовательный поток управления даже для алгоритмов, которые не обязательно должны быть последовательными. Получившееся в результате «узкое место фон Неймана » привело к исследованиям в области параллельных вычислений, включая модели, не связанные с фон Нейманом, или модели потоков данных, в которых не использовался ПК; например, вместо того, чтобы указывать последовательные шаги, высокоуровневый программист мог бы указать желаемую функцию, а низкоуровневый программист мог бы указать это с помощью комбинаторной логики.
. Это исследование также привело к способам создания обычные ЦП на базе ПК работают быстрее, в том числе:
Современные языки программирования высокого уровня по-прежнему следуют модели последовательного выполнения, и, действительно, распространенным способом выявления ошибок программирования является «выполнение процедуры», в которой палец программиста идентифицирует точка исполнения, как ПК. Язык высокого уровня - это, по сути, машинный язык виртуальной машины, слишком сложный для создания аппаратного обеспечения, но вместо этого эмулируемый или интерпретируемый программным обеспечением.
Однако новые модели программирования выходят за рамки программирования с последовательным выполнением:
Производители используют разные символы для обозначения счетчика программ в программах на языке ассемблер. Хотя использование символа «$» распространено в Intel, Zilog, Texas Instruments, Toshiba, NEC, Siemens и документация по процессорам AMD, Motorola, Rockwell Semiconductor, Microchip Technology и Hitachi вместо этого использует символ «*», тогда как SGS-Thomson Microelectronics использует «ПК».