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