8086, как небо от земли. Восемь регистров современных Athlon и
Pentium не блажь разработчиков и не техническая необходимость, а
фундаментальное ограничение самого набора инструкций x86.
Что же делать, если нам хочется как-то обойти это ограничение, не
теряя совместимости со старыми приложениями? К счастью,
инженеры, проектировавшие x86 ISA, были очень талантливыми и
прозорливыми, а потому заложили в архитектуру возможность
вводить перед инструкциями приставки - специальные указатели, так
или иначе изменяющие значения инструкций. Скажем, приставка
LOCK говорит, что инструкция должна быть выполнена в "атомном"
режиме["Атомный" режим - это когда выполнение инструкции
гарантированно не будет прервано каким-нибудь внешним событием.
К примеру, если мы что-нибудь записываем в оперативную память,
то начиная с момента исполнения и до завершения атомной
инструкции никто "посторонний" не сможет ни записать в то же
место оперативной памяти, ни прочитать оттуда. Используется в
многопроцессорных системах для организации межпроцессорного
взаимодействия], приставки 2E и 2F подсказывают процессору,
произойдет условный переход или нет, а приставка 66 приказывает
переключаться между 16-битным и 32-битным представлением
данных в регистрах. Поэтому когда разработчикам x86-64
понадобилось добавить в архитектуру IA-32 поддержку 64-битности,
они сделали очень простую и в то же время гениальную вещь, введя
набор 64-битных приставок REX, которые не столько расширяют
возможности инструкций, сколько служат для кодирования
дополнительной информации в четырех своих полях. Поле REX.W
задает "размер" обрабатываемых данных: если здесь записан нолик,
то обрабатываемые регистры интерпретируются как 32-битные, если
единичка - то как 64-битные; а поля REX.R, REX.X и REX.B -
старшие биты, дополняющие трехбитные поля ModR/M.Reg,
SIB.Index и, в зависимости от ситуации, ModR/M.R/M или SIB.Base
соответственно. Знаю, что это звучит не слишком понятно, поэтому
тут же поясню, что это означает. На самом деле в 64-битном режиме
мы используем 4-битную кодировку регистров процессора, но три
младших регистровых бита записываем на их "традиционные" места
в инструкции, а старший бит - переносим в приставку REX, обходя
тем самым архитектурное ограничение. А заодно, помимо поддержки