В архитектурах Intel это называется указателем инструкций, а не счетчиком программ. Любое имя относится к одной и той же вещи: регистр, который идентифицирует адрес текущей / следующей инструкции, которую процессор должен выполнить.
Чрезмерно упрощая (т. Е. Предполагая, что нет конвейерного процессора) в начале тактового цикла, ПК хранит адрес инструкции, которая будет выполняться в течение тактового цикла, то есть текущей инструкции. К концу тактового цикла регистр ПК обновляется для хранения адреса инструкции, которая будет выполняться в следующем тактовом цикле.
PC = PC + 4
описывает последовательное выполнение, используемоескажем, add
, addi
, и не взятыми условными ветвями: он говорит, что следующий ПК будет ссылаться на инструкцию на 4 байта после текущей - что для (нормального) последовательного потока, ПК шагает вперед на 4 байта за раз.
Выражение PC = PC + 4 + branch address
несколько неверно - оно должно сказать PC = PC + 4 + offset
, где смещение является непосредственным в инструкции I-типа, более конкретно, подписанным(знак увеличен с 16 бит до 32 бит) немедленно * 4.
В этой формуле PC
в правой части =
относится к текущей инструкции: адресbeq
инструкция, в то время как PC
на левой стороне относится к следующему ПК, выполняемому после beq
. Эта формула описывает адрес инструкции, которая должна выполняться следующим образом, когда берется ветвь, поскольку это условная ветвь (если ветвь не берется, то PC = PC + 4
описывает последовательное выполнение).
Для условных ветвей значение длянепосредственное значение -1 будет переходить к себе, 0 - к следующей инструкции, а 1 - пропустить одну инструкцию вперед.