Home
Accesso / Registrazione
 di 

Corso di programmazione per microcontrollori Zilog Z8. Quarta puntata - 5

microcontrollori Zilog Z8

All’interno di ciascuna area un registro viene identificato come R0, R1, R2 ... fino a R15. Ovviamente, bisogna specificare al micro in quale delle nove aree si trova il registro con cui stiamo lavorando. Per fare ciò occorre utilizzare un particolare registro denominato Register Pointer (Registro Puntatore).

z8_mappa_memoria_registri

Quest’ultimo, indicato dalla sigla RP e caratterizzato dall’indirizzo 253, consente, tramite i quattro bit più pesanti, di selezionare una delle nove aree disponibili. Per assegnare al Register Pointer un certo valore occorre utilizzare una specifica istruzione denominata SRP (Set Register Pointer). Ad esempio, l’istruzione SRP #%10 permette di caricare automaticamente nel registro RP il valore esadecimale 10. Se non fosse stato utilizzato il simbolo di esadecimale, cioè il simbolo % prima del numero 10, questo sarebbe stato interpretato come un numero decimale. Da ora in avanti tutti i registri a cui faremo riferimento come R1, R2 ... R15 apparterranno all’area di lavoro che inizia dal numero esadecimale 10.

Lavoreremo quindi con i registri che vanno dal registro numero 16 (esadecimale 10) fino al registro 31 (esadecimale 1F). Se dopo l’istruzione SRP #%10 digitiamo la seguente istruzione: LD R4,#35 otteniamo il caricamento nel registro numero 4 (del banco di lavoro 1) del numero decimale 35. Il registro numero 4 del banco di lavoro 1 corrisponde al registro numero 20 (14 esadecimale). Se ora scriviamo la sequenza di istruzioni: SRP #%20 LD R4,#35 otteniamo, questa volta, il caricamento del numero 35 nel registro numero 4 del secondo banco di lavoro, ovvero nel registro numero 36.

IL REGISTER POINTER

A questo punto sorge spontanea una domanda: perché utilizzare un sistema apparentemente più complicato quando è possibile specificare direttamente l’indirizzo del registro? La risposta la possiamo trovare confrontando due operazioni che producono lo stesso identico risultato. Supponiamo, ad esempio, che il Registro Puntatore punti al banco di registri numero 1. Questo significa che i registri di lavoro all’interno di questa area avranno gli indirizzi riportati a pagina 32. Quindi il nostro registro di lavoro (definito per l’area di memoria 0001 ovvero per il primo banco di lavoro) R5 è il registro numero 21, così come il registro R10 è il registro di indirizzo 26. Supponiamo ora di dover caricare il contenuto del registro 26 nel registro 21. Sappiamo che l’ istruzione che ci permettere di fare ciò è l’istruzione LD.

Di conseguenza sarà possibile scrivere due diverse istruzioni che danno però luogo allo stesso risultato. Le istruzioni sono: LD 21,26 (carica nel registro 21 il contenuto del registro 26), oppure nella seconda ipotesi: LD R5,R10 (carica nel registro di lavoro R5 il contenuto del registro di lavoro R10). Tra queste due istruzioni esistono due sostanziali differenze. La prima istruzione viene tradotta dall’assemblatore con tre byte, uno per specificare il codice operativo, uno per contenere l’indirizzo del registro sorgente (il numero 26) ed uno per contenere l’indirizzo del registro destinazione (il numero 21).

Il kit è disponibile da Futura Elettronica

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 18 utenti e 60 visitatori collegati.

Ultimi Commenti