Sistemi di Calcolo

Corso di Laurea in Ingegneria Informatica e Automatica - A.A. 2017-2018

HomePage | Avvisi | Diario lezioni | Programma | Materiale didattico | Esami | Forum | Login

Revision [3001]

Last edited on 2017-10-08 15:34:37 by CamilDemetrescu
Deletions:
[[EsercAsm1617 Esercizi IA32 2016-17]]


Revision [3000]

Edited on 2017-10-08 15:34:21 by CamilDemetrescu
Additions:
===Esercizi traduzione da C ad Assembly IA32 (A.A. 2016-17)===
Deletions:
===Esercizi traduzione da C ad Assembly IA32===


Revision [2994]

Edited on 2017-10-08 15:32:36 by CamilDemetrescu
Additions:
[[EsercAsm1617 Esercizi IA32 2016-17]]


Revision [2285]

Edited on 2016-11-08 10:58:41 by CamilDemetrescu
Additions:
~- ##rotstr(s, 0)## -> ##s="roma"##
~- ##rotstr(s, 1)## -> ##s="arom"##
~- ##rotstr(s, 2)## -> ##s="maro"##
~- ##rotstr(s, 3)## -> ##s="omar"##
Deletions:
~- ##rotstr(s, 0)## -> ##s="roma"##
~- ##rotstr(s, 1)## -> ##s="arom"##
~- ##rotstr(s, 2)## -> ##s="maro"##
~- ##rotstr(s, 3)## -> ##s="omar"##


Revision [2284]

Edited on 2016-11-08 10:58:21 by CamilDemetrescu
Additions:
Scrivere una funzione C ##void rotstr(char* s, int i)## che, dato un intero ##i## in ##[0,n-1]##, dove ##n## è lunghezza della stringa, ruota la stringa verso destra di ##i## posizioni. Ad esempio, se ##s="roma"##, la stringa è modificata come segue:
Deletions:
Scrivere una funzione C ##void rotstr(char* s, int i)## che, dato un intero in [-n,n], dove n+1 è lunghezza della stringa, ruota la stringa verso destra di n posizioni se n>0, e a sinistra di -n posizioni se n<0. Ad esempio, se ##s="roma"##, la stringa è modificata come segue:
~- ##rotstr(s, -3)## -> ##s="arom"##
~- ##rotstr(s, -2)## -> ##s="maro"##
~- ##rotstr(s, -1)## -> ##s="omar"##


Revision [2283]

Edited on 2016-11-08 10:55:33 by CamilDemetrescu
Additions:
La trasformazione deve avvenire in-loco, cioè modificando l'array ##s## stesso senza usare alcun buffer di appoggio. Tradurre poi la funzione scritta in assembly IA32, scrivendo un modulo ##rotstr.s##.
Deletions:
Tradurre poi la funzione scritta in assembly IA32, scrivendo un modulo ##rotstr.s##. Si usi il seguente programma di prova:


Revision [2282]

Edited on 2016-11-08 10:54:19 by CamilDemetrescu

No differences.

Revision [2281]

Edited on 2016-11-08 10:53:46 by CamilDemetrescu
Additions:
~- ##rotstr(s, -3)## -> ##s="arom"##
~- ##rotstr(s, 0)## -> ##s="roma"##
~- ##rotstr(s, 1)## -> ##s="arom"##
~- ##rotstr(s, 2)## -> ##s="maro"##
~- ##rotstr(s, 3)## -> ##s="omar"##
Deletions:
~- ##rotstr(s, -3)## -> ##"arom"##
~- ##rotstr(s, 0)## -> ##s="roma"##
~- ##rotstr(s, 1)## -> ##s="arom"##
~- ##rotstr(s, 2)## -> ##s="maro"##
~- ##rotstr(s, 3)## -> ##s="omar"##


Revision [2280]

Edited on 2016-11-08 10:53:19 by CamilDemetrescu
Additions:
==Esercizio 15 (Rotazione stringhe)==
Scrivere una funzione C ##void rotstr(char* s, int i)## che, dato un intero in [-n,n], dove n+1 è lunghezza della stringa, ruota la stringa verso destra di n posizioni se n>0, e a sinistra di -n posizioni se n<0. Ad esempio, se ##s="roma"##, la stringa è modificata come segue:
~- ##rotstr(s, -3)## -> ##"arom"##
~- ##rotstr(s, -2)## -> ##s="maro"##
~- ##rotstr(s, -1)## -> ##s="omar"##
~- ##rotstr(s, 0)## -> ##s="roma"##
~- ##rotstr(s, 1)## -> ##s="arom"##
~- ##rotstr(s, 2)## -> ##s="maro"##
~- ##rotstr(s, 3)## -> ##s="omar"##
Tradurre poi la funzione scritta in assembly IA32, scrivendo un modulo ##rotstr.s##. Si usi il seguente programma di prova:


Revision [2279]

Edited on 2016-11-08 10:36:08 by CamilDemetrescu
Additions:
for (i=0; i<256; ++i) printf(i < 32 || i>127 ? "%3d: %u\n": "\'%c\': %u\n", i, freq[i]); // fra gli altri, deve stampare 'e': 4, ecc.
Deletions:
for (i=0; i<256; ++i) printf(i < 32 || i>127 ? "%-3d: %u\n": "\'%c\': %u\n", freq[i]); // fra gli altri, deve stampare 'e': 4, ecc.


Revision [2278]

Edited on 2016-11-08 10:03:09 by CamilDemetrescu
Additions:
for (i=0; i<256; ++i) printf(i < 32 || i>127 ? "%-3d: %u\n": "\'%c\': %u\n", freq[i]); // fra gli altri, deve stampare 'e': 4, ecc.
Deletions:
for (i=0; i<256; ++i) printf(i < 32 || i>127 ? "%-3d: %u\n": "\'%-3c\': %u\n", freq[i]); // fra gli altri, deve stampare 'e': 4, ecc.


Revision [2277]

Edited on 2016-11-08 10:02:31 by CamilDemetrescu
Additions:
#include
memset(freq, 0xAF, 256*sizeof(unsigned)); // inizializzazione farlocca per verificare poi se freq viene calcolato correttamente...
for (i=0; i<256; ++i) printf(i < 32 || i>127 ? "%-3d: %u\n": "\'%-3c\': %u\n", freq[i]); // fra gli altri, deve stampare 'e': 4, ecc.
Deletions:
for (i=0; i<256; ++i) printf(i < 32 || i>127 ? "%-3d: %u\n": "\'%-3c\': %u\n", freq[i]);


Revision [2276]

Edited on 2016-11-08 09:58:27 by CamilDemetrescu
Additions:
unsigned i, freq[256];
for (i=0; i<256; ++i) printf(i < 32 || i>127 ? "%-3d: %u\n": "\'%-3c\': %u\n", freq[i]);
Deletions:
unsigned freq[256];
for ()


Revision [2275]

Edited on 2016-11-08 09:52:59 by CamilDemetrescu
Additions:
==Esercizio 14 (Frequenza caratteri)==
Scrivere una funzione C ##void charfreq(const char* text, unsigned* freq)## che calcola per ogni carattere ASCII il suo numero di occorrenze nella stringa ##text##. Il risultato va scritto nell'array ##freq##, che si assume abbia 256 celle. Tradurre poi la funzione scritta in assembly IA32, scrivendo un modulo ##charfreq.s##. Si usi il seguente programma di prova:
%%(c;charfreq-main.c)
void charfreq(const char* text, unsigned* freq);
unsigned freq[256];
charfreq("Traveling through hyperspace ain't like dusting crops, farm boy.", freq);
for ()


Revision [2261]

Edited on 2016-11-07 19:25:24 by CamilDemetrescu
Additions:
Si vedano le discussioni e le soluzioni sul [[http://solo.diag.uniroma1.it/index.php?board=304.0 forum]]. Alcuni esercizi sono risolti [[SolEsercAsm1617 qui]].
Deletions:
Si vedano le discussioni e le soluzioni sul [[http://solo.diag.uniroma1.it/index.php?board=304.0 forum]].


Revision [2260]

Edited on 2016-11-07 19:03:13 by CamilDemetrescu
Additions:
Si ricordi che il valore di ritorno di una funzione è sempre a 32 bit per gli interi (##char## e ##short## vengono quindi promossi a ##int##) e viene passato in ##eax##. Si suggerisce di riscrivere dapprima il programma in una forma C equivalente in cui il ##for## viene rimpiazzato da un ##while##, e poi il ##while## da un ##if (...) goto##. Scrivere un programma di prova per testare la funzione IA32.
Si suggerisce di riscrivere dapprima il programma in una forma C equivalente in cui il ##for## viene rimpiazzato da un ##while##, e poi il ##while## da un ##if (...) goto##. Usare il seguente programma di prova:
Deletions:
Si ricordi che il valore di ritorno di una funzione è sempre a 32 bit per gli interi (##char## e ##short## vengono quindi promossi a ##int##) e viene passato in ##eax##. Si suggerisce di riscrivere dapprima il programma in una forma C equivalente in cui il ##for## viene rimpiazzato da un ##if (...) goto##. Scrivere un programma di prova per testare la funzione IA32.
Si suggerisce di riscrivere dapprima il programma in una forma C equivalente in cui il ##for## viene rimpiazzato da un ##if (...) goto##. Usare il seguente programma di prova:


Revision [2259]

Edited on 2016-11-07 18:52:17 by CamilDemetrescu
Additions:
for (i=0; i for (j=0; j for (i=0; i
Deletions:
for (i=0; i for (j=0; j


Revision [2258]

Edited on 2016-11-07 18:50:54 by CamilDemetrescu
Additions:
int matsum(int** v, int n);


Revision [2257]

Edited on 2016-11-07 18:49:02 by CamilDemetrescu
Additions:
v[i] = malloc(N*sizeof(int));
Deletions:
v[i] = malloc(n*sizeof(int));


Revision [2256]

The oldest known version of this page was created on 2016-11-07 18:48:35 by CamilDemetrescu
Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki
Page was generated in 0.0910 seconds