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
© Copyright 2024 ExpyDoc