per tutte le CPU c'è qualcosa di simile a uno "spazio codice operativo". Ad esempio, se una CPU utilizza opcode a 8 bit, allora ci sarebbe un max. di 256 istruzioni che potrebbe avere. Gli opcode più grandi sono più opcode che puoi avere, ma più difficile è recuperarli e decodificarli rapidamente.
80x86 è un'architettura relativamente vecchia. È iniziato con un modesto spazio di opcode composto principalmente da opcode di 1 byte e 2 byte. Ogni volta che i produttori di CPU aggiungono una nuova funzionalità ci vogliono più opcode dallo spazio opcode. Hanno finito gli opcode. Si sono esauriti rapidamente.
Per aggirare lo hanno iniziato a fare le cose come l'aggiunta di codici di escape e prefissi per esteso artificialmente lo spazio codice operativo. Per un esempio, per le recenti istruzioni AVX stai guardando un prefisso VEX seguito da un vecchio codice di escape riciclato (ad esempio 0xF0), seguito da un vecchio prefisso di dimensioni degli operandi/indirizzo riciclato (ad esempio 0x66), seguito da altri 4 byte . Non è carino
Allo stesso tempo ci sono vecchie istruzioni che vengono utilizzate raramente ora (AAD, AAM, ecc.) E istruzioni con opcodes multipli/ridondanti (INC/DEC) che stavano consumando opcode di tipo "1 byte". Questi non possono/non possono essere rimossi completamente a causa della retrocompatibilità.
Tuttavia; quando 64-bit veniva progettato, semplicemente non c'era alcun codice a 64 bit per essere compatibile con - la compatibilità all'indietro non aveva importanza. Gli opcode a 1 byte consumati da istruzioni "non molto importanti" potrebbero essere riciclati; rendendo tali istruzioni non valide nel codice a 64 bit (ma liberando alcuni dei preziosi opcode di 1 byte).
La maggior parte di questi codici opzionali da 1 byte (l'intero gruppo INC/DEC da 1 byte se ricordo bene) è stata immediatamente riciclata per il prefisso REX necessario per supportare operandi a 64 bit. Alcuni non erano e sono diventati "gratuiti per estensioni future" (con la limitazione che l'estensione può funzionare solo con codice a 64 bit poiché tali istruzioni sono ancora valide nel codice a 16 e 32 bit).
I registri dei segmenti push/popping non hanno alcun senso nella modalità x64. –