Я не знаю, что такое MAR, но обычно ваш регистр program counter
(AKA instruction pointer
) достаточно велик, чтобы охватить всю память программы. Как правило.
Исходные процессоры i80x86 имеют указатель команд, эффективно разделенный на 2 части, селектор сегмента и смещение. Фактический адрес, который поступает на адресную шину при доступе к физической памяти, формируется с использованием этих двух частей. В так называемом режиме реальной адресации адрес просто segment selector * 16 + offset
. Эти 2 компонента являются 16-разрядными, и эта схема адресации позволяет получить доступ к около 1 МБ памяти. Если вы изменили только указатель инструкций, а не сегмент, вы будете ограничены 64 КБ. Есть и другие процессоры с указателями разделенных команд. Например, TMS320C54xx компании Texas Instruments.
Возвращаясь к x86 ... На 64-битных процессорах x86 ваш указатель инструкций имеет длину 64 бита. Тем не менее, процессор может не (и я думаю, что все еще не) поддерживает полные 64-битные адреса памяти, используя только младшие 52 или около того бит Это пример, где указатель инструкции больше, чем необходимо для доступа ко всей памяти.