• Non ci sono risultati.

Matricola __________________ Nome _____________________ Cognome __________________

N/A
N/A
Protected

Academic year: 2021

Condividi "Matricola __________________ Nome _____________________ Cognome __________________"

Copied!
2
0
0

Testo completo

(1)

Università degli Studi di Udine

Corsi di laurea in Ingegneria Elettronica e Ingegneria Gestionale Architettura dei calcolatori / Fondamenti di Informatica II 7 luglio 2015 - Prova scritta

Matricola __________________

Nome _____________________

Cognome __________________

ISTRUZIONI (da leggere attentamente)

1) Lo studente è tenuto a scrivere, correggere, compilare ed eseguire su computer (a casa o in laboratorio) gli esercizi di programmazione prima della prova orale. Alla prova orale lo studente deve portare una memoria USB contenente i sorgenti dei programmi corretti e le stampe dei relativi file.

2) Non è consentito l’uso di libri, appunti, calcolatrici, telefoni cellulari.

3) Rispondere sinteticamente negli spazi di fianco o seguenti le domande, oppure sul retro del foglio.

1. (3 punti) Si converta in base 7 il numero 12.1

10

. Riportare sul retro tutti i passaggi effettuati.

2. (3 punti) Il seguente albero binario deve rappresentare la codifica di Huffman dei simboli riportati a fianco, ciascuno con la relativa probabilità. Si completi l’albero e si scriva il codice risultante per ciascuno dei simboli.

A: p=0.25, codice = _________

B: p=0.25, codice = _________

C: p=0.125, codice = _________

D: p=0.125, codice = _________

E: p=0.125, codice = _________

F: p=0.125, codice = _________

__ __ __

__

__ __ __

__ __

__

__ __

__

__ __

__ __ __

__

__ __ __

__ __

__

__ __

__

__ __

Si consideri la libreria in linguaggio C per manipolare file bitmap vista a lezione, così definita:

typedef unsigned char byte;

typedef unsigned short int word;

typedef unsigned long int dword;

#define BMPFILETYPE 0x4D42 typedef struct tagCOLORTRIPLE {

byte blue;

byte green;

byte red;

} COLORTRIPLE;

typedef struct tagFILEHEADER {

word ImageFileType;

dword FileSize;

word Reserved1;

word Reserved2;

dword ImageDataOffset;

} FILEHEADER;

typedef struct tagBMPHEADER {

dword HeaderSize;

dword ImageWidth;

dword ImageHeight;

word NumberOfImagePlanes;

word BitsPerPixel;

dword CompressionMethod;

dword SizeOfBitmap;

dword HorizonalResolution;

dword VerticalResolution;

dword NumberOfColorsUsed;

dword

NumberOfSignificantColors;

} BMPHEADER;

typedef struct tagBITMAP {

dword width;

dword height;

COLORTRIPLE *pixel;

FILEHEADER fileheader;

BMPHEADER bmpheader;

} BITMAP;

#define PIXEL(image, row, column) \ image.pixel [(row( * image.width +

(column)]

BITMAP ReadBitmap (FILE *fp);

void WriteBitmap (BITMAP bitmap, FILE *fp);

BITMAP CreateEmptyBitmap

(dword height, dword width);

void ReleaseBitmapData (BITMAP *bitmap);

3. (10 punti) Si scriva un programma che riceva come argomento sulla riga di comando il nome di un file bitmap e stampi sullo schermo, in orizzontale, l’istogramma della luminosità (calcolata come intero su 8 bit) per 32 fasce di valori (0-7, 8-15, ..., 248-255). Si consideri già disponibile la funzione di stampa dell’istogramma (che però dovrà essere realizzata per la discussione del programma alla prova orale). Il riquadro a fianco riporta un esempio di istogramma ottenuto elaborando l’immagine seguente.

(svolgere sul retro)

0 - 7 8 - 15 16 - 23 * 24 - 31 * 32 - 39 **

40 - 47 * 48 - 55 *****

56 - 63 ********************

64 - 71 **********************

72 - 79 ********************

80 - 87 *******************

88 - 95 **************

96 - 103 ***********

104 - 111 *****

112 - 119 ***

120 - 127 **

128 - 135 * 136 - 143 * 144 - 151 * 152 - 159 * 160 - 167 * 168 - 175 * 176 - 183 ***

184 - 191 ************

192 - 199 ********************************************

200 - 207 ************************************************************

208 - 215 ***********

216 - 223 **

224 - 231 * 232 - 239 * 240 - 247 * 248 - 255 *

(2)

Un elaboratore (il modello didattico SimCPU visto a lezione) dispone di CPU (a 16 bit) con 16 registri di uso generale (R0, R1, ..., R15) più il Program Counter, l’Instruction Register, lo Stack Pointer e 4 flag Z (zero), N (negative), C (carry) e V (overflow).

Si ricorda che il linguaggio assembler di tale elaboratore dispone delle seguenti istruzioni:

4. Il programma riportato nel riquadro a fianco elabora i dati memorizzati nei registri R1 e R2 (i valori 2 e 3, rispettivamente) e lascia il risultato dell’elaborazione in R0.

Rispondere alle domande.

4a. (4 punti) Noto che l’indirizzo di memoria dell’etichetta START è 0000, dell’istruzione CALL XYW è 000E e dell’istruzione CALL MUL è 0022, scrivere il contenuto dello stack al termine dell’esecuzione del programma.

MEM[E000]: ____

MEM[E001]: ____

MEM[E002]: ____

MEM[E003]: ____

MEM[E004]: ____

MEM[E005]: ____

MEM[E006]: ____

MEM[E007]: ____

4b. (2 punti) Che valore conterrà il registro R0 al termine dell’esecuzione del programma?

4c. (3 punti) Cosa fa, in generale, la funzione XYW?

5. (3 punti) Cosa significa MMU? A cosa serve? Dove è collocata?

6. (2 punti) Cos’è una “array formula” in Excel?

assembly inst. name machine code action LDWI d X load word 00010000dddd0000 DATA(16) d <- X LDWA d A load word 00100000dddd0000 ADDR(16) d <- mem[A]

LDWR d a load word 00110000ddddaaaa d <- mem[a]

LDBI d X load byte 00010001dddd0000 DATA(8) d <- X LDBA d A load byte 00100001dddd0000 ADDR(16) d <- mem[A]

LDBR d a load byte 00110001ddddaaaa d <- mem[a]

STWA s A store word 00100010ssss0000 ADDR(16) mem[A] <- s STWR s a store word 00110010ssssaaaa mem[a] <- s STBA s A store byte 00100011ssss0000 ADDR(16) mem[A] <- s STBR s a store byte 00110011ssssaaaa mem[a] <- s MV s d move 00000100ssssdddd d <- s PUSH s push 00001000ssss0000 push (s) POP d pop 00001001dddd0000 d <- pop () SPRD d read SP 00001101ssss0000 d <- SP SPWR s write SP 00001110ssss0000 SP <- s ADD s d add 01000000ssssdddd d <- d + s SUB s d subtract 01000001ssssdddd d <- d - s NOT r bitwise NOT 01000010rrrr0000 r <- ~r AND s d bitwise AND 01000011ssssdddd d <- d & s OR s d bitwise OR 01000100ssssdddd d <- d | s XOR s d bitwise XOR 01000101ssssdddd d <- d ^ s INC r increment 01001000rrrr0000 r <- r + 1 DEC r decrement 01001001rrrr0000 r <- r + 1 LSH r left shift 01001010rrrr0000 r <- r << 1 RSH r right shift 01001011rrrr0000 r <- r >> 1

assembly inst. name machine code action INW d A input word 10000000dddd0000 IN_ADDR(16) d <- read[A]

INB d A input byte 10000001dddd0000 IN_ADDR(16) d <- read[A]

OUTW s A out word 10000010ssss0000 OUT_ADDR(16) out[A] <- s OUTB s A out byte 10000011ssss0000 OUT_ADDR(16) out[A] <- s

TSTI A test input 1000010000000000 IN_ADDR(16) if completed then Z <- 1 else Z <- 0

TSTO A test output 1000010100000000 OUT_ADDR(16) if completed then Z <- 1 else Z <- 0

BR A branch 1100000000000000 ADDR(16) PC <- A JMP F jump 11000001FFFFFFFF PC <- PC + F

JMPZ F jump if zero 11000010FFFFFFFF if (z == 1) PC <- PC + F JMPNZ F jump if not zero 11000011FFFFFFFF if (z == 0) PC <- PC + F JMPN F jump if negative 11000100FFFFFFFF if (N == 1) PC <- PC + F JMPNN F jump if not neg. 11000101FFFFFFFF if (N == 0) PC <- PC + F JMPC F jump if carry 11000110FFFFFFFF if (C == 1) PC <- PC + F JMPV F jump if overflow 11000111FFFFFFFF if (V == 1) PC <- PC + F CALL A subroutine call 1100100000000000 ADDR(16) push (PC); PC <- A RET return from sub. 1100100100000000 PC <- pop() HLT halt 1100111100000000 halt LEGENDA:

- lettere minuscole = registri; lettere maiuscole = dati numerici - ‘r’ = registro letto e modificato

- ‘s’ = registro soltanto letto - ‘d’ = registro modificato

- ‘a’ = registro il cui contenuto è usato come indirizzo - FFFFFFFF = offset (in complemento a 2)

START: LDWI R15 0E000

SPWR R15

LDWI R1 2

LDWI R2 3

CALL XYW

HLT

XYW: LDWI R0 1

MV R2 R12

L_XYW: JMPZ END_XYW

PUSH R1

PUSH R2

MV R0 R2

CALL MUL

POP R2

POP R1

DEC R2

JMP L_XYW

END_XYW RET

MUL: LDWI R0 0

MV R1 R15

L_MUL: JMPZ END_MUL

ADD R2 R0

DEC R1

JMP L_MUL

END_MUL: RET

Riferimenti

Documenti correlati

Prima di consegnare bisogna annotare le risposte date sul foglio fornito.. Ogni risposta esatta vale 3 punti, ogni risposta errata errata

Prima di consegnare bisogna annotare le risposte date sul foglio fornito.. Ogni risposta esatta vale 3 punti, ogni risposta errata errata

Prima di consegnare bisogna annotare le risposte date sul foglio fornito.. Ogni risposta esatta vale 3 punti, ogni risposta errata errata

[r]

ESITO PROVA ORALE DEL 12 MAGGIO 2015 AG8/P. Cognome Nome TOTALE PROVA

Cognome Nome TOTALE PROVA ORALE ESITO. LAPORTA VALENTINA

Cognome Nome TOTALE PROVA ORALE ESITO. LA FRAZIA VINCENZO

Un bridge locale dispone di due o più interfacce di rete, e filtra i pacchetti isolando i domini di broadcast, un bridge remoto dispone di un’interfaccia di rete ed una di tipo