(U2-02) Lucidi
(U2-02) Lucidi
programmazione Assembly
31 16 15 8 7 0 Registri dati
D0
D1 utilizzabili come dati di
D2
D3 32 bit (Long Word), 16
D4 bit (Word) oppure 8 bit
D5
D6
(byte)
D7
A0 Registri indirizzo
A1
A2 utilizzabili per indirizzi
A3 di 32 bit (Long Word)
A4
A5 oppure 16 bit (Word)
A6
A7
Program counter
PC
X N Z V C SR
Registro di stato
T S I I I
2 1 0
¾ Contiene:
» La interrupt mask (8 livelli)
» I codici di condizione (CC) - oVerflow (V), Zero (Z), Negative (N), Carry
(C), e eXtend (X)
» Altri bit di stato - Trace (T), Supervisor (S)
¾ I Bits 5, 6, 7, 11, 12, e 14 non sono definiti e sono riservati per
espansioni future
Descrizione:
Sposta il contenuto dell’operando sorgente nella locazione del secondo.
L’operando sorgente non è modificato. Influenza i flag di stato come
segue:
XNZVC
- * * 0 0
- ‘-’ : il flag non viene influenzato
- ‘*’ : il flag viene influenzato a seconda del risultato dell’operazione
- ‘0’ o ‘1’: il flag viene viene sempre posto pari a 0 o 1, rispettivamente
Descrizione:
Somma l’operando sorgente con la destinazione, e memorizza il risultato
nella destinazione. Può influenzare tutti i flag di stato:
XNZVC
* * * * *
Descrizione:
Somma l’immediato <literal> alla destinazione.
L’immediato può andare da 1 a 8.
L’operazione può influenzare tutti i flag di stato:
XNZVC
* * * * *
A differenza della ADD, l’immediato “corto” è codificato all’interno dei 16 bit
dell’istruzione e non separatamente in una successiva parola
Descrizione:
Pone il valore 0 all’indirizzo <ea>. Influenza i flag di stato come segue:
XNZVC
- 0 1 0 0
Descrizione:
Sottrae l’operando sorgente (source) dall’operando destinazione
(destination). NON memorizza il risultato: l’unico effetto è influenzare i
seguenti flag di stato sulla base del risultato:
XNZVC
- * * * *
Ad esempio, se i due operandi sono uguali, la sottrazione dà come risultato
zero, ed il flag Z viene posto ad 1. Il flag potrà poi essere letto da
un’istruzione successiva (ad esempio, una BEQ = salta se Z è 1), per
decidere quali istruzioni eseguire come conseguenza del confronto
Descrizione:
Sottrae l’operando sorgente (source) dall’operando destinazione
(destination). NON memorizza il risultato, ma semplicemente influenza i
seguenti flag di stato sulla base del risultato:
XNZVC
- * * * *
L’unico modo di indirizzamento ammissibile è il post-incremento.
L’istruzione è usata per confrontare due array bi byte, word, o long
Ad esempio:
¾ $FF è maggiore di $10 se i numeri sono interpretati come
unsigned, in quanto 255 è maggiore di 16
¾ Tuttavia se i numeri sono interpretati come signed, $FF è
minore di $10, in quanto -1 è minore di 16.
Descrizione:
Scrive il valore dell’operando destinazione nel Program Counter: in altre
parole, realizza un salto incondizionato. Prevede differenti modi di
indirizzamento per specificare l’operando destinazione (a differenza della
Branch che prevede solo indirizzamento relativo). Non influenza i flag di
stato:
XNZVC
- - - - -
Descrizione:
Fintantoché la condizione cc rimane falsa, decrementa il registro Dn, e se questo non
era zero prima del decremento (ovvero se non vale -1) salta all’istruzione a
distanza d. Negli altri casi, passa all’istruzione seguente.
Fornisce un modo sintetico per gestire i cicli, sostituendo con un’unica istruzione il
decremento di un registro di conteggio e la verifica di una condizione normalmente
fatti con istruzioni separate.
Supporta tutti i cc usati in Bcc. Inoltre, ammette anche le forme DBF e DBT (F = false,
e T = true) per ignorare la condizione ed usare solo il registro di conteggio.
Descrizione:
Calcola l’indirizzo effettivo (<ea>) del primo operando,
generalmente espresso in forma simbolica, e lo pone nel
registro indirizzo specificato dal suo secondo operando. Non
influenza i flag di stato:
XNZVC
- - - - -
¾ Lo pseudo-operatore ORG
» Viene usato per inizializzare il Program Location Counter (PLC),
ovvero per indicare a quale indirizzo sarà posta la successiva sezione
di codice o dati
» Esempio: ORG $8100
¾ Lo pseudo-operatore END
» Viene usato per terminare il processo di assemblaggio ed impostare
l’entry point (prima istruzione da eseguire) nel programma
» Esempio: END TARGETLAB
¾ Lo pseudo-operatore DS
» Viene usato per incrementare il Program Location Counter (PLC), in
modo da riservare spazio di memoria per una variabile
» Esempio: LABEL DS.W NUMSKIPS
¾ Lo pseudo-operatore DC
» Viene usato per inizializzare il valore di una variabile
» Esempio: LABEL DC.W VALUE
¾ Lo pseudo-operatore EQU
» Viene usato per definire una costante usata nel sorgente assembler
» Esempio: LABEL EQU VALUE
Symbol Table
ALOOP 800C CNT 8030 IVAL 0011
START 8000 SUM 8032 ICNT 8034
DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli
Programma assemblato in memoria
ORG $8000
68kasm.exe -l filename.a68
Per avviare il
programma, occorre
che il Program Counter
(PC) contenga
l’indirizzo della prima
istruzione. Nel
programma, tale
indirizzo è determinato
dalla direttiva
ORG $8000
Il Program Counter può
essere settato a mano
dal menù Proc_Unit /
Modify Register
CNT DS.W 1
SUM DS.W 1
IVAL EQU 17
ICNT DC.W IVAL
END START
ORG $8000
START MOVEA.L #STRING,A0
MOVE.B #TOKEN,D0
LOOP CMP.B(A0)+,D0
BNE LOOP
FOUND SUBQ.L #1,A0
MOVE.L A0,TOKENA
ORG $8100
TOKEN EQU ':'
STRING DC.B 'QUI QUO:QUA'
TOKENA DS.L 1
ORG $8000
ATTENZIONE:
START MOVEA.L #STRING,A0
In questo semplice
MOVE.B #TOKEN,D0 programma, si assume
LOOP CMP.B(A0)+,D0 che la stringa contenga
sempre il token. Se non è
BNE LOOP così, il ciclo continua
FOUND SUBQ.L #1,A0 all’infinito. In un
programma realmente
MOVE.L A0,TOKENA utilizzabile occorrerebbe
anche controllare se si è
arrivati alla fine della
ORG $8100 stringa prima di ogni
TOKEN EQU ':' iterazione