(L25) Assembler intro-AssemblerM68k-intro

Scarica in formato pdf o txt
Scarica in formato pdf o txt
Sei sulla pagina 1di 17

Corso di Calcolatori Elettronici I

A.A. 2019-2020

Introduzione alla linguaggio


assembly del 68000
Lezione 25

Prof. Roberto Pietrantuono

Università degli Studi di Napoli Federico II


Dipartimento di Ingegneria Elettrica e delle
Tecnologie dell'Informazione
C.d.L. di Ingegneria Informatica
Modello di programmazione del MC68000
(1)
31 16 15 8 7 0
D0
D1
D2
D3
D4
D5
D6
D7
A0
A1
A2
A3
A4
A5
A6
A7
PC
T S I2 I1 I0 X N Z V C SR
Modello di programmazione del MC68000
(2)
• 8 registri dato Di utilizzabili per dati generici
o possono essere usati tutti i 32 bit dei registri, o solo i 16 meno
significativi (lasciando inalterati gli altri), o solo gli 8 bit meno
significativi (lasciando inalterati gli altri)

• 8 registri indirizzo Ai utilizzati per contenere valori di indirizzi in


memoria
o possono essere utilizzati a 32 o a 16 bit
• Program counter
o contenente l’indirizzo della prossima istruzione da eseguire
• Registro di stato
o contenente informazioni sulle modalità di funzionamento e sullo
stato del processore
68000: Status register
• 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
68000: Esempio di programma assembly

PLC contenuto label opcode operands comments


00000000 1 * Programma per sommare i primi 17 interi
00000000 2 *
00008000 3 ORG $8000
00008000 4279 00008032 4 START CLR.W SUM
00008006 3039 00008034 5 MOVE.W ICNT,D0
0000800C 33C0 00008030 6 ALOOP MOVE.W D0,CNT
00008012 D079 00008032 7 ADD.W SUM,D0
00008018 33C0 00008032 8 MOVE.W D0,SUM
0000801E 3039 00008030 9 MOVE.W CNT,D0
00008024 0640 FFFF 10 ADD.W #-1,D0
00008028 66E2 11 BNE ALOOP
0000802A 4EF9 00008008 12 JMP SYSA *restart
00008030 =00008000 13 SYSA EQU $8000
00008030 14 CNT DS.W 1
00008032 15 SUM DS.W 1
00008034 =00000011 16 IVAL EQU 17
00008034 0011 17 ICNT DC.W IVAL

Symbol Table
ALOOP 800C CNT 8030 IVAL 0011 SYSA 8100
START 8000 SUM 8032 ICNT 8034
Formato del codice sorgente
• Una linea di codice sorgente Assembly è costituita da
quattro campi:
– LABEL (opzioanle)
Ø Stringa alfanumerica
Ø Definisce un nome simbolico per il corrispondente indirizzo
– Carattere TAB + OPCODE
Ø Codice mnemonico o pseudo-operatore
Ø Determina la generazione di un’istruzione in linguaggio macchina
o la modifica del valore corrente del Program Location Counter
– Carattere TAB + OPERANDI
Ø Oggetti dell’azione specificata dall’OPCODE
Ø Variano a seconda dell’OPCODE e del modo di indirizzamento
– Carattere TAB + COMMENTI (opzionale)
Ø Testo arbitrario inserito dal programmatore
Convenzioni (M68000)
• Gli spazi bianchi tra i diversi campi fungono esclusivamente da
separatori (vengono ignorati dall’assemblatore)

• Una linea che inizi con un asterisco (*) è una linea di commento

• Nelle espressioni assembly, gli argomenti di tipo numerico si intendono


espressi
– In notazione decimale, se non diversamente specificato
– In notazione esadecimale, se preceduti dal simbolo “$”

• Un valore numerico costante preceduto dal simbolo % si intende in


binario (es.: MOVE #%01000001,D0 equivale a: MOVE #65,D0)

• Nell’indicazione degli operandi, il simbolo “#” denota un indirizzamento


immediato
Lunghezza degli operandi

• La maggior parte delle istruzioni può operare su operandi di lunghezza


configurabile:
• 8 bit (Byte)
• 16 bit (Word)
• 32 bit (Long word)
• La lunghezza degli operandi è controllata tramite un suffisso aggiunto
alle istruzioni: .B, .W, o .L
• se il suffisso è omesso, si intende implicitamente .W

• A seconda del suffisso, vengono influenzate parti diverse dei registri, in


particolare i registri Di:
• gli 8 bit meno significativi (B) del registro
• i 16 bit meno significativi (W) del registro
• tutti i 32 bit (L) del registro
Program Location Counter PLC
Ø E’ una variabile interna dell’assemblatore
Ø Punta alla locazione di memoria in cui andrà caricata – a
run time – l’istruzione assemblata
Ø Viene inizializzato dallo pseudo-operatore “origin” (ORG)
Ø Durante il processo di assemblaggio, il suo valore è
aggiornato sia in funzione degli operatori, sia in funzione
degli pseudo-operatori
Ø E’ possibile, all’interno di un programma, fare riferimento
al suo valore corrente, mediante il simbolo “*”
Pseudo-operatori

• NON sono istruzioni eseguite dal processore


• sono direttive di assemblaggio che regolano il processo di
traduzione del programma assembler in programma eseguibile

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
Sintassi: ORG $HEXADDR (Esempio: ORG $8100)
Lo pseudo-operatore END
• Viene usato per terminare il processo di assemblaggio e saltare
all’entry point del programma
Sintassi: END ENTRYPOINT
Pseudo-operatori

Lo pseudo-operatore EQU
• viene usato per definire una costante testuale usata nel sorgente
assembler in sostituzione di un valore
• Sintassi: LABEL EQU VALUE Esempio: A EQU 5

Lo pseudo-operatore DS (Define Storage)


• Usato per riservare spazio di memoria per contenere una variabile
(ad es. un array) la cui dimensione è specificata come operando
• Sintassi: LABEL DS.W NUMSKIPS
Esempio: A DS.B N oppure A DS.W N oppure A DS.L N
• Incrementa il Program Location Counter (PLC) di N*d
dove: d=1 se .B, d=2 se .W, d=4 se .L
Il simbolo usato come etichetta è l’indirizzo iniziale dell’area di
memoria
Esempio: V DS.W 10 riserva un’area di memoria di 10 word
Pseudo-operatori

Lo pseudo-operatore DC (Define Constant)


• viene usato per inizializzare una variabile con uno o più valori
costanti

• Sintassi: LABEL DC.W VALUE1, VALUE2

• Esempio: A DC.W 10,20,30


inizializza le tre word consecutive a partire da PLC con i valori 10, 20
e 30
Direttiva DC con operandi multipli
Pseudo-operatori
• Se nel campo operandi di una direttiva DC il programmatore inserisce
• Se nel campo operandi di una direttiva DC il programmatore inserisce
una sequenza
una sequenza di valori
di valoriseparati
separati da virgole,l’assemblatore
da virgole, l’assemblatore allocaalloca
per per
ciascuno deidei
ciascuno valori
valorispecificati
specificati un unbyte,
byte,unauna wordword o unao una longword
longword a a
seconda deldel
seconda suffisso
suffissospecificato
specificato aafianco fianco di DC
di DC
• L’assemblatore tratta la direttiva DC senza suffisso come DC.W
• L’assemblatore tratta la direttiva DC senza suffisso come DC.W
• Se il valore corrente di PLC è dispari, con DC.W e DC.L l’assemblatore
• Se il valore
incrementa corrente di PLC è PLC
preventivamente dispari,di con
unoDC.W e DC.L dati allineati al
per ottenere
l’assemblatore
margine di parolaincrementa preventivamente PLC di uno per ottenere
dati allineati al margine di parola
• Esempi:
• Esempi:
ORG $8000
ORG $8000 01 02 03 00 00 01 00 02 00 03
A DC.B 1,2,3
A DC.B 1,2,3 $8000 $8001 $8002 $8003 $8004 $8005 $8006 $8007 $8008 $8009

B DC.W
B DC.W1,2,31,2,3
Direttiva DC con operandi
Pseudo-operatori stringa

Se nel campo
• Se nel operandi di una didirettiva
campo operandi DC DC
una direttiva il programmatore
il programmatore inserisce
inserisce
delle sequenze
delle sequenze di caratteri di caratteri
tra apici, tral’assemblatore
apici, l’assemblatore sostituisceaiai
sostituisce
caratteri i rispettivi codici ASCII
caratteri i rispettivi codici ASCII
• Esempio:
Esempio:
ORG $800A 41 42 43 00 41 00 42 00 43 00
ORG $800A
C DC.B 'ABC' $800A $800B $800C $800D $800E $800F $8010 $8011 $8012 $8013
C DC.B 'ABC'
D DC.W 'A','B','C'
41 00 00 00 42 00 00 00 00 00
D DC.W 'A','B','C'
E DC.L 'A','B'
$8014 $8015 $8016 $8017 $8018 $8019 $8020 $8021 $8022 $8023
E DC.L 'A','B'
• Per ottenere un’area di memoria allocata con i caratteri di una stringa,
Per ottenere un’area per
un carattere di memoria
byte e con allocata
un carattereconfinale
i caratteri
di codicediASCII
una zero
stringa,
(tappo),
un carattere comeefacon
per byte il compilatore C, si finale
un carattere scrive: di codice ASCII zero
(tappo), come fa il compilatore C, si scrive:
ORG $800A
ORG $800A
S DC.B 'Hello world!',0
S DC.B 'Hello world!',0
Etichette (Label)

• Stringhe di testo arbitrarie (opzionali) anteposte ad una istruzione o


ad un dato all’interno del programma
• Servono a riferirsi al particolare indirizzo che contiene quella
istruzione o dato
• usate per gestire i salti
• usate per gestire variabili
(manipolate nel programma assembler tramite le loro etichette in
maniera simile alle variabili di un linguaggio di alto livello)
• Ad esempio:
• ALOOP è un’etichetta usata per riferirsi all’istruzione MOVE, SUM
è una etichetta usata per gestire una variabile, mentre IVAL è
una costante testuale
ALOOP MOVE.W D0,CNT
ADD.W SUM,D0
… … … …
SUM DS.W 1
IVAL EQU 17
Tabella dei simboli
• Durante il processo di assemblaggio, l’assemblatore mantiene nella
tabella dei simboli le corrispondenze tra simboli e valori
• Un nuovo simbolo viene creato ogni volta che si assegna
un’etichetta ad una istruzione o ad una direttiva DC e DS
• In questi casi, al simbolo viene associato come valore il valore
corrente del Program Location Counter (PLC)

ORG $8100 A DC.W 5 → ad A è associato il valore $00008100


• • Una direttiva EQU, invece, associa al simbolo usato come
etichetta il valore specificato come operando di EQU
X EQU 2 → ad X è associato il valore 2
• Eventuali riferimenti in avanti sono risolti dall’assemblatore facendo
una doppia scansione del codice sorgente (assemblatori a due
passi)
68000: istruzioni base

• CLR: pone il valore 0 nella destinazione


• MOVE: sposta un dato da sorgente a destinazione
• ADD: somma il valore della sorgente alla destinazione
• ADDQ: somma un valore immediato alla destinazione
• SUB: sottrae il valore della sorgente dalla destinazione
• SUBQ: sottrae un immediato dalla destinazione
• CMP: confronta i due operandi
• JMP: salta ad un’istruzione diversa dalla prossima
• Bcc: salta ad un’istruzione diversa dalla prossima se è
vera la condizione specificata dai flag cc

Far riferimento al manuale del processore Motorola 68000 per una


descrizione dettagliata della sintassi e del funzionamento delle istruzioni

Potrebbero piacerti anche