Il n'y a aucune instruction CPU qui répertorie tous les registres. Faire un code machine valide nécessite de connaître les encodages en premier lieu, il n'y aurait donc aucun intérêt à dépenser des transistors pour que le CPU conserve une telle liste. L'instruction CPUID vous indique si la CPU prend en charge les modes Long, SSE et AVX, ce qui vous permet de savoir si ces ensembles de registres sont disponibles.
Autre que cela, voir les manuels Intel ou enregistrer les diagrammes liés à partir du wiki x86.
Il existe des programmes qui ont des listes de registres compilés dans ces programmes. Celui qui vient à l'esprit est gdb
:
$ gdb /bin/true
(gdb) b _start
Function "_start" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (_start) pending.
(gdb) r
Starting program: /bin/true
Breakpoint 1, 0x00007ffff7dd9cd0 in _start() from /lib64/ld-linux-x86-64.so.2
(gdb) info reg all
rax 0x0 0
rbx 0x0 0
rcx 0x0 0
...
r15 0x0 0
rip 0x7ffff7dd9cd0 0x7ffff7dd9cd0 <_start>
eflags 0x202 [ IF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
st0 0 (raw 0x00000000000000000000)
...
fctrl 0x37f 895
fstat 0x0 0
ftag 0xffff 65535
fiseg 0x0 0
fioff 0x0 0
foseg 0x0 0
fooff 0x0 0
fop 0x0 0
mxcsr 0x1f80 [ IM DM ZM OM UM PM ]
ymm0 {v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_double = {0x0, 0x0, 0x0, 0x0}, v32_int8 = {0x0 <repeats 32 times>}, v16_int16 = {
0x0 <repeats 16 times>}, v8_int32 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int64 = {0x0, 0x0, 0x0, 0x0}, v2_int128 = {0x00000000000000000000000000000000,
0x00000000000000000000000000000000}}
...
ymm15 ...
GDB est scriptable, donc je suis sûr que vous pourriez obtenir cette décharge sans interaction de l'utilisateur (sans utiliser expect
pour simuler l'entrée d'utilisateur pour gdb).
Voulez-vous leurs noms mnémoniques, ou voulez-vous parcourir les codages numériques utilisés dans le code machine? (par exemple dans l'octet 'mod/rm'). Notez qu'ils ne sont pas dans l'ordre attendu: 'ebx' est hors service. Voir le [wiki tag x86] (http://stackoverflow.com/tags/x86/info) pour les liens vers docs. –
@PeterCordes le premier, les noms mnémoniques – xelp