Поделиться через


Использование регистров

Обновлен: Ноябрь 2007

Архитектура x64 поддерживает 16 регистров общего назначения (в дальнейшем называемых целочисленными регистрами), а также 16 регистров XMM, используемых для операций с плавающей запятой. Временные регистры сбрасываются в процессе выполнения вызова. Постоянные регистры должны сохранять свои значения в процессе выполнения функции и должны сохраняться вызываемым объектом в случае использования.

В следующей таблице описываются способы использования каждого регистра в процессе выполнения вызова функции:

Регистр

Состояние

Использование

RAX

Временный

Регистр возвращаемого значения

RCX

Временный

Первый целочисленный аргумент

RDX

Временный

Второй целочисленный аргумент

R8

Временный

Третий целочисленный аргумент

R9

Временный

Четвертый целочисленный аргумент

R10:R11

Временный

Должен сохраняться вызывающим объектом. Используется в инструкциях syscall/sysret

R12:R15

Постоянный

Должен сохраняться вызываемым объектом

RDI

Постоянный

Должен сохраняться вызываемым объектом

RSI

Постоянный

Должен сохраняться вызываемым объектом

RBX

Постоянный

Должен сохраняться вызываемым объектом

RBP

Постоянный

Может использоваться как указатель кадра. Должен сохраняться вызываемым объектом

RSP

Постоянный

Указатель стека

XMM0

Временный

Первый аргумент с плавающей запятой

XMM1

Временный

Второй аргумент с плавающей запятой

XMM2

Временный

Третий аргумент с плавающей запятой

XMM3

Временный

Четвертый аргумент с плавающей запятой

XMM4:XMM5

Временный

Должен сохраняться вызывающим объектом

XMM6:XMM15

Постоянный

Должен сохраняться вызываемым объектом

См. также

Ссылки

Программные соглашения x64