Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

Registri Base - Accumulatore

informatica



Registri Base

Accumulatore

Se avete lavorato con un qualsiasi altro linguaggio assembler il concetto di registro Accumulatore vi sara' gia' familiare.

L'Accumulatore, come suggerisce il nome, e' usato come registro generale per accumulare i ris 454e41e ultati di un gran numero di istruzioni. Esso puo' contenere un valore di 8-bit (1-byte) ed e' il registro piu' versatile tra quelli dell'8051 per l'elevato numero di istruzioni che lo usano. Piu' della meta' delle 255 istruzioni dell'8051 lo usano o lo manipolano in qualche maniera.

Per esempio se volete addizionare il numero 10 al numero 20, il risultato dell'addizione verra' memorizzato nell'accumulatore. Una volta che avete il risultato nell'accumulatore il processo puo' continuare e il dato puo' eventualmente essere spostato in un'altro registro oppure nella memoria.

I registri "R"


I registri "R" sono un set di 8 registri denominati: R0, R1 etc. fino a R7.

Essi sono usati come registri ausiliari in molte operazioni. Per continuare con l'esempio precedente nel quale state addizionando 10 a 20. Supponiamo che il valore iniziale 10 risieda nell'accumulatore mentre il valore 20 risieda nel registro R4. Per eseguire l'operazione di addizione dovreste usare la seguente istruzione:



ADD A,R4

Al termine dell'istruzione l'Accumulatore conterra' il valore 30.

Possiamo dire che sono dei registri ausiliari o "di aiuto" molto importanti. L'Accumulatore da solo sarebbe poco utile se non avesse il supporto di questi registri.

I registri "R" sono anche usati per memorizzare dei valori temporanei. Per esempio, supponiamo vogliate addizionare il valore di R1 con R2 e sottrarre il risultato alla somma di R3 con R4. Una possibile strada per far cio' potrebbe essere:

MOV A,R3 ; Sposta il valore di R3 nell'accumulatore
ADD A,R4 ; Addizionalo al valore di R4
MOV R5,A ; Salva il risultato temporaneamente in R5
MOV A,R1 ; Sposta il valore di R1 nell'accumulatore
ADD A,R2 ; Addizionalo al valore di R1
SUBB A,R5 ; Sottrai il risultato al valore di R5 (che contiene R3 + R4)

Come potete osservare, abbiamo usato R5 per memorizzare temporaneamente la somma di R3 con R4. Certamente non e' questo il modo piu' efficiente per calcolare (R1+R2) - (R3 +R4) ma tale esempio ci e' servito per illustrare l'uso dei registri "R" come memoria temporanea.

Il registro "B"

Il registro "B" e' molto simile all'Accumulatore nel senso che esso puo' memorizzare una parola di 8-bit.

Esso e' usato soltanto in due istruzioni dell'8051: MUL AB e DIV AB. Quindi se volete moltiplicare o dividere facilmente e velocemente un numero con un altro, potete memorizzare il secondo numero nel registro "B" ed usare queste due istruzioni.

Oltre che alle due istruzioni MUL e DIV, il registro "B" e' spesso usato come un altro registro temporaneo come se fosse il nono registro "R".

Data Pointer (DPTR)

Il registro Data Pointer (DPTR) e' un registro dell'8051 accessibile soltanto a 16-bit. Gli altri registri A, B ed R sono tutti ad un singlolo byte.

Il DPTR, come suggerisce il nome (Puntatore dati) e' usato per iindirizzare dei dati. Esso e' usato da molti comandi che richiedono all'8051 l'accesso alla memoria esterna. Infatti tutte le volte che l'8051 deve indirizzare un byte della memoria esterna usa l'indirizzo contenuto nel registro DPTR.

Anche se lo scopo iniziale del DPTR e' quello di indirizzare la memoria esterna, molti programmatori sfruttano il fatto che esso sia l'unico vero registro a 16 bit e lo usano spesso per memorizzare valori a 2-byte. Questo modo di usarlo, quindi, non ha nulla a che fare con le locazioni di memoria.



Program Counter (PC)

Il Program Counter (PC - Contatore di Programma) e' un indirizzo a 2-bytes che punta alla locazione di memoria programma dove l'8051 andra' a prendere la prossima istruzione da eseguire. Allo startup, l'8051 inizializza PC sempre al valore 0000h e lo incrementa ogni volta che un istruzione viene eseguita. Bisogna pero' notare che non sempre il PC viene incrementato di uno. Poiche' alcune istruzioni richiedono 2 o 3 byte il PC verra' incrementato di 2 o di 3 opportunamente.

Il Program Counter e' speciale, nel senso che non esiste una maniera diretta per modificarne il valore. Non e' possibile, cioe' eseguire un'operazione del tipo PC=2430h. L'unica maniera alternativa e' quella di eseguire: LJMP 2340h.

E' inoltre interessante notare che mentre e' possibile cambiare il valore del PC (magari eseguendo un'istruzione di salto) sembrerebbe impossibile leggere il valore del Program Counter. Questo, pero', non e' completamente vero. In realta' esiste un trucco per determinare quale sia il valore attuale del PC. Questo trucco verra' svelato in un capitolo successivo.

Stack Pointer (SP)

Lo Stack Pointer (SP - Puntatore dello Stack), come tutti gli altri regitri esclusi DPTR e PC, puo' contenere un valore a 8-bit. Lo stack pointer e' usato per indicare la cima dello stack (catasta).

Quando effettuate il push di un valore nello stack (lo accatastate), l'8051 prima incrementa il valore di SP e poi memorizza il valore nella locazione di memoria puntata da esso.

Quando effettuate il pop di un valore dallo stack (lo togliete dalla catasta), l'8051 prende il valore puntato dallo Stack Pointer e dopo decrementa il suo valore.

L' ordine con cui sono effettuate le operazioni di stack e' importante. Allo startup, l'8051 inizializza automaticamente SP al valore 07h. Se immediatamente richiedete un push, il valore verra' memorizzato all'indirizzo 08h della RAM interna. Cio' e' giustificato da quello che avevano detto precedentemente. Prima viene incrementato SP (da 07h a 08h) e poi viene memorizzato il valore nella locazione di memoria all'indirizzo (08h).

La modifica di SP e' effettuata in maniera automatica dall'8051 quando esegue le sei istruzioni seguenti: PUSH, POP, ACALL, LCALL, RET, e RETI. E' inoltre usato nelle operazioni di interrupt (di questo parleremo in seguito, per il momento non preoccupatevi!).







Privacy




Articolo informazione


Hits: 4822
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024