Los antiguos registros de 32 bits se han extendido a 64 bits, los r
registros (rax
, rbx
, rsp
y así sucesivamente).
Además, hay algo de propósito general adicional registra r8
través r15
que también se puede acceder como (por ejemplo) r8d
, r8w
y r8b
(la inferior de 32 bits de palabra doble, palabra de 16 bits y 8 bits byte respectivamente).
El byte alto de los viejos registros de 16 bits sigue siendo accesible, en muchas circunstancias, como ah
, bh
, y así sucesivamente, pero esto no parece ser el caso de los r8
través r15
registros. Hay algunas nuevas codificaciones de instrucciones , específicamente aquellas que usan el prefijo REX
, que no pueden acceder a esos bytes altos, pero otras aún son libres de usarlas.
Además, hay algunos nuevos registros de SSE, xmm8
aunque xmm15
.
Los registros eip
y flags
también se han extendido a rip
y rflags
.
Consulte wikipedia page y MSDN para obtener más información.
Si esto es compatible con la palabra clave asm
para un compilador de C en particular, no podría decirlo. Lo poco ensamblaje yo (y se está convirtiendo en aproximadamente un día al año) se realiza en el montaje en lugar de C.
Guys ¿Cómo se puede comprobar qué registros se correlacionan con parámetros cuando se hace una llamada al sistema. He estado leyendo y documentando y no he encontrado una respuesta clara. – Recursion
Tenga en cuenta que los registros superiores de 8 bits superiores (ah, bh, etc.) ya no funcionan para todos los códigos de operación. p.ej. 'inc ah' no es válido en x64 porque ese código de operación se ha reutilizado para uno de los nuevos registros de 64 bits. – Johan
@Johan: también tenga en cuenta que con el prefijo REX, los códigos de registro para ah bh ch dh se convierten en los nuevos registros de bytes sil dil bpl spl –