Prefixo REX

Entendendo o prefixo REX no x86-64.

Como eu mencionei antes esse prefixo sĆ³ existe no modo de 64-bit e ele Ć© necessĆ”rio para usar operandos de 64-bit. Esse prefixo nĆ£o Ć© um byte especĆ­fico mas sim todos os bytes entre 40 e 4F. Isso porque os Ćŗltimos 4 bits do prefixo sĆ£o campos distintos, mas os 4 bits mais significativos do prefixo REX sempre tem o valor fixo de 0100.

Observe as figuras tiradas dos manuais da Intel:

Em modo de 16-bit e 32-bit hĆ” 8 registradores de propĆ³sito geral, mas em 64-bit hĆ” 16 registradores de propĆ³sito geral. Como eu mencionei antes os campos que especificam os registradores por cĆ³digos contĆ©m somente 3 bits de tamanho, daĆ­ sĆ³ Ć© possĆ­vel especificar 8 registradores distintos.

Mas alguns bits do prefixo REX sĆ£o usados para estender os tamanhos desses campos em 1 bit, assim permitindo especificar atĆ© 16 registradores distintos ou 16 modos de endereƧamento distintos. Cada bit do prefixo REX Ć© identificado por uma letra e Ć© comumente referido como no formato REX.B que seria o bit B (o menos significativo) do prefixo.

REX.B (bit 0)

Em instruƧƵes cujo a codificaĆ§Ć£o do registrador faz parte do opcode, ele Ć© usado para estender o campo de registrador. Onde ele se torna o bit mais significativo do valor.

Em instruƧƵes com ModR/M (sem SIB) ele estende o campo R/M como o bit mais significativo.

Em instruƧƵes com SIB ele estende o campo Base como o bit mais significativo.

REX.X (bit 1)

Estende o campo Index do SIB como o bit mais significativo.

REX.R (bit 2)

Estende o campo REG do byte ModR/M como o bit mais significativo.

REX.W (bit 3)

Se ligado a instruĆ§Ć£o usa operandos de 64-bit, onde por padrĆ£o os operandos sĆ£o de 32-bit.

Last updated