Действительно ли регистры 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 содержит более полный список.