C64 Bedtime Coding (ITA) – I Registri della CPU (#03)

(Articolo di Phaze101)

 I Registri della CPU

I registri del 6510

Nella puntata precedente abbiamo visto che la CPU usa dei propri Registri, che non sono altro che locazioni di memoria usate dalla CPU stessa per eseguire le sue funzioni.

Il 6510 ha tre Registri, chiamati A (abbreviazione di accumulatore), X e Y. Esiste anche un registro di stato “Status Register(SR)” ed un registro “Program Counter (PC)” oltre ovviamente al contatore dello stack, “Stack Pointer  (SP)”.

L’accumulatore (A)

E’ usato per memorizzare numeri ad 8 bit da 0 a 255 (o $FF). Vi si possono caricare valori della memoria, o direttamente indicando un valore. Possiamo anche trasferire il valore dell’Accumulatore in un indirizzo di memoria.

E’ l’unico registro che può essere usato per operazione aritmetiche, come l’addizione e la sottrazione.

I Registri X e Y

Questi registri sono in un certo qual modo identici all’accumulatore. Possono memorizzare un valore ad 8 bit. E’ anche possibile spostare un valore dalla memoria dei registri, o indicare direttamente un valore, ed infine copiare i loro valori in una locazione di memoria.

Una funzione molto potente di questi registri, che verrà descritta più avanti quando affronteremo le modalità di indirizzamento, è quella che consente di usarli come indici.

Il registro di Stato (SR)

Il registro di stato contiene una serie di flag (bit) che avranno valore 0 o 1 a seconda delle operazioni che la CPU sta facendo, ed è lungo 8 bit.

Ad esempio quando l’operazione ha come risultato zero, viene alzato il flag Zero.

Ecco la lista di questi flag.

 

Lo Stack Pointer (SP)

Questo registro controlla il puntatore allo stack. Questo può essere paragonato ad una pila di piatti. I piatti in cima sono sempre quelli presi per primi, e se vi aggiungo un piatto, andrà sempre messo in cima. Questo vuol dire che lo stack è una coda di tipo LIFO (Last In First Out)

Lo stack è usato dal Sistema per tenere traccia degli indirizzi di ritorno delle routine in linguaggio macchina, delle chiamate agli interrupt, ed è anche usato per salvare valori nei registri interni (A,X,Y). Lo stack si trova nella prima pagina della memoria e sul suo range di indirizzamento parte da $100 (256) e arriva fino a $1FF (511). Ogni pagina ha 256 byte per cui $100 è la pagina uno. Page Zero, la pagina zero, parte da 0 fino a 255 ($FF)

Il primo valore messo nello stack sarà nella locazione di memoria $1FF (511) mentre i valori immessi successivamente verranno inseriti negli indirizzi sottostanti fino alla locazione $100 (256), decrementando di conseguenza lo stack pointer.

Cosa succede se lo stack si riempie e come gestire l’eventualità? Per ora ci basti ricordare che può contenere solo 256 numeri e se ne mettiamo di più il sistema andrà in crash.

Sia il Basic che il Kermal fanno grande uso dello stack.

Program counter (PC)

Il program counter è un registro a 16 bit che può contenere valori da 0 a 65536. Il suo compito è quello di indicare alla CPU dove si trova l’istruzione corrente. Questo registro non può essere letto direttamente.

Se l’istruzione è un salto (condizionato o meno), viene caricato il nuovo valore indicato in PC con trasferendo quindi di fatto il controllo all’istruzione in quella locazione di memoria.

Diagramma dei Registri della CPU

La prossima settimana

Questo è tutto per il momento. Spero che vi sia piaciuto leggerlo. Come sempre, se avete domande, inviatemi un messaggio. Il prossimo articolo è troppo lungo e dovrò dividerlo. Per questa volta vi terrò un po’ in sospeso.

Vorrei ringraziare tutti coloro che mi hanno scritto ed hanno espresso il loro apprezzamento. Spero di essere in grado di mantenere alto il livello dopo i vostri complimenti 😊

Dopo i prossimi 2 articoli le cose dovrebbero iniziare a cambiare e quindi vale la pena imparare la teoria.

Coding is fun  😊

 

Tutti Gli Articoli

Italian

Articolo 3
https://sys64738.org/2019/03/c64-bedtime-coding-ita-i-registri-della-cpu-03/

Articolo 2
https://sys64738.org/2019/03/c64-bedtime-coding-ita-linguaggio-macchina-02/

Articolo 1
https://sys64738.org/2019/03/c64-bedtime-coding-introduzione-e-basi-01/

English

Article 3
https://sys64738.org/2019/03/c64-bedtime-coding-eng-the-cpu-registers-03/

Article 2
https://sys64738.org/2019/03/c64-bedtime-coding-eng-machine-language-02/

Article 1
https://sys64738.org/2019/03/c64-bedtime-coding-introduction-basics-01/

 

Have your say