Старые 32-битные регистры были расширены до 64 бит, регистры r
(rax
, rbx
, rsp
и т. Д.).
Кроме того, есть несколько дополнительных регистров общего назначения от r8
до r15
, к которым также можно получить доступ (например) r8d
, r8w
и r8b
(младшее 32-разрядное двойное слово, 16-битное слово и 8-битный байт соответственно). Суффикс b
- это исходная номенклатура AMD, но иногда вы будете видеть ее как l
(нижний регистр L
) для "младшего байта".
Я, как правило, предпочитаю сам суффикс b
(хотя текущие младшие байты регистров al
, bl
и т. Д.), Так как он соответствует именам d/w = double/word
и l
потенциально может быть ошибочно принят за long
. Или, что еще хуже, цифра 1
, которая заставляет вас задаться вопросом о том, что за номер регистра чёртов 81
:
Старшие байты старых 16-битных регистров по-прежнему доступны, во многих случаях, например, ah
, bh
и т. Д. (Хотя, похоже, это не относится к новым r8
через r15
регистров). Существуют некоторые новые кодировки команд , в частности , в частности те, которые используют префикс REX
, которые не могут получить доступ к этим старшим старшим байтам, но другие по-прежнему могут использовать их.
Кроме того, есть несколько новых регистров SSE, xmm8
хотя xmm15
.
Регистры eip
и eflags
также расширены до rip
и rflags
(хотя старшие 32 бита rflags
пока еще не используются).
Подробнее см. На странице википедии и MSDN .
Поддерживаются ли они в ключевом слове asm
для определенного компилятора Си, я не могу сказать. То небольшое собрание, которое я делаю (и оно становится около одного дня в году), делается на сборке, а не на C.
Связанный: