laboratorio di architettura degli · pdf filelaboratorio di architettura degli elaboratori...
TRANSCRIPT
Laboratorio di Architettura degli Elaboratori
Dott. Massimo Tivoli
Introduzione a MARS: interfaccia, struttura di un programma, gestione dellinput
Lassemblatore e simulatore MARS
Permette di eseguire programmi assembler scritti per il processore MIPS.
Pu essere scaricato dal sitohttp://courses.missouristate.edu/KenVollmar/MARS/
Download MARS
Scaricherete un file .jar: Mars.jar
Per eseguirlo vi serve Java J2SE 1.4.2 (o versioni successive) SDK installato sul vostro computer java -jar Mars.jar (nella directory dove si trova Mars.jar)
Linterfaccia grafica di MARS
Lassemblatore e simulatore MARS si presenta organizzato in tre pannelli, che sono:
1) Il Pannello delleditor
- editing del programma assembly
- display del segmento di testo, di dati e dello stack
(comprese le labels definite nel programma)
2) Il pannello dei registri della CPU e della FPU
- display dei registri generali
- display dei registri del co-processore matematico
3) Il pannello dei messaggi
- messaggi di output di MARS
- messaggi di output del programma assembly (console
del programma)
MARS (continua)
MARS
Il display dei registri
Mostra lo stato di tutti i registri della CPU e della FPU del MIPS.
Di default, il contenuto e lindirizzo dei registri codificato in esadecimale (lo si pu visualizzare anche in decimale).
Il contenuto aggiornato ogni volta che il programma interrompe la sua esecuzione, ovvero quando il programma
termina;
produce un errore;
raggiunge un breakpoint definito dallutente.
Registri e MARS
Memoria
ALU
R0(r0)
R1(at)
MAR
MBR
R31(ra)
MEMORIA
CONTROLLO
CPU
altriregistri
Il segmento di testo
Mostra la porzione di memoria in cui memorizzato il programma da eseguire (a partire dalla locazione 0x0040000).
Tale programma costituito dal codice utente (ci sarebbe una parte di codice di sistema che si occupa della gestione della riga di comando e della terminazione, ma viene nascosta allutente).
Una generica riga di questo segmento ha il seguente formato:
[0x00400004] 0x8fa40000 lw $4,0($29) 89: lw $a0,0($sp)
Indirizzo dellistruzione Codifica dellistruzionein linguaggio macchina
(lo vedremo nella prossima lezione)
Codifica dellistruzionein linguaggio assembler
Descrizione mnemonica dellistruzione
Numero di riga del programma contenente listruzione
Segmento di dati e stack
Mostra lo stato della memoria riservata ai dati statici (segmento di dato) e dinamici (stack) del programma.
Per facilitarne la lettura, ogni riga di tali segmenti mostra il contenuto (in esadecimale) di 8 word consecutive in memoria (1 word = 4 byte = 4 locazioni di memoria)
Queste word sono ordinate in maniera crescente da sinistra verso destra.
Ogni word, poich il MIPS indirizza la memoria con il singolo byte, rappresenta a sua volta 4 locazioni consecutive che sono invece ordinate da destra verso sinistra.
ovvero (per semplicit consideriamo 4 word consecutive):
corrisponde a:
Word 0 Word 1 Word 2 Word 3
Word 3
Word 1
Word 0
0x7FFFEF5F
Word 2
0x7FFFEF510x7FFFEF50
0x7FFFEF60
.
.
.
0x7FFFEF50 + 1610 =0x7FFFEF50 + 0x10 =0x7FFFEF60
0x000x000x000x000x000x000x000x000xDE0xEF0xFF0x7F0xB50xEF0xFF0x7F
Esempio:Determinare lindirizzo dei byte di memoria evidenziati in rosso nella figura sottostante.
a) [0x10000000] 0x00000000 0x00000000 0x00000000 0x00000000b) [0x10000010] 0x00000000 0x00000000 0x00000000 0x00000000
Risposta:a) 0x10000005;b) non si tratta di un indirizzo di memoria valido (i dati stanno
a met tra 0x10000010 e 0x10000011).
Struttura di un programma MARS
.data
.text
.globl main
main:
Facoltativo
Gestione dellinput in MARS (continua)
Una volta assemblato il programma tramite il menuRun Assemble
il programma viene caricato in memoria ed pronto per lesecuzione che pu avvenire passo-passo o in modo completo
In questo stato di sospensione (o tra unpasso e laltro dellesecuzione), facendodoppio-clck sul contenuto di una qualsiasiword nel segmento dati o di un qualsiasi registro(apparte $zero, $ra, e pc) possibile inserire direttamente valori per,rispettivamente, locazioni di memoria e registri
Gestione dellinput in MARS (continua)
E inoltre possibile usare il segmento .data per inserire valori in memoria (a partire dalla locazione 0x10010000) secondo il seguente schema:
.data
label: Facoltativo
.tipo valoredove label un eventuale nome che si vuole associare alla locazione di memoria che si sta inizializzando mentre valore ne definisce il contenuto; tipo, infine, la dimensione con cui si vuole rappresentare valore (es.word (32 bit), half (16 bit), byte (8 bit)).
.dataX: .word 65
.dataX: .word A
.dataX: .word 0x00000041
Gestione dellinput in MARS (continua).data
X: .half 0xFFFFFFFF
.dataY: .byte 0xFFFFFFFF
.dataZ: .asciiz 0x00000041
Errore!
.dataK: .asciiz A
.dataH: .asciiz A
Errore!
.dataQ: .asciiz ABCDEFGH
XYK KQ Q Q
.data
X: .word 14
Y: .word 5
.text
.globl main
main:
lw $v0, X # oppure lw $2, X
lw $v1, Y # oppure lw $3, Y
j exit
exit:
Esempio:Caricare i valori numerici 14 e 5 rispettivamente nei registri R2 (v0) e R3 (v1) del simulatore MARS.
Gestione dellinput in MARS (continua)
MARS fornisce anche una modalit di inserimento dati interattiva usando alcune chiamate di sistema e
- la finestra di dialogo MIPS Keyboard Inputcome console per linput
- la tab Run I/O nel pannello dei messaggi comeconsole di output
Per invocare una chiamata di sistema sufficiente utilizzare il comando syscall.
Prima di utilizzare tale comando, per, necessario specificare tutti i parametri richiesti dalla particolare chiamata di sistema che si vuole utilizzare.
Chiamata di sistema Codice Parametri
Print_string 4$a0 (i.e., $4 o R4)
contiene lindirizzo della stringa da stampare
Read_int 5$v0 (i.e., $2 o R2)
conterr il risultato della lettura da tastiera
Prima di utilizzare una qualsiasi chiamata di sistema necessario porre nel registro $v0 il relativo codice.
Alcune chiamate di sistema
LHelp di MARS mostra la documentazione anche per tuttele altre system calls (e per i vari comandi, etc.) consultarlo ditanto in tanto risulta essere molto comodo per la scrittura diprogrammi assembly, nonch istruttivo
.data
Stringa: .asciiz Inserisci un numero:
.text
.globl main
main:
li $v0,4 # codice per la chiamata di sistema Print_string
la $a0,Stringa
syscall
li $v0,5 # codice per la chiamata di sistema Read_int
syscall
Esempio: Lettura di un intero da tastiera.
File: ReadNumber.asm
Gestione dellinput in MARS (continua)
Attivando la seguente opzione dalla barra dei men:
Settings Program arguments provided to MIPS program
appare una casella di testo (Program Arguments) tramite la quale possibile inserire direttamente i parametri della riga di comando del programma assembly
vedremo la gestione dei parametri sulla rigadi comando pi avanti nel corso
Gestione dellinput in MARS
Infine, MARS fornisce unulteriore modalit di inserimento dati:
Input formattato in memoria
Anche questa modalit di input la vedremo nelle prossime lezioni
Per approfondimenti
- Andare alla pagina del corso sulla mia web pagehttp://www.di.univaq.it/tivoli/index.php?pageId=labarch
- alcuni documenti su MARS
- alcuni manuali sul MIPS
- alcuni esempi svolti in MARS
- Consultare anche la pagina di MARS e lHelp di MARS- http://courses.missouristate.edu/KenVollmar/MARS/
http://www.di.univaq.it/tivoli/index.php?pageId=labarch