(L25) Assembler intro-AssemblerM68k-intro
(L25) Assembler intro-AssemblerM68k-intro
(L25) Assembler intro-AssemblerM68k-intro
A.A. 2019-2020
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
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
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)