Laboratorio di Architettura lezione 11 La scorsa lezione Word e
Transcript
Laboratorio di Architettura lezione 11 La scorsa lezione Word e
Laboratorio di Architettura lezione 11 La scorsa lezione l Massimo Marchiori W3C/MIT/UNIVE “Nove gradi di separazione” l Procedure ricorsive l Stack l Push / Pop l Fibonacci Word e bytes… l Finora, abbiamo solo agito con words (4 bytes) l Pero’, abbiamo visto che ci sono istruzioni anche per manipolare I singoli bytes: l lbu (load byte (unsigned)) l sb (store byte) Motivi? Motivi? l Motivo principale: le stringhe l “Questa e’ una stringa” l Le stringhe sono composte di caratteri l Usualmente, ogni carattere e’ memorizzato in 1 byte 1 Corrispondenza tra numeri e caratteri Come? l Si indossa un diverso paio di occhiali l I numeri nella memoria possono essere interpretati in vario modo: l Come numeri l Come istruzioni di memoria l E… come caratteri l Corrispondenza standard: ASCII l ASCII: American Standard Code for Information Interchange ASCII l Da 0 a 127: ci sta in un byte l Da 0 a 31: caratteri di controllo l Da 32 a 126: caratteri stampabili l 127: carattere di controllo ASCII 32 à “ “ (spazio) l 33 à “!” l 34 à “”” (virgolette) l 35 à “#” l… l 126 à “~” l 2 Osservazioni l I caratteri dell’alfabeto corrispondono a numeri consecutivi l I caratteri numerici corrispondono a numeri consecutivi Lettere maiuscole 65 à “A” l… l 90 à “Z” l Lettere Minuscole 97 à “a” l… l 122 à “z” l Utilita’ l Quindi, ad esempio, possiamo facilmente l Controllare se un carattere e’ una lettera l Passare da maiuscole a minuscole e viceversa (c’e’ una differenza di 32 tra ogni lettera maiuscola e corrispondente minuscola) l 68 à “D” 100 à “d” 3 Caratteri Numerici 48 à “0” l… l 57 à “9” l Utilita’ l Possiamo facilmente calcolare il valore di un carattere numerico sottraendo il valore di “0” (48) l Esempio: il valore del carattere “2” (ASCII 50) e’ 50-48=2 In memoria l Rappresentazione standard MIPS (come in C): l Sequenza di valori numerici dei caratteri, terminata da un carattere speciale Null (0) l Esempio: “CIAO” in memoria sarebbe 67, 73, 65, 79, 0 Attenzione l Questa rappresentazione e’ abbastanza standard, ma non e’ universale l Controllate nel vostro contesto 4 Direttiva .asciiz In SPIM? l Come si carica una stringa in memoria? l Opzione 1: si riserva memoria con .space, e poi si memorizzano I codici dei singli caratteri con sb (store byte) l Auch… l Opzione 2: si mettono I codici direttamente con la direttiva .byte l Esempio con CIAO: .byte 67, 73, 65, 79, 0 l l Inserisce la stringa, e la termina con Null l Esempio: .asciiz “CIAO” Oltre al processore l I processori forniscono le istruzioni basilari (operazioni aritmetiche, salti, load, store...) l Pero’, poi la macchina ha tipicamente altri accessori hardware con cui e’ possibile interagire l Ad esempio, il video, la tastiera, la scheda video, il disco, etc... Nuova direttiva .asciiz stringa Il Sistema Operativo l Quindi ad esempio, per scrivere delle lettere sul video occorreranno particolari istruzioni che vanno a interagire col video l Per ricevere dati dalla tastiera occorreranno particolari istruzioni che interagiscono con la tastiera l E cosi’ via... 5 Come si fa? fa? l Tipicamente, tali istruzioni sono molto complicate, quindi qualcuno ha gia’ scritto il codice per noi, sotto forma di varie funzioni, e ce lo offre l à il cosiddetto sistema operativo Il Sistema Operativo l Serie di funzioni gia’ predefinite, che possiamo usare per interagire con la macchina l Vantaggi: su macchine diverse, cambiera’ il codice delle funzioni scritte nel sistema operativo, ma non i programmi che le usano l àil nostro programma e’ solo dipendente dal sistema operativo, non dalla macchina l (circa…) Chiamate al Sistema Operativo E noi? noi? l Noi allora, scrivendo un programma assembly in SPIM, come facciamo a scrivere su video etc etc? l à SPIM ci fornisce un mini sistema operativo con le funzioni di base l Per cui, possiamo chiamare queste funzioni del sistema operativo l à”system call” (chiamiamo funzioni del sistema) l Istruzione MIPS: syscall 6 Le syscall l Tipicamente: l INPUT: v0 : cosa far fare al sistema operativo (codice della chiamata) a0 : dato in input (se c’e’) a1 : dato in input (se c’e’) l OUTPUT: v0: dato in output (se c’e’) Mini sistema operativo l “Mini” perche’ ci sono solo 10 possibili chiamate al sistema l Di solito un sistema opearativo ne ha molte di piu’… l Noi oggi ne vedremo 4 (codice 1, 4, 5, 8) Stampa su video l Ci sono istruzioni per stampare su video: l un intero l una stringa Stampa un intero l INPUT: l v0 = 1 (codice) l a0 = intero da stampare 7 Esempio l Per stampare “7” su video: l addi $v0,$zero,1 #codice 1 addi $a0,$zero,7 #output 7 syscall #stampa su video Attenzione l Stampando un intero, la chiamata al sistema operativo automaticamente converte in decimale l Quindi se in a0 c’e’ “10” (esadecimale), sara’ stampato “16” a video Stampa di stringhe l INPUT: l v0 = 4 (codice) l a0 = indirizzo della stringa Leggere un intero l INPUT: l v0 = 5 (codice) l OUTPUT: l v0 = intero letto da tastiera 8 Attenzione l Come nel caso in cui si stampa un intero, quando si legge il sistema assume che noi scriviamo in decimale, e poi converte in esadecimale l Esempio: scrivendo da tastiera “10”, il computer traduce in “A” esadecimale Leggere una stringa l INPUT: l v0 = 8 (codice) l a0 = dove mettere la stringa (“buffer”) l a1 = lunghezza della stringa ATTENZIONE l La “lunghezza della stringa” in a1 comprende il carattere di terminazione Null (0) l (Simile a fgets in C) Caso tipico l Si riserva lo spazio necessario per la stringa con .space (e si mette un’etichetta) l Si carica con la l’indirizzo della stringa in a1 con la 9 Esempio l Ma... l Fibonacci... Tenete a mente, che il mondo non parla solo ASCII l ASCII = American .... UNICODE l Il mondo parla Unicode l L’alfabeto universale l I caratteri qui sono di 2 bytes Per saperne di piu’... piu’... l http://www.unicode.org l http://www.w3.org/International 10