[Search] [Contact Us]
|
|||||||||
Sponsor di 8052.it ![]() µC Family FAQ Strumenti di Sviluppo Libri Bookmarks Mailing List Forum Download Area Prodotti Il sito 8052.it e' in continua evoluzione: se avete suggerimenti o richieste contattateci |
Corso 8051 CAPITOLO 3 - Registri Base 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 risultati 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.
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,R4Al 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'accumulatoreCome 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" 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". 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.
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. 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!). ![]() < Registri speciali > Modi d'indirizzamento (C)Copyright 1997, 1998 by Vault Information
Services. All
Rights Reserved.
Le informazioni sono fornite senza alcuna garanzia (vedi dettagli) Contattate l'autore Craig Steiner (presso 8052.com) per l'uso e/o il permesso di divulgazione di questo corso. Traduzione italiana di: Sergio Salvitti |
||||||||
|
Registri |
Site made with Sworg - Simple Web Organizer
|
||||||||