Так что я немного понимаю, как все это связано. Инструкции хранятся в регистрах
Нет, инструкции хранятся в памяти.
и EIP/RIP указывает на код операции, который управляет этими регистрами (программный код)
EIP/RIP указывает на область памяти, где ЦП будет получать следующую инструкцию. Он увеличивается на 1 или более при получении инструкции и может полностью измениться при переходе, переходе или прерывании.
Коды операций являются частью инструкции, которая фактически указывает процессору, что делать. Многие инструкции (не все) состоят из кода операции (опять же, фактической инструкции или "команды") и данных, необходимых для кода операции ("операнда").
Некоторые коды операций управляют регистрами напрямую (например, MOV AX, немедленно), многие косвенно управляют регистрами как побочными эффектами (большинство математических инструкций влияют на флаги при определенных условиях), а некоторые вообще не манипулируют регистрами (не очень много), кроме указателя инструкций ,
Кэш-память - это прозрачный слой между процессором и оперативной памятью. Процессор сначала проверяет кэш - при выполнении инструкции, которая читает память, - поскольку он намного быстрее и пытается сохранить его загруженным часто используемыми данными. В программе на языке ассемблера вам не нужно использовать специальные инструкции для этого.
Доступ к реестру не имеет никакого отношения к кешу. Регистры могут участвовать в операции, которая вычисляет, к какой ячейке памяти обращаться, т.е. регистры могут использоваться в качестве указателей и индексов ("индексированная" или "косвенная" адресация), но адреса также могут быть указаны непосредственно в инструкциях на языке ассемблера (это "абсолютный" режим адресации). Теперь процессоры x86 имеют прозрачную функцию "переименования регистров", которая используется для поддержки выполнения не по порядку, но не связана с кэш-памятью на кристалле.
В x86 есть несколько инструкций, которые очищают кеш, а некоторые процессоры позволяют вам настроить кеш как «кеш-память», где ЦП использует только кеш и вообще не обращается к ОЗУ. Это полезно, если необходимо выполнить код до инициализации ОЗУ, например, при запуске системной прошивки или ОС, или без нарушения работы ОЗУ, например, при обработке сбоя ОС.