Действительно ли регистры 32-битные в x86 и 64-битные в x86-64?
3 ответа
Краткий ответ: да.
Длинный ответ:
Все процессоры имеют несколько регистров. На процессорах x86 самый большой из них имеет длину 32 бита, а на x64 самый длинный - 64 бита.
Меньшие регистры предназначены для обратной совместимости со старыми приложениями.
Например, регистр bx всегда имеет длину 16 бит и существует для совместимости с 16 битами на большинстве процессоров, ebx имеет длину 32 бита и существует на 32-битных и 64-битных процессорах.
Важно отметить, что bx указывает на "правую половину" ebx
Например:
Если значение в ebx равно 0f0f 0b0b то значение в bx равно 0b0b
Да, но...
Возьмите в качестве примера регистр аккумулятора.
В 8086/8088 это был 16-битный регистр AX. Доступ к левой и правой 8-битным частям можно получить отдельно как AH и AL:
    1
    5               0
    |+++++++*+++++++|
AX: |   AH  |   AL  |
    |+++++++*+++++++|
32-битные процессоры добавили 32-битные регистры, в то время как оригинальные 16 и 8-битные регистры оставались доступными:
     3
     1                               0
     |+++++++*+++++++|+++++++*+++++++|
     |              AX               |
EAX: |               |   AH  |   AL  |
     |+++++++*+++++++|+++++++*+++++++|
И с 64 битами они повторили трюк:
     6
     3                                                               0
     |+++++++*+++++++|+++++++*+++++++|+++++++*+++++++|+++++++*+++++++|
     |                               |              EAX              |
RAX: |                               |               |      AX       |
     |                               |               |   AH  |   AL  |
     |+++++++*+++++++|+++++++*+++++++|+++++++*+++++++|+++++++*+++++++|
И есть также регистры с плавающей запятой, каждый длиной 80 бит, независимо от размера основного регистра.
Регистры общего назначения и указатель инструкций имеют 16 бит на 16-битном процессоре x86 (т.е. от 80x86 до 286 или более поздней версии в режиме совместимости), 32 бита на 32-битном процессоре x86 (т.е. 386 и далее) и 64 бита на 64-битном процессоре (т.е. amd64 или совместимом). Это связано с тем, что N-битный ЦП более или менее определяется как ЦП, где регистры общего назначения имеют ширину N бит (или ЦП, где указатель инструкций имеет ширину N бит, но на x86 и большинстве других архитектур это то же самое).
Некоторые другие регистры имеют разные размеры. Например, 32-битные процессоры x86 имеют 16-битные регистры сегментов (редко используются) и 80-битные регистры с плавающей запятой. Статья в Википедии о X86 содержит более полный список.
