Как определяется битовый номер регистра?

471
Moses

Действительно ли регистры 32-битные в x86 и 64-битные в x86-64?

3
Это вопрос в техническом или IT или CS курс? Bart Silverstrim 13 лет назад 3
Кроме того, какое отношение этот вопрос имеет к управлению сервером? Michael Todd 13 лет назад 0
Я думаю, что это должно было быть надето на SuperUser. Bart Silverstrim 13 лет назад 0

3 ответа на вопрос

4
Nate

Краткий ответ: да.

Длинный ответ:

Все процессоры имеют несколько регистров. На процессорах x86 самый большой из них имеет длину 32 бита, а на x64 самый длинный - 64 бита.

Меньшие регистры предназначены для обратной совместимости со старыми приложениями.

Например, bxрегистр всегда имеет длину 16 ebxбит и существует для совместимости с 16 битами на большинстве процессоров, имеет длину 32 бита и существует на 32-битных и 64-битных процессорах.

Важно отметить, что bxуказывает на "правую половину"ebx

Например:

Если значение в ebx равно 0f0f 0b0bзначению bx,0b0b

Да (не уверен насчет 8 бит), они могут быть доступны только если вы пишете на Ассемблере. Nate 13 лет назад 0
2
Toon Krijthe

Да, но...

Возьмите в качестве примера регистр аккумулятора.

В 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 бит, независимо от размера основного регистра.

1
Gilles

Регистры общего назначения и указатель инструкций имеют 16 бит на 16-битном процессоре x86 (т.е. от 80x86 до 286 или более поздней версии в режиме совместимости), 32 бита на 32-битном процессоре x86 (т.е. 386 и далее) и 64 бита на 64-битном процессоре (т.е. amd64 или совместимом). Это связано с тем, что N-битный ЦП более или менее определяется как ЦП, где регистры общего назначения имеют ширину N бит (или ЦП, где указатель инструкций имеет ширину N бит, но на x86 и большинстве других архитектур это то же самое).

Некоторые другие регистры имеют разные размеры. Например, 32-битные процессоры x86 имеют 16-битные регистры сегментов (редко используются) и 80-битные регистры с плавающей запятой. Статья википедии на X86 имеет более полный список.

Похожие вопросы