Upload
dangphuc
View
214
Download
0
Embed Size (px)
Citation preview
1/7/2010
1
Architettura dei calcolatori e sistemi operativi
Instruction Set Architecture
Vittorio Zaccaria ‐ Dicembre 2009
Vittorio Zaccaria
Dicembre 2009
Instruction set architectureProgramma
(C, Fortran, C++)
Livello ISAHARDWARE
SOFTWARE
Eseguito da
Vittorio Zaccaria ‐ Dicembre 2009
Processore
1/7/2010
2
Instruction set architecture• Registri e modello di memoria• Istruzioni
– Operazioni– Tipi dei dati delle operazioni– Indirizzamento– Formato in memoria delle istruzioni
• Stato architetturale del processore• Gestione delle eccezioni
Vittorio Zaccaria ‐ Dicembre 2009
• Gestione delle eccezioni• I/O• Gestione della memoria (MMU)
Linguaggio assemblatore
• Anche chiamato assembly
Assembly (file di testo)
Assemblatore (e.g. ‘as’)
‐Codici mnemonici‐Etichette simboliche
Vittorio Zaccaria ‐ Dicembre 2009
Codice oggetto Linguaggio Macchina(Comunemente ‘binario’)
1/7/2010
3
Istruzioni (linguaggio macchina)
• Codice operativo– Semplice operazione– Semplice operazione
– Complesso (aritmetica+diverse op. in memoria)
• Operandi– Registri (impliciti o espliciti)
– Memoria (modalita’ diretta o indiretta)
Vittorio Zaccaria ‐ Dicembre 2009
Architetture stack
Architetture ad accumulatore
0 operandi 1 operando
Architetture CISC/RISC
2 o piu’ operandi
Modello di memoria
• Architettura target: 68000M i i di i bil b t• Memoria indirizzabile a byte:– 24 bit di indirizzo (16MB)– 32 bit di indirizzo per architetture successive (68020)
• Interi rappresentati in complemento a 2 (su 2 4 b )
Vittorio Zaccaria ‐ Dicembre 2009
o 4 bytes)• Operazioni su memoria chiamate anche load (caricamento), store (salvataggio)
1/7/2010
4
Endianess
• Ordinamento dei bytes all’interno di una word
• Supponiamo di scrivere all’indirizzo 0 la parola da 16 bit: AABB (store.w 0xAABB 0)
• Bytes effettivamente scritti:
0 1 2 0 1 2
Vittorio Zaccaria ‐ Dicembre 2009
AA BB … …
0 1 2
Big endian (most significant first)
BB AA … …
0 1 2
Little endian (least significant first)
(INTEL)
Endianess 68K
Vittorio Zaccaria ‐ Dicembre 2009
1/7/2010
5
Registri del processore
• Memorie locali al
n registri di uso generale
byte parola 16 o 32 bit
processore referenziabili direttamente nelle istruzioni in linguaggio
R0
R1
Rn − 1
puntatore alla pila
banco di registri
Vittorio Zaccaria ‐ Dicembre 2009
macchina SP
PC
contatore di programma registri di uso
speciale
informazioni di stato
Registri 68K
Di (0 ≤ i ≤ 7): registri di dato a 8, 16, 32 bit
Ai (0 ≤ i ≤ 7): resgistri di indirizzo a 16, 32 bit
parola byte
parola doppia
31 15 7 0816
registri di dato
D0
D1
D2
D3
D4
D5
L W B MSB LSB
bitPC: Program Counter a 32 bit (24 bit)SP (= A7): Stack Pointer a 16, 32 bitFP (di solito = A6): Frame Pointer(puntatore all’area di attivazione) a 16, 32
bitCCR: Condition Code Register (registro dei
bit di esito ‐ flag) a 8 bitSR St t R i t
puntatore alla pila utente (USP) registro
registri di indirizzo
D6
D7
A0
A1
A2
A3
A4
A5
(FP =) A6
banco di registri
di solito è il registropuntatore ad area
di attivazione
Vittorio Zaccaria ‐ Dicembre 2009
SR: Status Registerregistro di stato (contiene CCR) a16 bit
15 13 10 8 4 0
puntatore alla pila di sistema (SSP) p p ( )
SR
PCregistro
contatore di programma
registro di stato T − bit di tracciaM − bit di modo (U / S)I − bit di livello priorità (I0, I1, I2)
puntatore alla pila SP = A7
X − estensione Z − zero N − negativo V − trabocco C − riporto
bit di esito (o codici di condizione)
CCR (sottoregistro dei bit di esito) 24 bit
7
seleziona traUSP e SSP
1/7/2010
6
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
byte di sistema byte utente (registro CCR, 8 bit)
Status register
C = riporto, carry vale 1 se l'ultima istruzione ha generato riportoV = overflow vale 1 se l'ultima istruzione ha generato un valore non rappresentabileZ = zero vale 1 se l'ultima istruzione ha generato il valore zero
T - S - - I2 I1 I0 - - - X N Z V C
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Vittorio Zaccaria ‐ Dicembre 2009 ‐ 11 ‐
N = negativo vale 1 se l'ultima istruzione ha generato un valore negativoX = “esteso” copia del riporto non cambiata da tutte le istruzioni che cambiano C
T = traccia causa un interrupt dopo ogni istruzione; usato dai debuggerS = system‐mode le istruzioni privilegiate possono essere eseguite solo quando S=1I = livello di abilitazione int. sono abilitati solo gli interrupt > I
Riporto (carry) e overflow
• Si ha overflow quando il risultato corretto dell’addizione eccede il potere didell’addizione eccede il potere di rappresentazione dei bit a disposizione
• Si può avere overflow senza generare un riporto– Capita quando sommiamo due addendi positivi e otteniamo un risultato negativo
Vittorio Zaccaria ‐ Dicembre 2009
• Si può generare un riporto senza overflow– Capita quando due addendi discordi generano un risultato positivo (si provi a sommare +12 e ‐7)
12
1/7/2010
7
Vettore delle eccezioniL’eccezione numero 2 e’ usata da linux per gestire le eccezioni derivate dalla MMU (Page faults)
Vittorio Zaccaria ‐ Dicembre 2009
Vettore delle eccezioni (cont.)
Vittorio Zaccaria ‐ Dicembre 2009
L’eccezione numero 32 e’ usata da Linux per le system calls
1/7/2010
8
Istruzioni macchina
Vittorio Zaccaria ‐ Dicembre 2009
Istruzioni trattate nel corso
• Sottoinsieme del linguaggio M68000 con t tt i ti hqueste caratteristiche:
– funzionalmente completo
– pochi codici mnemonici
– indirizzamento ortogonale, per quanto possibile
Vittorio Zaccaria ‐ Dicembre 2009
possibile
– anche istruzioni privilegiate
1/7/2010
9
Categorie di istruzioni
• Trasferimento da e verso memoria
• Aritmetico‐logiche
• Salti (condizionati e non)
• I/O
• Istruzioni speciali (controllo del processore)
Vittorio Zaccaria ‐ Dicembre 2009
Tipi di dato
• Formato dei dati trattato dalle operazioni:
• Numerico:– Interi (tipicamente in complemento a 2)
– Floating point
• Indirizzi
B t ( h tt i)
Vittorio Zaccaria ‐ Dicembre 2009
• Byte (anche caratteri)
1/7/2010
10
Formato dell’istruzione
• Suddivisione della codifica in memoria della istruzione che specifica:istruzione che specifica:– Il codice operativo – Indirizzi degli operandi sia in ingresso che in uscita
• L’ISA deve specificare anche i side‐effects d ll’i t i ( d ff tti CCR)
Vittorio Zaccaria ‐ Dicembre 2009
dell’istruzione (ad es. effetti su CCR)• Istruzioni a lunghezza fissa (e.g. 32 bit) o variabile.
(68K) Suffissi per le istruzioni• Indica quanti bit usare per gli operandi• .B = byte = 8 bit, i meno significativi
W d 16 bit i i ifi ti i (d f lt)• .W = word = 16 bit, i meno significativi (default)• .L = long word = 32 bit
MOVE.L #$12345678, D1CLR D0MOVE.B D1, D0 // D0 contiene $00000078 CLR D0
1 0 // 0 i $00005678
Vittorio Zaccaria ‐ Dicembre 2009
MOVE.W D1, D0 // D0 contiene $00005678 CLR D0MOVE.L D1, D0 // D0 contiene $12345678
1/7/2010
11
Modalita’ di indirizzamento
Vittorio Zaccaria ‐ Dicembre 2009
Cosa e’ una modalita’ di indirizzamento
• Specifica come accedere all’operando.
• E’ derivabile dalla codifica dell’istruzione in linguaggio macchina
• L’operando puo’ essere acceduto:– specificando direttamente il valore dell’operando– specificando un registro che contiene l’operando
Vittorio Zaccaria ‐ Dicembre 2009
specificando un registro che contiene l operando– specificando come ottenere l’indirizzo effettivo in memoria dell’operando
1/7/2010
12
Modalita’ di indirizzamento per 68K
• Modalità di indirizzamento:– dati
– istruzioni (destinazioni di salto)
• 68000 ha:– 8 modi indirizzamento di dati
– 4 modi di indirizzamento di istruzioni
Vittorio Zaccaria ‐ Dicembre 2009
– 4 modi di indirizzamento di istruzioni
Ortogonalita’
• Istruzione completamente ortogonale: gli operandi possono assumere tutti o quasi i modi dipossono assumere tutti o quasi i modi di indirizzamento indipendentemente l’uno dall’altro.
• Istruzione semi‐ortogonale: un sottoinsieme degli operandi sono bloccati ad un singolo modo di indirizzamento.
Vittorio Zaccaria ‐ Dicembre 2009
• Istruzione non ortogonale: l’operando puo’ essere acceduto con un singola modalita’ di indirizzamento.
1/7/2010
13
Dati ‐ Indirizzamento immediato
• Il valore dell’operando è specificato nella difi bi i d ll’ i t icodifica binaria dell’ istruzione:
MOVE.L #$12345678, D1
Vittorio Zaccaria ‐ Dicembre 2009
• con costante a 8, 16, 32 bit, specificata in decimale, esadecimale (prefisso $)
Dati ‐ Indirizzamento a registro
• Anche detto indirizzamento diretto
• Specifica direttamente il registro che contiene il valore dell’operando:
MOVE.L D0, D1 MOVE L A0 D1
D1 <= [D0]D1 <= [A0]
Vittorio Zaccaria ‐ Dicembre 2009
MOVE.L A0, D1 D1 <= [A0]
1/7/2010
14
Dati ‐ Indirizzamento indiretto (da registro)
• L’operando è in memoria. Viene specificato l i t i d l’i di iquale registro possiede l’indirizzo
dell’operando:
• l’istruzione specifica quale registro di indirizzo contiene l’indirizzo dell’operando in memoria
Vittorio Zaccaria ‐ Dicembre 2009
MOVE.L (A0), D1 D1 <= [[A0]]
Dati ‐ Indiretto con post‐incremento
• Come il precedente, ma dopo aver utilizzato l’indirizzo, l’istruzione incrementa il valore del registro di 1, 2 o 4 a seconda
D1 <= [[A0]]
g ,della dimensione dell’operando:
MOVE.L (A0)+, D1
Vittorio Zaccaria ‐ Dicembre 2009
D1 <= [[A0]]A0 <= [A0]+4
1/7/2010
15
Dati ‐ Indiretto con pre‐decremento
• Come il precedente, ma dopo aver utilizzato l’indirizzo, l’istruzione incrementa il valore del registro di 1, 2 o 4 a seconda g ,della dimensione dell’operando:
MOVE.L -(A0), D1
A0 <= [A0] - 4
Vittorio Zaccaria ‐ Dicembre 2009
A0 <= [A0] - 4 D1 <= [[A0]]
Dati ‐ Indiretto con indice e spiazzamento
• Operando in memoria. Indirizzo somma di un i t (i di ) i tregistro (indice) e un spiazzamento
(specificato nell’istruzione)
• Offset e’ 16 bit (dotato di segno in complemento a 2) specificato nell’istruzione:
Vittorio Zaccaria ‐ Dicembre 2009
complemento a 2) specificato nell istruzione:
MOVE.L 12(A0), D1 D1 <= [12+[A0]]
1/7/2010
16
Dati ‐ Base, indice e spiazzamento
• Come precedente, ma l’indirizzo dell’operando i i è l di i t (i di )in memoria è la somma di un registro (indice), un indirizzo scalato contenuto in un registro (Di o Ai) e uno spiazzamento a 8 bit.
MOVE L 4(A0 D0 W) D1
Vittorio Zaccaria ‐ Dicembre 2009
MOVE.L 4(A0,D0.W), D1
D1 <= [4+[A0]+[D0.W]]
Dati ‐ Assoluto
• Operando in memoria. L’indirizzo è un valore a 16 32 bit ifi t ll’i t i16 o 32 bit specificato nell’istruzione:
MOVE $1234, D1
D1 <= [$1234]
Vittorio Zaccaria ‐ Dicembre 2009
D1 < [$1234]
1/7/2010
17
Istruzioni – Indiretto da registro
• l’istruzione specifica quale registro di indirizzo ti l’i di i d i i PCcontiene l’indirizzo da caricare in PC:
JMP (A0)
PC <= [A0]
Vittorio Zaccaria ‐ Dicembre 2009
PC < [A0]
Istruzioni – Indiretto, relativo a PC
• l’istruzione specifica quale registro di indirizzo contiene l’indirizzo da caricare in PC:contiene l indirizzo da caricare in PC:
JMP -48(PC)
• In assembly (ove si possono specificare etichette a
PC <= -48 + [PC]
Vittorio Zaccaria ‐ Dicembre 2009
particolari indirizzi):
JMP ETICHETTA PC <= sp. ETICHETTA+ [PC]
1/7/2010
18
Istruzioni – relativo a PC con base
• Identico a base, indice e spiazzamento (8 bit, l2) I di ’ PCcpl2). Indice e’ PC
JMP -48(PC, A0.L)
PC <= -48 + [PC] + A0.L
Vittorio Zaccaria ‐ Dicembre 2009
JMP CONTINUA(A0)
PC <= SP. CONTINUA + [PC] + A0.L
Istruzioni – assoluto
• Si specifica l’indirizzo assoluto (.W, .L). Non i l l t i tviene calcolata nessuno spiazzamento
JSR INDIRIZZO.L
PC <= INDIRIZZO.L
Vittorio Zaccaria ‐ Dicembre 2009
1/7/2010
19
Istruzioni di trasferimento
Vittorio Zaccaria ‐ Dicembre 2009
Trasferimento ‐Move
• Copia src in dest. Aggiorna bit di esito (N,Z) l CCRnel CCR:
MOVE src, dest
• Copia src in dest (no A7). NON aggiorna bit di esito nel CCR:
Vittorio Zaccaria ‐ Dicembre 2009
esito nel CCR: MOVEA src, dest
1/7/2010
20
Uso della pila
• Lo stack pointer è conservato nel registro A7
• 2 pile (user e system mode) a seconda del flag S nello status register
• Push di D0O 0 ( 7)
Vittorio Zaccaria ‐ Dicembre 2009
MOVE.W D0, -(A7)
• Pop di D0MOVE.W (A7)+, D0
Trasferimento – Multiple Move
• copia il contenuto di un blocco di registri In imemoria.
MOVEM D1-D3/A0, -(SP)
MOVEM (SP)+, D1-D3/A0
Vittorio Zaccaria ‐ Dicembre 2009
• N.b. SP=A7
1/7/2010
21
Aritmetica e Logica
Vittorio Zaccaria ‐ Dicembre 2009
Istruzioni aritmetiche‐logiche• ADD/SUB/AND/OR/CMP: semiortogonalità (s1 o s2 devono essere registri
dati)
ADD s1, s2
• ADDI/SUBI/ANDI/ORI/CMPI: semiortogonalità (s1 deve essere costante)
ADDI s1, s2
Vittorio Zaccaria ‐ Dicembre 2009
• ADDA/SUBA/CMPA: semiortogonalità (s1 qualsiasi, s2 registro inidirizzo Ai)
ADDA s1, s2
‐ 42 ‐
1/7/2010
22
Shift aritmetico e logico (registri)
• Shift aritmetico: ASL
• Shift logico:
ASR
ASL D1, D3 ‐> shift aritmetico D3 a sinistra di D1 posizioni
Vittorio Zaccaria ‐ Dicembre 2009
LSL
LSR
LSL D1, D3 ‐> shiftlogico D3 a sinistra di D1 posizioni
Rotate
• Rotate: ROL
ROR
ROL D1, D3 ‐> ruota D3 a sinistra di D1 posizioni
Vittorio Zaccaria ‐ Dicembre 2009
1/7/2010
23
Istruzioni di salto
• Tipicamente le istruzioni vengono eseguite in sequenzasequenza.
• Possiamo avere 3 casi di deviazione del flusso di controllo:– Salto incondizionato (jump o goto)– Salto condizionato (se una condizione e’ verificata salta altrimenti continua in sequenza)
Vittorio Zaccaria ‐ Dicembre 2009
salta, altrimenti continua in sequenza)– Salta a sub‐routine (salto incondizionato con salvataggio su pila del PC di ritorno)
Istruzioni di salto
• Due sotto‐categorie:
– branch: solo con modalità di indirizzamento relativo a contatore di programma (Bcc, DBcc e BRA)
– jump: con tutte le modalità di indirizzamento
Vittorio Zaccaria ‐ Dicembre 2009
previste per le istruzioni (JMP e JSR)
1/7/2010
24
Salti condizionati: ccsuffisso cc nome (ing.) significato simbolo
T true condizione sempre verificata
F false condizione mai verificata
CC carry clear non c’è riporto
CS carry set c’è riporto
NE not equal diversità A ≠ B
EQ equal uguaglianza A = B
VC overflow clear non c’è overflow
VS overflow set c’è overflow
Vittorio Zaccaria ‐ Dicembre 2009
PL plus positività o nullità A ≥ 0
MI minus negatività (nullità esclusa) A < 0
GE greater or equal maggioranza in senso lato A ≥ B
LE less or equal minoranza in senso lato A ≤ B
GT greater maggioranza in senso stretto A > B
LT less minoranza in senso stretto A < B
Altre istruzioni di controllo e privilegiate
Vittorio Zaccaria ‐ Dicembre 2009
1/7/2010
25
Altre istruzioni di controlloin modalita’ utente
• NOP (No operation)Stack frame di f(x,y),
d ( )• LINK A6, # $8
A6=FPOld Frame Pointer
loc. var
loc. var
invocata da g(w,z)
Vittorio Zaccaria ‐ Dicembre 2009
A7=SPy
x
Return PC
….
Altre istruzioni di controlloin modalita’ utente
• UNLINK A6Stack frame di f(x,y),
d ( )
A6=FPOld Frame Pointer
loc. var
loc. var
invocata da g(w,z)
Vittorio Zaccaria ‐ Dicembre 2009
A7=SPy
x
Return PC
….
1/7/2010
26
Altre istruzioni di controllo
• RTS– Copia il top item dello stack nel PC
– Decrementa lo stack
Vittorio Zaccaria ‐ Dicembre 2009
Istruzioni privilegiate
• TRAP #N– Chiamata supervisore
– Copia PC (long) nel SSP
– Copia SR (word) nel SSP
– Setta modo S=1
– Salta al vettore N della tabella di interruzione
Vittorio Zaccaria ‐ Dicembre 2009
Salta al vettore N della tabella di interruzione
• Move da e verso SR e USP. Generazione di eccezione nel caso modo = U
1/7/2010
27
Istruzioni privilegiate
• RTE– Ripristina SR e PC da SSP
– Genera eccezione nel caso modo=U
• RESET– Resetta il processore
• STOP #M
Vittorio Zaccaria ‐ Dicembre 2009
• STOP #M– Setta SR a M (abilita interrupts)
– Idle in attesa di interrupt
come usare SSP e USP
• Vi sono due stack pointer (USP e SSP).
• Il simbolo SP è sinonimo di A7 (SP==A7).– Quando il processore è in modo U, SP==A7==USP
• Ricorda: è vietato utilizzare A7 (SP) come destinazione
– Quando il processore è in modo S, SP==A7==SSP• è consentito utilizzare A7 (SP) come destinazione
Vittorio Zaccaria ‐ Dicembre 2009
( )
• è consentito nominare USP e corrisponde allo user stack pointer anche se il processore e’ in modo S
‐ 54 ‐
1/7/2010
28
istruzioni di ingresso e uscita
• Non ci sono istruzioni specifiche di ingresso e ituscita
• Memory mapped I/O
• I registri di interfaccia sono mappati in memoria
• le istruzioni di ingresso e uscita (in altri
Vittorio Zaccaria ‐ Dicembre 2009
• le istruzioni di ingresso e uscita (in altri processori definite come IN e OUT) in 68000 sono delle MOVE privilegiate
‐ 55 ‐
Lunghezza e formato istruzioni
Vittorio Zaccaria ‐ Dicembre 2009
1/7/2010
29
Architettura 68K considerata• Dimensione word di memoria: 16 bit• Dimensione della costante: 8, 16 o 32 bit• Dimensione dello spiazzamento: 8 o 16 bit• Dimensione dell’indirizzo di memoria: 16 o 32 bit• L’istruzione è sempre costituita da:
– Una word di codice operativo– Una o piu’ “word aggiuntive o di estensione” (per costante, indirizzo o spiazzamento)Di i i 5 d
Vittorio Zaccaria ‐ Dicembre 2009
– Dimensione massima: 5 word• Il codice operativo occupa una frazione breve della word di codice operativo
‐ 57 ‐
Istruzioni di trasferimento
• Formato generale
15 12 11 9 8 6 5 3 2 0
• MOVE.B #$01, Da
• MOVE L #$01234567 Da
codice operativo
modo 1 reg. 1 / aux modo 2 reg. 2 / aux
15 12 11 9 8 6 5 3 2 0
MOVE immed. byte di registro a
#0001 hex
Vittorio Zaccaria ‐ Dicembre 2009
• MOVE.L #$01234567, Da
‐ 58 ‐
15 12 11 9 8 6 5 3 2 0
MOVE immed. long di registro a
#0123 hex
#4567 hex
1/7/2010
30
Istruzioni di trasferimento
• MOVE.X $01 (Aa, Db.Yb), $12 (Ac, Ad.Yd)
15 12 11 9 8 6 5 3 2 0
MOVE.X bas ind spi A di registro c
Yb D b 01 hex
Yd A d 12 hex
Vittorio Zaccaria ‐ Dicembre 2009 ‐ 59 ‐
8 bit
Istruzioni di trasferimento
• MOVE.W #$0123, $456789AB.L
15 12 11 9 8 6 5 3 2 0
MOVE immed. word assoluto long
#0123 hex
4567 hex
89AB hex
Vittorio Zaccaria ‐ Dicembre 2009 ‐ 60 ‐
1/7/2010
31
Istruzioni di controllo
paroladi cod. op
paroleaggiuntive parole
totaliistruzione (all’indirizzo 0) dest( )
JMP (A1) 1 0 1
BRA $12 (PC) 1 0 1
Bcc $12 (PC) 1 0 1
BRA $1234 (PC) 1 1 2
Bcc $1234 (PC) 1 1 2
8 bitspiazzamento
16 bit. di s.1 parola aggiuntiva
Vittorio Zaccaria ‐ Dicembre 2009
JMP $12 (PC, A1) 1 1 2
JMP $1234.W 1 1 2
JMP $12345678.L 1 2 3
‐ 61 ‐
Base + sp. (8 bit) (parola agg.)
Controllo
Vittorio Zaccaria ‐ Dicembre 2009
1/7/2010
32
Riassunto istruzioni
Vittorio Zaccaria ‐ Dicembre 2009
istruzione nome funzionamento in rtl
MOVE.X s, d trasferimento d, esiti ← [s]
MOVEA.Y s, Ai trasferimento Ai ← [s]
MOVEM.Y s, d
trasferimento di blocco
blocco d ← [blocco s]
COME DENOTARE IL BLOCCO DI REGISTRI: esempi
D1-D3/A2-A5vale a dire: D1, D2, D3, A2, A3, A4, A5
D1/D3/A2/A5 vale a dire: D1, D3, A2, A5
D1-D3/A4 vale a dire: D1, D2, D3 e A4
D1-D3/D5-D7/A1 vale a dire: D1, D2, D3, D5, D6, D7, A1
cioè con Da-Db si denota l’intervallo di registri da Da a Db (a e b inclusi), mentre con Da/Db si denotano solo i dueregistri Da e Db; similmente per i registri di indirizzo
COME FUNZIONA MOVEM
d lità di i di i t d t d t MOVEM l l bl di i t i i d l d d t
Vittorio Zaccaria ‐ Dicembre 2009 ‐ 64 ‐
• con modalità di indirizzamento ad autodecremento, MOVEM lavora sul blocco di registri esaminandolo da destra verso sinistra
• l’uso tipico della MOVEM è quello di impilare i registri sullo stack, per salvarne il contenuto in una chiamata a sottoprogramma. Ci deve quindi essere anche la MOVEM “opposta” che spila i registri
MOVEM.Y D1-D3/A4, − (SP) impila il blocco di registri (A4, D3, D2, D1)
MOVEM.Y (SP) +, D1-D3/A4 spila il blocco di registri (D1, D2, D3, A4)
1/7/2010
33
modo
esempio di istruzione funzionamento in RTL
MOVEs, d d ← [s]si immagini di porre d = Dd (0 ≤ d ≤ 7)
di costante (o immediato)
1 MOVE.X #costante, Dd d X ← costante X
di registro
2 MOVE.X Di, DdMOVE.X Ai, Dd
d X ← [Di] Xd X ← [Ai] X
indiretto da registro
3 MOVE.X (Ai), Dd d X ← [[Ai]] X
con autoincremento (indiretto da registro con autoincremento posticipato)
4 MOVE.X (Ai) +, Dd d X ← [[Ai]] Xe poi Ai ← [Ai] + 1 o 2 o 4
con autodecremento (indiretto da registro con autodecremento anticipato)
5 MOVE.X − (Ai), Dd Ai ← [Ai] − 1 o 2 o 4e poi d X ← [[Ai]] X
con indice e spiazzamento
Vittorio Zaccaria ‐ Dicembre 2009
6 MOVE.X spiazz.16 (Ai), Dd d X← [spiazz. 16 + [Ai]] X
con base indice e spiazzamento
7 MOVE.X spiazz. 8 (Ai, Db.Y), DdMOVE.X spiazz. 8 (Ai, Ab.Y), Dd
d X ← [spiazz. 8 + [Ai] + [Db] Y] Xd X← [spiazz. 8 + [Ai] + [Ab] Y] X
assoluto (o diretto)
8 MOVE.X indirizzo.Y, Dd d X ← [indirizzo Y ] X
istruzione nome funzionamento in RTL
ADD.X s, dADDI.X #cost., dADDA.Y s, Ai
addizione (naturale / comp. a due)d X, esiti ← [s] X + [d] Xd X, esiti ← cost. X + [d] XAi Y ← [s] Y + [Ai] Y
SUB.X s, dSUBI.X #cost., dSUBA.Y s, Ai
sottrazione (naturale / comp. a due)d X, esiti ← [d] X − [s] Xd X, esiti ← [d] X − cost. XAi Y ← [Ai] Y − [s] Y
AND.X s, d prodotto logico bit a bit (bitwise)d X, esiti ← [s] X ∧ [d] Xd iti t [d]
,ANDI.X #cost., d prodotto logico bit a bit (bitwise) d X, esiti ← cost. X ∧ [d] X
OR.X s, dORI.X #cost., d somma logica bit a bit (bitwise)
d X, esiti ← [s] X ∨ [d] Xd X, esiti ← cost. X ∨ [d] X
CMP.X s1, s2CMPI.X #cost., s2CMPA.Y s1, Ai
confronto (naturale / comp. a due)esiti ← [s2] X − [s1] Xesiti ← [s2] X − cost. Xesiti ← [Ai] Y − [s1] Y
ASR.X s, dASL.X s, dLSR.X s, dLSL X d
scorrimento aritmetico a dxscorrimento aritmetico a sxscorrimento logico a dx
i t l i
d X, esiti ← scorri arit. [d] X dx [s] pos.d X, esiti ← scorri arit. [d] X sx [s] pos.d X, esiti ← scorri log. [d] X dx [s] pos.
Vittorio Zaccaria ‐ Dicembre 2009
LSL.X s, dROR.X s, dROL.X s, d
scorrimento logico a sxrotazione a dxrotazione a sx
d X, esiti ← scorri log. [d] X sx [s] pos.d X, esiti ← ruota [d] X dx [s] pos.d X, esiti ← ruota [d] X sx [s] pos.
TST.X s esame di parola esiti ← esamina [s] X
NEG.X dNOT.X d
complemento a dueinversione logica (bitwise)
d X, esiti ← complementa a due [d] Xd X, esiti ← inverti logicamente [d] X
CLR.X d azzeramento d X, esiti ← 0
1/7/2010
34
istruzioni di salto ‐ 2
spiazz. etichett
Indirizz
SALTA dest. (Aj)
(PC
)ta
spiazz. (PC, Dq.W/L)etichetta (Dq.W/L)
spiazz. (PC, Aq.W/L)etichetta (Aq.W/L)
o.W/L
JMPJSR dest. = × × × × ×
Vittorio Zaccaria ‐ Dicembre 2009 ‐ 67 ‐
BRABccBSRDBccDBRA
dest. =
vietato
× vietato
istruzioni di salto in dettaglioistruzione nome funzionamento in RTL
JMP dest. salto incondizionato PC ← i.e. dest.
JSR dest. salto (incondizionato) a routineSP ← [SP] − 4[SP] ← [PC]PC ← i.e. dest.
BRAdest.(equivale a BT) salto incondizionato PC ← i.e. dest.
Bcc dest. salto condizionato (cond. cc)
se cc è verificata, alloraPC ← i.e. dest.
altrimentiPC ← [PC] + 4
BSRdest. salto (incondizionato) a routineSP ← [SP] − 4[SP] ← [PC]PC ← i.e. dest.
DBcc dest salto condizionato
se cc non è verificata, alloraDi ← [Di] − 1se [Di] ≠ − 1, allora
PC ← i.e. dest.
Vittorio Zaccaria ‐ Dicembre 2009
DBcc dest. con decremento (cond. cc) altrimentiPC ← [PC] + 4
altrimentiPC ← [PC] + 4
DBRA dest.(equivale a DBF)
salto incondizionatocon decremento
Di ← [Di] − 1se [Di] ≠ − 1, allora
PC ← i.e. dest.altrimenti
PC ← [PC] + 4fine
1/7/2010
35
Altre istruzioni di controlloistruzione nome funzionamento in RTL
NOP nessuna operazione niente
LINK Ai, #cost.(di solito i = , cioè il puntatore all’area di attivazione o frame pointer FP coincide con A6)
collegamento a routine(creazione area di attivazione)
SP ← [SP] − 4[SP] ← [Ai][Ai] ← [SP]SP ← [SP] + cost.
UNLK Ai(idem, di solito i = 6)
rilascio di routine(eliminazione di area di attivazione)
SP ← [Ai]Ai ← [[SP]]SP ← [SP] + 4
RTS rientra da routine PC ← [[SP]]SP [SP] 4
Vittorio Zaccaria ‐ Dicembre 2009
RTS rientra da routine SP ← [SP] + 4
TRAP #cost.(0 ≤ cost. ≤ 15)
chiamata a supervisore(SVC)
SSP ← [SSP] − 4[SSP] ← [PC]SSP ← [SSP] − 2[SSP] ← [SR]bit M di SR ← 1 (attiva modo S)PC ← [base tab. + cost.](cioè PC ← vettore di interruzione)
‐ 69 ‐
istruzioni privilegiateistruzione nome funzionamento in RTL
MOVEs, d trasferimento di registro speciale (SP, SR, USP)
se bit M di SR = 1 (modo S), allorad ← [s]
altrimentiesegui TRAP #cod_istr_priv
se bit M di SR = 1 (modo S) alloraANDI#cost, SR
ORI#cost, SRmascheratura di registro di
stato SR
se bit M di SR = 1 (modo S), alloraSR ← cost. ∧ o ∨ [SR]
altrimentiesegui TRAP #cod_istr_priv
RTErientro da eccezione
(= rientro da interruzione)
se bit M di SR = 1 (modo S), alloraSR ← [[SSP]]SSP← [SSP] + 2PC ← [[SSP]SSP← [SSP] + 4
altrimentiesegui TRAP #cod_istr_priv
bit M di SR 1 ( d S) ll
Vittorio Zaccaria ‐ Dicembre 2009
RESET ripristino del processore
se bit M di SR = 1 (modo S), alloraattiva la linea RESET del bus
altrimentiesegui TRAP #cod_istr_priv
STOP #cost.arresto del processore
e attesa di richiestadi interruzione
se bit M di SR = 1 (modo S), alloraSR ← cost.attendi richiesta interruzionealtrimentiesegui TRAP #cod_istr_priv
1/7/2010
36
direttive all’assemblatore ‐ 1 Etichetta Direttiva Argomento / i Funzionamento
N EQU val
Dichiarazione di simbolo. Definisce l’etichetta N e le assegna il valore val. Non genera codice macchina, si limita a definire il simbolo N. Si possono usare più direttive EQU nel programma, una per ogni simbolo che si desidera definire.
Dichiarazione di indirizzo di impianto del segmento di codice, dati, pila,
INIZIO ORG ind
ecc. Definisce l’etichetta INIZIO, le assegna l’indirizzo ind e specifica che il codice, o i dati, o lo spazio pila, ecc, generato in seguito inizia all’indirizzo ind. Non genera codice macchina, si limita a definire dove impiantare il codice, i dati, la pila, ecc, seguente. Si possono usare più direttive ORG nel programma, una per ogni segmento che si desidera impiantare.
DATO DC.X val1, val2, …
Dichiarazione e inizializzazione di dato. Definisce il simbolo DATO associandolo alla cella di memoria corrente, che inizialmente avrà valore val1; prosegue inizializzando anche le parole successive con val2, …; è consentito anche specificare una stringa (vista come successione di byte) tra apici semplici, per esempio `alfa’. Genera codice sotto forma di dati preinizializzati. Ammette segnale di
Vittorio Zaccaria ‐ Dicembre 2009
dimensione di parola X. Si possono usare più direttive DC.X nel programma.
BLOCCO DS.X dim
Dichiarazione di blocco di dati. Definisce il simbolo BLOCCO associandolo alla cella di memoria corrente, e riserva il blocco di parole di dimensione dim., ma non ne preinizilalizza il contenuto. Ammette segnale di dimensione di parola X. Si possono usare più direttive DS.X nel programma.
FINE END etichetta
Chiusura di programma. Termina il codice del programma e specifica tramite l’argomento etichetta l’indirizzo iniziale da dove partire con l’esecuzione. Non genera codice macchina, si limita a specificare al caricatore l’indirizzo di partenza del programma. Nel programma si può usare una sola direttiva END