Ответ 1
Говоря говоря, когда вы выполняете адресацию с массивом ( "индексированный" ) с общими регистрами, вы делаете по существу то же самое, что и регистры сегментов. В bad old days 8-битного и 16-битного программирования многие приложения требовали гораздо больше данных (а иногда и большего количества кода), чем мог достигнуть 16-разрядный адрес.
Так много CPU решили это, имея большее адресное пространство памяти, чем могли достигнуть 16-разрядные адреса, и сделали доступными регионы памяти с помощью "сегментных регистров" или аналогичных. Программа установит адрес в "регистре сегментов" на адрес, расположенный выше (65536 байт) 16-разрядного адресного пространства. Затем, когда были выполнены определенные инструкции, они добавили бы указанный адрес инструкции в соответствующий (или указанный) "сегментный регистр" для считывания данных (или кода) за пределы диапазона 16-разрядных адресов или 16-разрядных смещений.
Однако сегодня ситуация противоположная!
Как так? Сегодня 64-разрядный процессор может адресовать больше (не менее) всего адресуемого пространства памяти. Большинство 64-разрядных процессоров сегодня могут обращаться с чем-то вроде 40-бит до 48 бит физической памяти. Правда, нет ничего, что помешало бы им обращаться к полному 64-битовому пространству памяти, но они никого не знают (но NSA) могут позволить себе такую большую ОЗУ, и, кроме того, повесить столько RAM на процессорную шину, чтобы загрузить ее с емкостью, и замедлить ВСЕ доступ к памяти за пределами чипа CPU.
Следовательно, текущее поколение основных процессоров может адресовать 40-битные данные на 48 бит пространства памяти, что составляет более 99,999% рынка, которые когда-либо могли бы достичь. Обратите внимание, что 32-битные 4-гигабайты (которые некоторые люди превышают сегодня в 2, 4, 8, 16), но даже 40-битные могут адресовать 256 * 4GB == 1024GB == 1TB. В то время как 64 ГБ оперативной памяти сегодня разумно и, возможно, даже 256 ГБ в крайних случаях, 1024 ГБ просто не нужны, кроме, возможно, 0,001% приложений и недоступны для загрузки.
И если вы находитесь в этой категории 0.001%, просто купите один из процессоров, которые обращаются к 48-битной физической памяти, и вы говорите 256 ТБ..., что в настоящее время непрактично, потому что оно будет загружать шину памяти с помощью слишком большая емкость (возможно, даже до такой степени, что шина памяти перестанет работать).
Дело в этом. Когда ваши обычные режимы адресации с обычными 64-битными регистрами могут обращаться к значительно большему количеству памяти, чем может содержать ваш компьютер, традиционная причина добавления регистров сегментов исчезает.
Это не означает, что люди не могли найти полезные цели для сегментных регистров в 64-разрядных ЦП. Они могли. Несколько возможностей очевидны. Однако с 64-разрядными общими регистрами и 64-разрядным адресным пространством нет ничего общего с тем, что общие регистры не могли выполнять эти регистры сегментов. И регистры общего назначения имеют очень много целей, регистры сегментов которых нет. Поэтому, если кто-то планировал добавить больше регистров в современный 64-битный процессор, они добавили бы регистры общего назначения (которые могут что-то делать "что угодно" ), а не добавлять "сегментные регистры с очень ограниченной целью".
И действительно, они есть. Как вы, возможно, заметили, AMD и Intel продолжают добавлять в регистрационный файл SIMD больше [sorta] регистров общего назначения, а AMD удвоила количество [действительно] регистров общего назначения, когда они спроектировали свои 64-разрядные процессоры x86_64 (которые Intel копируется).