La scorsa lezione. Laboratorio di Architettura. Word e bytes... Questa lezione. Lezione 8

Documenti analoghi
Laboratorio di Architettura lezione 11. La scorsa lezione. Motivi? Word e bytes

Laboratorio di Architettura lezione 11. Massimo Marchiori W3C/MIT/UNIVE

Indirizzamento, lettura e scrittura della memoria

Indirizzamento, lettura e scrittura della memoria

Memoria: lettura, scrittura e indirizzamento

Caratteri e stringhe

Assembler MIPS 32 Assembly III

Rappresentazione (Codifica Binaria dei Numeri) ed Elaborazione delle Informazioni

LA CODIFICA DELL INFORMAZIONE

I CARATTERI E LE STRINGHE

Caratteri e stringhe

L ambiente di simulazione SPIM

Modulo 1: Le I.C.T. UD 1.2d: La codifica Digitale dei caratteri

1.2d: La codifica Digitale dei caratteri

Stringhe di caratteri

Laboratorio di Architettura

Gestione dei caratteri

Il linguaggio assembly

Fetch Decode Execute Program Counter controllare esegue prossima

LA CODIFICA DELL INFORMAZIONE. Prof. Enrico Terrone A. S: 2014/15

Laboratorio di Architettura degli Elaboratori A.A. 2014/15 Programmazione Assembly

Interazione con il DOS e il BIOS

Stringhe in C. Alessandra Giordani Lunedì 23 aprile 2012

System calls. Università degli Studi di Milano Corso di Laurea in Informatica, A.A Homepage del corso

System calls. Università degli Studi di Milano Corso di Laurea in Informatica, A.A Homepage del corso

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

La rappresentazione delle informazioni

La rappresentazione delle informazioni

Corso di Informatica A.A

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 5 31/10/2013

Il linguaggio C. Puntatori e dintorni

Istruzioni e linguaggio macchina

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Modalità di indirizzamento

Rappresentazione. Rappresentazione del testo. Rappresentare numeri. Rappresentazione delle informazioni in codice binario. Caratteri.

Appunti del corso di Informatica 1 (IN110 Fondamenti) 5 Rappresentazione delle informazioni

Laboratorio di Architettura lezione 5. Massimo Marchiori W3C/MIT/UNIVE

Rappresentazione dell Informazione

Programma del corso. Rappresentazione delle Informazioni. Introduzione agli algoritmi. Architettura del calcolatore

Programmare in C. Maurizio Palesi Salvatore Serrano. Valori. Operazioni. Un insieme di valori del tipo. Per operare su tali valori Tipi

Caratteri e stringhe

Array. Aggragati di variabili omogenee...

Tipi di dato. Le variabili in C. Problema: dato in input un carattere, se esso è una lettera minuscola, trasformarla in maiuscola.

La rappresentazione delle informazioni

Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012

A. Veneziani - Le variabili puntatore

1.2d: La codifica Digitale dei caratteri

La Rappresentazione dell Informazione

Un quadro della situazione. Lezione 6 Aritmetica in virgola mobile (2) e Codifica dei caratteri. Dove siamo nel corso. Organizzazione della lezione

Primi programmi in C

L insieme delle istruzioni (6)

Precisazione sui tipi in ANSi C

Architettura degli Elaboratori Lez. 3 ASM: Strutture di controllo. Prof. Andrea Sterbini

Intro ai tools di MARS

Lezione 20. della CPU MIPS. Prof. Federico Pedersini Dipartimento di Informatica Università degli Studi di Milano

Ingresso ed Uscita in C. Informatica 1 / 15

Allocazione dinamica della memoria

Allocazione dinamica della memoria

Esercitazione 1 Codifica e Rappresentazione dell Informazione Istruzioni Assembly MIPS

Il linguaggio C. Notate che...

Architetture dei Calcolatori

Introduzione alla programmazione in linguaggio C

Primi passi col linguaggio C

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java

Modi di indirizzamento

Rappresentazione di interi

Informatica Applicata. introduzione

Informatica. Mario Pavone - Dept. Mathematics & Computer Science - University of Catania. Trasferimento. Ambiente esterno.

Corso di Informatica

Prof. Massimiliano Giacomin 21 dicembre NOME: COGNOME: MATR: Scrivere nome, cognome e matricola chiaramente in caratteri maiuscoli

La rappresentazione dell informazione. Capitolo 5 Fluency Conoscere e usare l informatica

Tipi di dato semplici

Rappresentazione dell informazione

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin

Esercizi per il recupero del debito formativo:

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Sistemi di Elaborazione delle Informazioni

Manualino minimale MIPS

Architettura di un elaboratore. Il modello di von Neumann

Pag. 1. La Rappresentazione e la Codifica delle informazioni (parte 2) Tipi di dati. Informatica Facoltà di Medicina Veterinaria

Istruzioni di trasferimento dati

Variabili e input/ Alessandra Giordani Lunedì 18 marzo

La Codifica e la Rappresentazione dei dati

Laboratorio di Architettura degli Elaboratori A.A. 2016/17 Programmazione Assembly

Programmazione (imperativa)

Mini-dispensa sui puntatori in C

Tipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Modi di indirizzamento. Indicano come accedere all operando di interesse dell istruzione. Il MIPS ha 5 modi di indirizzamento:

System Calls, Register Spilling

Architettura degli elaboratori Lezione di laboratorio 04/03/15. Dr. Francesco Giacomini e Dr. Matteo Manzali Università degli Studi di Ferrara

Istruzioni di controllo del flusso

File binari e file di testo

Università degli Studi di Cassino

Laboratorio di Architettura degli Elaboratori

Transcript:

La scorsa lezione Laboratorio di Architettura Lezione 8 Andrea Torsello 1 Dipartimento di Informatica Università Ca Foscari di Venezia Procedure Convenzione di chiamata Stack (Push / Pop) Implementazione: come si traduce una funzione Variabili e scoping (globali/locali) 1 slides basate su slides di Massimo Marchiori p.1/52 Questa lezione p.2/52 Word e bytes... TIPI: Stringhe Chiamate di sistema Strutture Vettori (solo accennato) Puntatori Finora, abbiamo solo agito con words (4 bytes) Però, abbiamo visto che ci sono istruzioni anche per manipolare i singoli bytes: lbu (load byte (unsigned)) sb (store byte) p.3/52 p.4/52

Motivi? Come? Motivo principale: le stringhe Questa è una stringa Le stringhe sono composte di caratteri Usualmente, ogni carattere è memorizzato in 1 byte Si indossa un diverso paio di occhiali I numeri nella memoria possono essere interpretati in vario modo: Come numeri Come istruzioni di memoria E... come caratteri p.5/52 Corrispondenza numeri-caratteri ASCII p.6/52 Corrispondenza standard: ASCII ASCII: American Standard Code for Information Interchange Da 0 a 127: ci sta in un byte Da 0 a 31: caratteri di controllo Da 32 a 126: caratteri stampabili 127: carattere di controllo p.7/52 p.8/52

ASCII Osservazioni 32 (spazio) 33! 34 " (virgolette) 35 #... I caratteri dell alfabeto corrispondono a numeri consecutivi I caratteri numerici corrispondono a numeri consecutivi p.9/52 Lettere maiuscole p.10/52 Lettere minuscole 65 A... 90 Z 97 a... 122 z p.11/52 p.12/52

Utilità Caratteri numerici Quindi, ad esempio, possiamo facilmente Controllare se un carattere è una lettera Passare da maiuscole a minuscole e viceversa (c è una differenza di 32 tra ogni lettera maiuscola e corrispondente minuscola) 68 D 100 d 48 0... 57 9 Utilità p.13/52 In memoria p.14/52 Possiamo facilmente calcolare il valore di un carattere numerico sottraendo il valore di 0 (48) Esempio: il valore del carattere 2 (ASCII 50) è 50-48=2 Rappresentazione standard MIPS (come in C): Sequenza di valori numerici dei caratteri, terminata da un carattere speciale Null (0) Esempio: CIAO in memoria sarebbe 67, 73, 65, 79, 0 p.15/52 p.16/52

Attenzione In SPIM? Questa rappresentazione è abbastanza standard, ma non è universale Controllate nel vostro contesto Come si carica una stringa in memoria? Opzione 1: si riserva memoria con.space, e poi si memorizzano I codici dei singoli caratteri con sb (store byte) Auch... Opzione 2: si mettono I codici direttamente con la direttiva.byte Esempio con CIAO:.byte 67, 73, 65, 79, 0 p.17/52 Direttiva.asciiz p.18/52 Stringhe e caratteri di controllo Nuova direttiva.asciiz stringa Inserisce la stringa, e la termina con null Esempio:.asciiz CIAO Analogamente al C, alcuni caratteri ASCII non stampabili sono rappresentabili tramite cosiddette sequenze di escaping Escape > sfuggire Si sfugge all interpretazione normale di una stringa, e si seleziona un carattere (nel nostro caso, \ p.19/52 p.20/52

Caratteri di controllo in SPIM ESERCIZIO \ n : newline (ritorno a capo) \ " : virgolette (") \ t : tab (allinea su colonna) Se il carattere \ è di escape, come si fa allora a stampare una stringa che contiene proprio \? Ad esempio, come si stampa \ n? p.21/52 p.22/52 Ma... UNICODE Tenete a mente, che il mondo non parla solo ASCII ASCII = American... Il mondo parla Unicode L alfabeto universale I caratteri qui sono di 2 bytes p.23/52 p.24/52

Per saperne di più... Oltre al processore http://www.unicode.org http://www.w3.org/international I processori forniscono le istruzioni basilari (operazioni aritmetiche, salti, load, store...) Però, poi la macchina ha tipicamente altri accessori hardware con cui è possibile interagire Ad esempio, il video, la tastiera, la scheda video, il disco, etc... p.25/52 Il Sistema Operativo p.26/52 Come si fa? Quindi ad esempio, per scrivere delle lettere sul video occorreranno particolari istruzioni che vanno a interagire col video Per ricevere dati dalla tastiera occorreranno particolari istruzioni che interagiscono con la tastiera E così via... Tipicamente, tali istruzioni sono molto complicate, quindi qualcuno ha già scritto il codice per noi, sotto forma di varie funzioni, e ce lo offre il cosiddetto sistema operativo p.27/52 p.28/52

Il Sistema Operativo E noi? Serie di funzioni già predefinite, che possiamo usare per interagire con la macchina Vantaggi: su macchine diverse, cambierà il codice delle funzioni scritte nel sistema operativo, ma non i programmi che le usano il nostro programma è solo dipendente dal sistema operativo, non dalla macchina (più o meno...) Noi allora, scrivendo un programma assembly in SPIM, come facciamo a scrivere su video etc etc? SPIM ci fornisce un mini sistema operativo con delle funzioni di base p.29/52 Chiamate al Sistema Operativo Le syscall p.30/52 Possiamo chiamare queste funzioni del sistema operativo Istruzione MIPS: syscall system call, chiamata di sistema Tipicamente: INPUT: $v0 : cosa far fare al sistema operativo (codice della chiamata) $a0 : dato in input (se c è) $a1 : dato in input (se c è) OUTPUT: $v0: dato in output (se c è) p.31/52 p.32/52

Mini sistema operativo Stampa su video Mini perché ci sono solo 10 possibili chiamate al sistema Di solito un sistema operativo ne ha molte di più... Noi oggi ne vedremo 5 (codice 1, 4, 5, 8, 10) Ci sono istruzioni per stampare su video: un intero una stringa p.33/52 Stampa un intero Esempio p.34/52 INPUT: $v0 = 1 (codice) $a0 = intero da stampare OUTPUT: Per stampare 7 su video: addi $v0,$zero,1 #codice 1 addi $a0,$zero,7 #output 7 syscall #stampa su video p.35/52 p.36/52

Attenzione Stampa di stringhe Stampando un intero, la chiamata al sistema operativo automaticamente converte in decimale Quindi se in $a0 c è 10 (esadecimale), sarà stampato 16 a video INPUT: $v0 = 4 (codice) $a0 = indirizzo della stringa OUTPUT: p.37/52 Leggere un intero Attenzione p.38/52 INPUT: $v0 = 5 (codice) OUTPUT: $v0 = intero letto da tastiera 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 Esempio: scrivendo da tastiera 10, il computer traduce in A esadecimale p.39/52 p.40/52

Leggere una stringa ATTENZIONE INPUT: $v0 = 8 (codice) $a0 = dove mettere la stringa ( buffer ) $a1 = lunghezza della stringa (capacità del buffer) La lunghezza della stringa in a1 comprende il carattere di terminazione null (0) (Simile a fgets in C) OUTPUT: il buffer conterrà la stringa letta Caso tipico p.41/52 Syscall 10 p.42/52 Si riserva lo spazio necessario per la stringa con.space (e si mette un etichetta) Si carica con la l indirizzo della stringa in $a1 con la Vediamo l ultima syscall Codice: 10 Significato: EXIT Esci da SPIM e termina l esecuzione Attenzione al comportamento di SPIM... p.43/52 p.44/52

Strutture Strutture Le strutture non sono altro che piu variabili (anche di tipo diverso) collegate tra di loro. Esempio struct S { int a; int b; }; L accesso a questa o quella variabile all interno di una strutture avviene attraverso il nome ed è quindi scritta staticamente nel programma struct S x; x.a=2; Vettori p.45/52 p.46/52 Come si implementano I vettori sono un altro tipo di dati aggregati Si possono dichiarare più variabili dello stesso tipo e accedervi tramite un indice Esempio int a[10]; int x;... a[x]=1; Si può allocare ogni singola variabile di una struttura o un vettore come se non fossero collegate a:.space 4 b:.space 4 Oppure si può associare tutta la memoria necessaria ad una label (indirizzo) e accedere a questa o quella variabile tramite un offset Per esempio, nel caso precedente, b può essere riscritta come a+4 p.47/52 p.48/52

Come si implementano Problema Nel primo caso si facilita l accesso ai singoli elementi nel secondo caso si mantiene la visione d insieme Un problema collegato alla rappresentazione/implementazione è come vengono passati dati aggregati a procedure. Per capirci, come implemento la funzione C void sort(int a[10]) p.49/52 Passaggio dei parametri p.50/52 Conseguenze Il passaggio di dati aggregati avviene per indirizzo Tutta la struttura viene rappresentata dall indirizzo del primo elemento Anche in C, del resto, il passaggio di strutture e vettori avviene per puntatori, in modo esplicito per le strutture, attraverso una conversione implicita per i vettori. Le singole variabili che costituiscono il dato aggregato devono essere disposte in memoria in posizioni contigue o comunque avere una disposizione (layout) in memoria nota ed uniforme. La posizione di ciascuna variabile deve essere calcolata a partire dalla prima. Per riprendere l esempio di prima, se $t0 contiene l indirizzo di x, per caricare x.b in $t1 dovremo eseguire lw $t1,4($t0) Notate che l offset è statico! p.51/52 p.52/52