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

Если я правильно понимаю, счетчик программ указывает на адрес выполняемой инструкции, и в большинстве случаев вы добавляете четыре к счетчику программ, чтобы перейти к следующему адресу инструкции. Но скажем, у вас есть программный счетчик, который указывает на слово (например, слово 15) в памяти, и вы хотите перейти к следующей инструкции. Предполагаете ли вы добавить 4 непосредственно к 15, чтобы получить следующую инструкцию? Любое объяснение будет оценено

2 ответа

Решение

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

Так, например, процессор начинает с указателя инструкции, хранящего значение 15, как в вашем примере - он смотрит, что происходит по этому адресу, там есть инструкция, занимающая 5 байтов, нет проблем - он добавляет 5 к текущему значению, и это дает 20 и, таким образом, указатель инструкции теперь сохраняет значение 20, и процессор затем выполняет текущую инструкцию.

Вы никогда не продвигаете счетчик программ напрямую - CPU делает это за вас, выполняя вашу программу. Как программист, вы управляете счетчиком программ, выполняя различные инструкции перехода (условные, безусловные, переходы к подпрограммам и т. Д.). Один конкретный случай, когда вам нужно добавить смещение к счетчику программ, - это когда вы переходите в независимый от позиции код. Однако даже в этом случае вы не добавляете размер инструкции к счетчику программы: вместо этого вы предоставляете смещение места, на которое вы хотели бы перейти, выполняя "переход по относительному адресу".

Другие вопросы по тегам