# Personal computer/Linguaggio Macchina/DLX

Personal computer
* Storia dei calcolatoriPersonal computer/Storia
* Architettura del calcolatorePersonal computer/Architettura
** CPUPersonal computer/Architettura/CPU
** MemoriaPersonal computer/Architettura/Memoria
** Input/OutputPersonal computer/Architettura/IO
* Linguaggio MacchinaPersonal computer/Linguaggio Macchina
** DLXPersonal computer/Linguaggio Macchina/DLX
*** Operazioni DLXPersonal computer/Linguaggio Macchina/DLX/Operazioni
*** DLX sequenzialePersonal computer/Linguaggio Macchina/DLX/DLX_sequenziale
*** DLX in pipelinePersonal computer/Linguaggio Macchina/DLX/DLX_pipeline
** 8086-8088Personal computer/Linguaggio Macchina/8086
* Mapping di Memorie ed InterfaccePersonal computer/Mapping
** Integrati NotevoliPersonal computer/Mapping#Caratteristiche_e_funzionamento_degli_integrati_notevoli
*** DriverPersonal computer/Mapping/Driver
*** CPUPersonal computer/Mapping/CPU
*** Memoria PrincipalePersonal computer/Mapping/Memorie
*** Interfacce I/OPersonal computer/Mapping/Interfacce
** Gestione delle interfacce tramite programmaPersonal computer/Mapping#Gestione_delle_interfacce_tramite_programma
* Standard alla base di un personal computerPersonal computer/Standard
* Appendici e RiassuntoPersonal computer/Appendici
Modifica il sommario
L'architettura DLX è molto semplice, se confrontata con i moderni processori. È di tipo MIPS, come lo erano i primi Sparc.
L'uso della memoria è molto semplice, in quanto il processore non possiede la Stack, ma un solo registro. Non ha nemmeno Flag, quindi sono necessari a livello di OpCode comandi che permettano di proporre condizioni sull'esecuzione di certi blocchi di codice. Non avendo nessuna struttura esterna per il mantenimento "on the fly" di dati importanti per il processore, non si può fare che un jump alla volta. L'indirizzo di partenza viene infatti salvato nell'ultima casella del registro: R31. (Ovviamente stiamo parlando di un processore Big-Endian, in quanto l'ultima casella è anche la più "grande" in indice).
Le istruzioni sono allineate a multipli di 4.
La memoria è composta da un solo registro con 32 blocchi di 32 bit ciascuno, e il processore richiede l'allineamento. Ha anche 32 registri per numeri in virgola mobile.
Da un punto di vista operativo le operazioni possibili sono di tre tipi, considerando che è un processore a 32 bit fissi, ovvero ogni istruzione è composta da 32 bit, compresi OpCode e tutti gli eventuali argomenti.
Da un punto di vista logico, invece, i tipi di operazioni sono quattro:
* aritmetico logiche
* load e store
* diramazione e salti
* virgola mobile
Ogni registro può essere caricato e memorizzato ad esclusione del solo R0 che ha il valore costante 0.
L'unica modalità d'indirizzamento possibile è quella tramite offset, ma con offset R0 è possibile ottenere l'indirizzamento diretto.
I caricamenti di mezze parole o byte mettono il valore nella parte bassa del registro ed azzerano la parte alta (oppure estendono il bit di segno).
Tutte le operazioni ALU sono di tipo Register-Register. Sono permessi gli operandi immediati, ovvero valori forniti direttamente dal codice Assembler e non presenti in registri o memorie, l'uso è limitato al terzo operando esclipito e viene indicato nello mnemonico dell'operazione con l'aggiunta del suffisso I al mnemonico dell'operazione da eseguire (ad esempio ADDI R3,R3,5)
Il controllo del flusso del programma avviene tramite salti e diramazioni, i primi possono essere con collegamento (memorizzano l'indirizzo dell'istruzione successiva a quella del salto per riprendere il flusso) o meno; le diramazioni sono tutte con condizione da verificare.
* Operazioni DLX
* DLX Sequenziale
* DLX in Pipeline