Если я правильно понимаю это, счетчик программ указывает на адрес исполняемой команды и в большинстве случаев вы добавляете четыре к счетчику программ, чтобы перейти к следующему адресу инструкции. Но скажите, что у вас есть счетчик программ, указывающий на слово (например, слово 15) в памяти, и вы хотите перейти к следующей инструкции, предположите ли вы добавить 4 непосредственно к 15, чтобы получить следующую инструкцию? Любое объяснение будет оцененоСчетчик программ?
ответ
Эта вещь называется указателем инструкции. Как только процессор декодирует текущую инструкцию, он найдет, сколько байтов он занимает, и знает, сколько добавить к текущему значению указателя инструкции, чтобы перейти к следующей команде, чтобы при выполнении текущей команды процессор знал, что делать дальше.
Так, например, процессор начинается с указателя на указатель, сохраняющего значение 15, как в вашем примере - он выглядит, что происходит с этим адресом, бывает инструкция, занимающая 5 байтов, без проблем - она добавляет 5 к текущее значение, и это дает 20, и поэтому указатель инструкции теперь сохраняет значение 20, а затем процессор выполняет текущую инструкцию.
Вы никогда не запускаете счетчик программ напрямую - CPU делает это за вас, выполняя свою программу. В качестве программиста вы управляете счетчиком программ, выполняя различные инструкции перехода (условные, безусловные, переходы к подпрограмме и т. Д.). Один конкретный случай, когда вам нужно добавить смещение к счетчику программы, - это когда вы вставляете в независимый от позиции код. Однако даже в этом случае вы не добавляете размер инструкции в счетчик программ: вместо этого вы предоставляете смещение места, к которому вы хотели бы перейти, выполнив «ветвь в относительный адрес».
Как насчет того, когда мы пишем загрузчик, который перейдет на код приложения, который находится по абсолютному адресу 0x4000? В этом случае мы напрямую сменим счетчик программ на абсолютный адрес. – eepty
@eepty Вот что говорит второе предложение: вы делаете это с инструкцией перехода, а не с инструкцией по настройке регистра. – dasblinkenlight
- 1. Счетчик программ, не продвигающийся
- 2. Сборка филиала: счетчик программ
- 3. Счетчик программ Verilog с ветвлением
- 4. Прямой счетчик программ для чтения
- 5. Счетчик программ в ARM-сборке
- 6. Изменить счетчик программ в C
- 7. Значение ПК между двумя инструкциями (счетчик программ)
- 8. Счетчик программ VHDL, ошибка нескольких постоянных драйверов
- 9. Изменить счетчик программ (ПК) на сохраненный адрес
- 10. Перемещение рамки/счетчик программ/переполнение массива
- 11. C для 16f628, счетчик программ идет haywire
- 12. Как работает счетчик программ в 8085 году?
- 13. Можно ли читать счетчик программ другой нити?
- 14. Что такое счетчик программ потоков с точками останова?
- 15. Есть ли способ переместить счетчик программ в отладчик Chrome?
- 16. Есть ли способ увидеть счетчик программ в отладчике NetBeans?
- 17. Что означает «каждый поток JVM имеет свой собственный счетчик программ»?
- 18. Где счетчик программ идет после возвращения обработчика прерываний?
- 19. Переполнение счетчика программ?
- 20. Нулевое значение счетчика программ
- 21. Программный счетчик процесса
- 22. Рекомендации для программ с петлями
- 23. счетчик и счетчик клиентов
- 24. Регистрация списка программ Windows для установленных программ
- 25. iOS выбор программ из программ для фотографий
- 26. Исключение программ из помощника по совместимости программ
- 27. Автоматизация программ
- 28. Перегрузка программ?
- 29. Структура программ?
- 30. Продолжительность программ
Ваш пример имеет смысл, но откуда стоит ПК + 4, если то, что вы добавляете, зависит от того, что на этом адресе? – Ockham
@ user28694: Это будет зависеть от процессора. Некоторые процессоры имеют набор команд, где все команды имеют одинаковую длину, поэтому они могут +4 безоговорочно. Некоторые процессоры будут иметь инструкции переменной длины, и они решат, с какой инструкцией они справляются с использованием первых байтов самой инструкции. – sharptooth
Не [инструкции MIPS все 32-разрядные версии] (http://en.wikipedia.org/wiki/MIPS_architecture#MIPS_I_instruction_formats)? –