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

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

В счетчик команд (ПК), обычно называемый указатель инструкции (IP) в Intel x86 и Itanium микропроцессоры, а иногда называли регистр адреса инструкции (IAR),[1] то счетчик команд,[2] или просто часть последовательности команд,[3] это регистр процессора это указывает, где компьютер находится в его программа последовательность.[nb 1]

Обычно ПК увеличивается после получения инструкция, и держит адрес памяти из ("точки to ") следующая инструкция, которая будет выполнена.[4][nb 2]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Символ

Поставщики используют разные символы для обозначения счетчика программ в язык ассемблера программы. Хотя использование символа "$" преобладает в Intel, Зилог, Инструменты Техаса, Toshiba, NEC, Сименс и AMD документация процессора, Motorola, Rockwell Semiconductor, Технология микрочипов и Hitachi вместо этого используйте символ "*",[9] в то время как SGS-Thomson Microelectronics использует «ПК».[9]

Смотрите также

Заметки

  1. ^ Для современных процессоров понятие «где именно в последовательности» слишком упрощено, так как параллелизм на уровне инструкций и внеочередное исполнение может возникнуть.
  2. ^ В процессоре, где приращение предшествует выборке, ПК указывает на текущую выполняемую инструкцию. В некоторых процессорах ПК указывает на некоторое расстояние за пределы текущей инструкции; например, в ARM7, значение ПК, видимое программисту, указывает за пределы текущей инструкции и за слот задержки.[5]

использованная литература

  1. ^ Мид, Карвер; Конвей, Линн (1980). Введение в системы СБИС. Ридинг, США: Эддисон-Уэсли. ISBN  0-201-04358-0.
  2. ^ Принципы работы, тип 701 и связанное с ним оборудование (PDF). IBM. 1953.
  3. ^ Гарри Кацан (1971), Компьютерная организация и система / 370, Компания Van Nostrand Reinhold, Нью-Йорк, США, LCCCN 72-153191
  4. ^ Зильбершац, Авраам; Гань, Грег; Гэлвин, Питер Б. (апрель 2018 г.). Понятия операционной системы. Соединенные Штаты: Wiley. С. 27, G-29. ISBN  978-1-119-32091-3.
  5. ^ "ARM Developer Suite, Руководство по сборщику. Версия 1.2". ARM Limited. 2001. Получено 2019-10-18.
  6. ^ Джон Л. Хеннесси и Дэвид А. Паттерсон (1990), Компьютерная архитектура: количественный подход, Издательство Morgan Kaufmann, Пало-Альто, США, ISBN  1-55860-069-8
  7. ^ Б. Рэндалл (1982), Истоки цифровых компьютеров, Springer-Verlag, Берлин, D
  8. ^ К. Гордон Белл и Аллен Ньюэлл (1971), Компьютерные структуры: литература и примеры, Книжная компания McGraw-Hill, Нью-Йорк, США
  9. ^ а б c Арнольд, Альфред (2020) [1996, 1989]. «E. Предопределенные символы». Macro Assembler AS - Руководство пользователя. V1.42. Перевод Арнольда, Альфреда; Хильсе, Стефан; Кантак, Стефан; Селлке, Оливер; Де Томази, Витторио. п. Таблица E.3: Стандартные символы - Часть 3. В архиве из оригинала на 2020-02-28. Получено 2020-02-28. 3.2.12. WRAPMODE […] AS предполагает, что программный счетчик процессора не имеет полной длины в 16 бит, заданной архитектурой, а вместо этого имеет длину, которая в точности достаточна для адресации внутреннего ПЗУ. Например, в случае AT90S8515, это означает 12 бит, соответствующих 4 килобайтам или 8 килобайтам. Это предположение допускает относительные переходы от начала к концу ПЗУ и наоборот, что приведет к ошибке отсутствия перехода при использовании строгой арифметики. Здесь они работают, потому что биты переноса, полученные в результате вычисления целевого адреса, отбрасываются. […] В случае вышеупомянутого AT90S8515 эта опция даже необходима, потому что это единственный способ выполнить прямой переход через все адресное пространство […]
  10. ^ Уокер, Б. С. (1967). Введение в компьютерную инженерию. Лондон, Великобритания: Лондонский университет печати. ISBN  0-340-06831-0.
  11. ^ Ф. Б. Чемберс, Д. А. Дуче и Г. П. Джонс (1984), Распределенных вычислений, Академическая пресса, Орландо, США, ISBN  0-12-167350-2
  12. ^ Дуглас Хофштадтер (1980), Гедель, Эшер, Бах: вечная золотая коса, Книги о пингвинах, Хармондсворт, Великобритания, ISBN  0-14-005579-7