Esempi di sviluppo ed elaborazione di programmi in C + Assembly
Architettura degli elaboratori, CdL Informatica, DMI, Univ. Catania
1. Esempio in cap04/sub32bit
-
programma per architettura a 32 bit (elaborabile anche su
piattaforma a 64 bit se dotata delle necessarie librerie)
-
sorgenti: programma principale in C, sottoprogramma in Assembly
-
architetture: IA-32, ARMv6
-
contenuti: sorgenti e shell script per l'elaborazione del programma
con compilatore gcc in s.o. Unix/Linux (collaudati su Ubuntu 14.04);
per l'esempio ARMv6 è stato usato il cross-compilatore arm-linux-gcc,
disponibile per piattaforme Ubuntu nel repository
rijndael.ece.vt.edu
.
-
funzioni dei moduli:
-
sottoprogramma: conversione di una sequenza di cifre decimali
da codice ASCII (una cifra per byte) a BCD (due cifre per byte)
-
programma principale: collaudo del sottoprogramma con una sequenza
predefinita in un array di costanti e visualizzazione della
sequenza ottenuta in ritorno
-
script ausiliari: l'esecuzione del processo di elaborazione dei
sorgenti è facilitata da alcuni script, che però vanno dotati
del permesso di esecuzione dopo la decompressione dell'archivio;
e.g. su Unix/Linux:
cd cap04/sub32bit
chmod 755 */*BCDpacksub
1.1 Esempio in cap04/sub32bit/ia32
-
sequenza di elaborazione:
-
assemblaggio del sottoprogramma --> modulo oggetto
-
compilazione del programma principale e collegamento con il
modulo oggetto del sottoprogramma --> programma eseguibile
-
esecuzione del programma --> output rediretto su file di testo
-
disassemblaggio del modulo oggetto del sottoprogramma
rispettivamente mediante gli script:
./asBCDpacksub
./gcctestBCDpacksub
./runtestBCDpacksub
./odBCDpacksub
-
l'esecuzione dei quattro script nella sequenza di cui sopra, in
ciascuno dei tre passi usa -> produce (o sovrascrive) i file:
as: BCDpacksub.asm -> BCDpacksub.o, BCDpacksub.lst
gcc: testBCDpacksub.c, BCDpacksub.o -> testBCDpacksub, testBCDpacksub.lst
run: testBCDpacksub -> testBCD.txt
od: BCDpacksub.o -> BCDpacksub.dump
1.2 Esempio in cap04/sub32bit/arm
-
sequenza di elaborazione:
-
cross-assemblaggio del sottoprogramma --> modulo oggetto
-
cross-compilazione del programma principale e collegamento con
il modulo oggetto del sottoprogramma --> programma eseguibile
-
simulazione ordinaria dell'esecuzione del programma -->
output rediretto su file di testo
-
simulazione interattiva dell'esecuzione del programma con debugger:
v.
SimItARM User Guide / Interpreter / Built-In Debugger
.
rispettivamente mediante gli script:
./arm-linux-asBCDpacksub
./arm-linux-gcctestBCDpacksub
./simitarm-ematestBCDpacksub
./simitarm-demtestCDpacksub
-
l'esecuzione dei quattro script nella sequenza di cui sopra, in
ciascuno dei tre passi usa -> produce (o sovrascrive) i file:
arm-linux-as: BCDpacksub.asm -> BCDpacksub.o, BCDpacksub.lst
arm-linux-gcc: testBCDpacksub.c, BCDpacksub.o -> testBCDpacksub, testBCDpacksub.lst
simitarm-ema: testBCDpacksub -> testBCD.txt
simitarm-dem: testBCDpacksub
Allo stato attuale, su macchine di architettura x86 o amd l'esempio
ia32 è riproducibile fino all'esecuzione, mentre l'esempio arm richiede
l'installazione di un cross-compilatore (quello qui utilizzato non è
l'unico disponibile) e di un simulatore di processore ARM. Quest'ultimo
tipicamente permette di simulare l'esecuzione del programma ARM generato
sia in modalità ordinaria che con il supporto di un debugger interattivo.
Il simulatore qui usato è
SimItARM
, open-source per piattaforma IA32/Linux.
Su altre piattaforme (architettura e/o sistema operativo) si può impiegare
l'emulatore generico open-source
QEMU
.
Architettura degli elaboratori, 2014/2015
.
Autore:
G. Scollo
.
Data: Lunedì 4 Maggio 2015
testo semplice
di questa pagina.