Non è il linguaggio assembly in realtà ma il linguaggio macchina sottostante che impedisce queste operazioni.
Mentre l'assemblaggio è composto da parole o mnemonici facili da leggere, in realtà rappresentano direttamente gli 1 e gli 0 del codice macchina. Sulle CPU x86 ogni istruzione è tipicamente costituita da una sequenza di byte con byte singoli o anche bit all'interno dei byte che hanno un significato. Alcuni bit rappresentano l'istruzione, altri rappresentano lo addressing mode. Nel registro che indirizza le modalità come i vostri esempi alcuni bit rappresentano quali registri specifici devono essere utilizzati come origine e destinazione dell'istruzione mov
.
Ora la famiglia di processori x86 risale agli anni '70 quando l'architettura della CPU era più semplice. In quei giorni il concetto di era di fondamentale importanza: ax
è l'accumulatore x86 a 16 bit. Tutti i calcoli sono stati accumulati o "accumulati" in questo registro, quindi erano disponibili per tutte le istruzioni. Altri registri di uso generale avevano un intervallo di utilizzo più ristretto.
Poiché le istruzioni erano basate sui byte che si desideravano come pochi byte per rappresentare un'istruzione il più possibile per mantenere rapidamente la decodifica dell'istruzione. Per mantenere il maggior numero di istruzioni il più breve possibile, l'uso dell'accumulatore è centrale.
Su CPU più moderne come i registri Motorola 680x0 più generici hanno più capacità che in precedenza erano il dominio dell'accumulatore. Sulle CPU RISC tutti i registri sono flessibili come gli accumulatori. Ho sentito che nella modalità a 64 bit il set di istruzioni x86/amd64 corrente è ora molto meno limitato.
Quando ho. prima leggi la tua risposta non l'ho fatto vi assicuro, ma nella documentazione NASM, abbastanza sicuro, nessuna istruzione reg_dseg, reg_cseg. – samoz
Questo non è il motivo, è il risultato. –
Cosa? Non capisco cosa intendi per Neil. – samoz