Как можно получить доступ к регистрам ЦП, используя адреса памяти?

Следующее взято из таблицы данных ATmega328-328P.

Согласно этому, я могу получить доступ ко всем 32 регистрам процессора, используя адреса памяти. Например:

 unsigned char *register = 0x0;

получит доступ к первому регистру. Это правда? если да, то возможно ли это сделать и на обычных процессорах (например, на моем ноутбуке), поскольку я думал, что для доступа к памяти можно использовать только указатель, а не к регистрам процессора.

Сопоставлен ли регистр в SRAM в этом случае?

, 👍1

Обсуждение

Я разобрался, они сопоставлены. Объяснено здесь: https://stackoverflow.com/questions/3022046/is-it-possible-to-access-32-bit-registers-in-c, @xnight


1 ответ


2

Микроконтроллеры, как правило, просты по сравнению с процессорами, которые вы можете найти в своем ноутбуке. Большинство операционных систем используют функции более высокого уровня безопасности, которые могут предотвратить попадание пользовательских программ туда, где они не должны быть.

Что касается отображения регистров в памяти, это действительно зависит от конкретной архитектуры и каждого процессора. Они не все одинаковы.

Сопоставлен ли регистр в SRAM в этом случае?

Адресное пространство данных отображает 32 регистра общего назначения, все регистры ввода-вывода (включая те, которые также доступны через адресное пространство ввода-вывода) и ОЗУ

,