Architettura SPIM 2.key - Università degli Studi di Ferrara

Architettura degli elaboratori!
!
Pseudo-istruzioni, syscall, esercizi
21/3/14
Dr. Francesco Giacomini e Dr. Matteo Manzali
Università degli Studi di Ferrara
Pseudo-istruzioni
•
Sono istruzioni accettate dal compilatore MIPS alle quali non
corrisponde un effettivo codice operativo in linguaggio macchina
•
Prima della traduzione del programma in linguaggio macchina, le
pseudo-istruzioni vengono espanse dall’assembler in sequenze di
istruzioni ammesse (utilizzando il registro $1 che è riservato a
questo scopo)
•
Permettono una più chiara lettura del codice (significato intuitivo)
•
Una stessa pseudo-istruzione può essere espansa in diversi
modi, a seconda degli operandi utilizzati (se ad esempio un
valore immediato supera o meno i 16 bits)
Dr. Francesco Giacomini e Dr. Manzali Matteo - Università degli Studi di Ferrara
!2
Pseudo-istruzioni
•
Ecco alcuni esempi di pseudo-istruzioni e delle relative
conversioni in istruzioni native:
li $v0, 1
ori $v0, $zero, 1
li $a0, 0x11224455
lui $at, 0x1122
ori $a0, $at, 0x4455
la $s0, A
lui $at, 4097
ori $s0, $at, 28
move $a0, $s0
addu $a0, $zero, $s0
Dr. Francesco Giacomini e Dr. Manzali Matteo - Università degli Studi di Ferrara
!3
Pseudo-istruzioni
!
bge $t1, $t2, EXIT
slt $at, $t1, $t2
beq $at, $zero, EXIT
ble $t1, $0, EXIT
slt $at, $zero, $t1
beq $at, $zero, EXIT
Dr. Francesco Giacomini e Dr. Manzali Matteo - Università degli Studi di Ferrara
!4
Syscall
•
Le syscall (chiamate di sistema) sono un insieme di servizi di
sistema messi a disposizione dall’ambiente di simulazione ed
invocabili attraverso l’istruzione syscall
•
La maggior parte di esse è dedicata all’input ed all’output
•
Uso delle syscall:
•
Si carica il codice della syscall in $v0
•
Si caricano gli argomenti (se ci sono) in $a0, $a1, $a2 o $f12
•
Si esegue l’istruzione syscall
•
Si recuperano i risultati (se ci sono) nei registri specificati
Dr. Francesco Giacomini e Dr. Manzali Matteo - Università degli Studi di Ferrara
!5
Syscall
Dr. Francesco Giacomini e Dr. Manzali Matteo - Università degli Studi di Ferrara
!6
Syscall
•
Alcuni esempi di chiamate di sistema in MIPS:
•
Per terminare l’esecuzione del programma:
li $v0, 10
syscall
•
; carico il codice della syscall exit in $v0
; chiamata di sistema
Per stampare un intero:
li $v0, 1
li $a0, 45
syscall
; carico il codice della syscall print_int in $v0
; carico il numero da stampare in $a0
; chiamata di sistema
Dr. Francesco Giacomini e Dr. Manzali Matteo - Università degli Studi di Ferrara
!7
Ulteriori informazioni
!
•
Per maggiori informazioni riguardo a SPIM potete andare
all’indirizzo: http://spimsimulator.sourceforge.net/further.html
•
In particolare potete trovare un link all’appendice A del libro
“Computer Organization and Design: The Hardware/Software
Interface”: http://spimsimulator.sourceforge.net/HP_AppA.pdf
•
Nell’appendice del libro si possono trovare molte informazioni utili
relative alle tematiche affrontate in questa parte del corso
Dr. Francesco Giacomini e Dr. Manzali Matteo - Università degli Studi di Ferrara
!8
Esercizio
*** PRIMA PARTE ***!
•
Provate a scrivere in assembly una funzione “string compare”
•
La funzione prende in input due stringhe null terminated
•
Restituisce 1 se le due stringhe sono uguali, 0 altrimenti
•
Le stringhe potete definirle “hard-coded” nel codice
•
Stampate su console il valore restituito dalla funzione
*** SECONDA PARTE ***!
•
Fate diventare case-insensitive la funzione “string compare”
Dr. Francesco Giacomini e Dr. Manzali Matteo - Università degli Studi di Ferrara
!9