Vettore in assembly x86

Un vettore è una struttura dati ovvero è costituito da una sequenza di dati detti elementi del vettore che occupano locazioni di memoria consecutive.

Dichiarazione di un vettore – primo modo-

<nomeVettore> <tipo> <lista di elementi>

<nomeVettore> deve essere sostituito con il nome che si vuole dare al vettore;
<tipo> deve essere sostituito con db se il vettore è di elementi di dimensione di un byte; deve essere sostituito con dw se il vettore è di elementi di dimensione di 2 byte;
<lista di elementi> contiene i valori con cui devono essere inizializzati gli elementi del vettore, oppure un punto interrogativo per gli elementi non inizializzati.

Esempi:

valori db 1,2,3

dichiara un vettore di tre elementi di un byte inizializzando il primo ad 1, il secondo a 2 e il terzo a 3.

valori db 1,2,?

dichiara un vettore di tre elementi di un byte inizializzando il primo ad 1, il secondo a 2 e il terzo non inizializzato.

valori db ?,?,?

dichiara un vettore di tre elementi di un byte non inizializzati

Dichiarazione di un vettore – secondo modo-

<nomeVettore> <tipo> <numero di elementi> dup (<valore>)

<nomeVettore> deve essere sostituito con il nome che si vuole dare al vettore;
<tipo> deve essere sostituito con db se il vettore è di elementi di dimensione di un byte; deve essere sostituito con dw se il vettore è di elementi di dimensione di 2 byte;
<numero di elementi> deve essere sostituito con il numero di elementi;
<valore> contiene il valore con cui devono essere inizializzati gli elementi del vettore, oppure un punto interrogativo per non inizializzare gli elementi.

Esempi:

valori db 100 dup (1)

dichiara un vettore di 100 elementi di un byte inizializzandoli tutti ad 1.

valori db 100 dup (?)

dichiara un vettore di 100 elementi di un byte non inizializzati.

Accesso agli elementi di un vettore

Il nome del vettore rappresenta il suo indirizzo in memoria ovvero l’indirizzo del suo primo elemento. Quindi per il vettore seguente:

valori db 60 dup (1)

il nome del vettore ‘valori’ indica l’indirizzo ( di spiazzamento o di offset) del primo elemento del vettore questo indirizzo è chiamato anche ‘indirizzo base’.
Ad esempio se il vettore inizia all’indirizzo di spiazzamento [0140h] del segmento dati l’indirizzo fisico del primo elemento vale ds:[0140h] mentre l’indirizzo base vale [0140h].
Quindi si puo fare riferimento:

  • al primo elemento del vettore semplicemente indicando il suo nome (o l’indirizzo base)
  • al secondo elemento del vettore indicando il suo nome +1 (o l’indirizzo base +1)
  • al terzo elemento del vettore indicando il suo nome +2 (o l’indirizzo base+2)
  • al decimo elemento del vettore indicando il suo nome +9 (o l’indirizzo base+9)
  • etc. etc.

Il valore da aggiungere corrisponde al numero di byte che separano l’elemento desiderato dall’indirizzo base;
Il valore da aggiungere detto ‘scostamento’ può essere un valore costante o un valore contenuto in un registro indice;

  • Se ogni elemento occupa un byte lo scostamento per indicare l’elemento n sarà n-1;
  • Se ogni elemento occupa 2 byte (elementi di tipo dw) lo scostamento per indicare l’elemento n sarà (n-1)x2;

In memoria il vettore occupa locazioni consecutive a partire da quella del primo elemento, per la dichiarazione seguente:

valori db 60 dup (1)

il vettore è formato da 60 elementi di un byte tutti inizializzati al valore ‘1’, ipotizzando che il primo elemento del vettore risiede all’indirizzo fisico ds:[0140h] si avrà in memoria la situazione illustrata dallo schema che segue.

celle di memoria del Vettore

Riassumendo

  • Un vettore è una struttura dati costituita da un numero predefinito di byte disposti sequenzialmente in memoria, a partire da un indirizzo detto indirizzo base.
  • Il nome del vettore individua tutto il vettore e identifica l’indirizzo base.
  • Numerando sequenzialmente gli elementi con un indice posizionale l’indirizzo di ogni elemento è dato da: indirizzo elemento= indirizzo base + indice posizionale.
  • Per accedere ad un elemento del vettore occorre conoscere:
    • l’indirizzo base;
    • il numero di byte che separano l’elemento desiderato dall’indirizzo base (l’indice posizionale).

Vediamo come si può accedere agli elementi per il vettore che segue:

valori db 60 dup (1)

Sapendo che:

  • L’indirizzo base è rappresentato dal nome del vettore.
  • L’indice posizionale deve essere contenuto in un registro indice SI o DI.

accedere ad un elemento – primo modo:

supponendo di voler inserire il valore 5 nel primo elemento

mov di,0000h
mov valori[di],5

supponendo di voler inserire il valore 5 nel terzo elemento

mov di,0002h
mov valori[di],5

accedere ad un elemento – secondo modo:

supponendo di voler inserire il valore 5 nel primo elemento

lea bx,valori
mov di,0000h
mov [bx][di],5

supponendo di voler inserire il valore 5 nel terzo elemento

lea bx,valori
mov di,0002h
mov [bx][di],5

in questo secondo modo la scrittura [bx][di] può essere sostituita da [bx+di].
In conclusione si può dire che per accedere agli elementi di un vettore si utilizza l’indirizzamento indicizzato questo significa che l’offset dell’elemento desiderato si ottiene sommando un indirizzo base (nome simbolico o registro base) al contenuto di un registro indice (SI o DI).

accedere ad un elemento – terzo modo:

supponendo di voler inserire il valore 5 nel primo elemento

mov valori[0],5

oppure

mov valori+0,5

supponendo di voler inserire il valore 5 nel terzo elemento

mov valori[2],5

oppure

mov valori+2,5

Per elaborazioni che riguardano tutti gli elementi è conveniente utilizzare un ciclo iterativo in modo da accedere in sequenza a ciascun elemento del vettore. Provate!

Ciclo precondizionato in Assembly: somma dei primi N

Vediamo un esempio di utilizzo di ciclo precondizionato in Assembly.
Non disponiamo di una struttura pronta come accade nei linguaggi ad alto livello quindi dovremmo implementare il ciclo utilizzando opportunamente le istruzioni di salto.

Problema
Voglio sviluppare, in linguaggio Assembly x86, un programma che effettui la somma dei primi N numeri interi con N acquisito in input.

Analisi e progetto
Il programma dovrà acquisire il valore di N in input e sommare tutti i numeri da 1 a N. Esempio: se venisse fornito in input il valore 5 il programma dovrebbe fornire il valore 1+2+3+4+5 ovvero 15 ovvero la somma dei primi 5 numeri interi.
Dati
n  variabile di tipo intero a 8 bit (contiene il valore di N);
somma variabile di tipo intero a 8 bit (contiene la somma dei numeri);
conta variabile di tipo intero a 8 bit (contiene il valore da sommare, varia da 1 a N).

Algoritmo in pseudocodice

Programma sommaN
 leggi n;
 somma <-- 0;
 conta <-- 0;
 Mentre conta < n esegui
    conta <-- conta + 1;
    somma <-- somma + conta;
 FineMentre
Fine.

Codice sorgente

.model small
.stack 100h
.data
 n db ?
 somma db 0h
.code
 inizio:
 mov ax,@data
 mov ds,ax
 
 mov ah,01h          ; input di n
 int 21h
 sub al,30h
 mov n,al
 
 mov cl,00h         ; uso cl come contatore (da 0 a n)
 iniziociclo:
 cmp cl,n
 jnb finementre
   inc cl
   add somma,cl
   jmp iniziociclo
 finementre:
 
 mov ah,4Ch
 int 21h
end inizio

Il programma proposto utilizza un ciclo a controllo in testa (precondizionato) e un contatore crescente (da 1 a N).

Proposte di lavoro
1. Verifica il funzionamento del programma.
2. Sviluppa un programma per lo stesso problema che utilizzi un contatore decrescente.
3. Sviluppa un programma per lo stesso problema che utilizzi un ciclo a controllo in coda.
4. Modifica il programma in modo che fornisca in output il valore calcolato della somma.

Eventuali domande nei commenti. Buon lavoro!

 

Esame di stato

Alcuni link utili, intanto la sezione esame di stato del sito del ministero, poi una serie di collegamenti a sezioni di interesse per conoscere le materie d’esame e la composizione delle commissioni, i nomi dei commissari, le tracce ufficiali delle prove scritte, tracce e soluzioni della seconda prova disponibili in rete.

Link utili per informazioni sull’esame di stato

Cerca le materie

Cerca la commissione

Link utili per tracce e soluzioni seconda prova

Tracce prove scritte

Tracce e soluzioni

Tracce e soluzioni  informatica

Tracce e soluzioni sistemi e reti

Il link alla applicazione commissione web utile alla commissione d’esame quando il sito del ministero è sovracarico.

Quale tesina per l’esame di stato? Piccola guida.

Punto interrogativo rosso su sfondo verde - Quale tesina per l'esame di statoPremetto che, anche se il termine è ormai entrato nell’uso comune, non si dovrebbe chiamare tesina, ma detto questo cerchiamo di capire cos’è una tesina per l’esame di stato, cosa significa fare una tesina, come scegliere l’argomento e cosa preparare in concreto.
Innanzituto è bene esaminare cosa dice la normativa (dello scorso anno, ma a questo riguardo non dovrebbe cambiare niente).

Il colloquio ha inizio con un argomento o con la presentazione di esperienze di ricerca e di progetto, anche in forma multimediale, scelti dal candidato. Rientra tra le esperienze di ricerca e di progetto la presentazione da parte dei candidati di lavori preparati, durante l’anno scolastico, anche con l’ausilio degli insegnanti della classe.(OM 13/13 art. 16 comma 1).

L’ordinanza ministeriale parla di un argomento oppure di esperienze di ricerca oppure di progetto. Tre alternative tra le quali non compare la parola ‘tesina’.  Volendo capire cosa significano queste tre parole e provando a riportarle al gergo scolastico quotidiano possiamo dire che per iniziare il colloquio il candidato può a sua scelta proporre:
(a) un progetto di un prodotto o servizio con eventuale realizzazione di un prototipo;
(b) una tesina su un lavoro di ricerca;
(c) un argomento che si può articolare in un percorso multidisciplinare.

Non ci sono vincoli al tema dei lavori, ma l’ordinanza suggerisce che il progetto e la ricerca possono essere ”lavori preparati, durante l’anno scolastico, anche con l’ausilio degli insegnanti della classe” e io consiglio di accogliere questo suggerimento, non è necessario pensare all’impossibile, ma aprofondire, completare, migliorare uno di quei lavori e se frequenti un istituto tecnico e fai attività di laboratorio avrai l’imbarazzo della scelta. Qualunque scelta si faccia è sempre consigliabile scegliere un lavoro che metta in gioco abilità e competenze sviluppate nel corso dell’anno scolastico.

Attenzione a non confondere progetto e prototipo, con progetto si intende tutto lo studio preliminare, l’ideazione e la definizione delle attività utili per la produzione di un prodotto o servizio, con prototipo invece si intende la realizzazione di un esemplare del prodotto o servizio anche con funzionalità limitate. Nel caso di un lavoro per l’esame andrà bene lo sviluppo di un software, di un sito web, di un piccolo robot, del plastico di un edificio, ma anche  la realizzazione di una particolare struttura meccanica o di un circuito elettronico per l’automazione o qualunque altro possibile lavoro che metta in gioco ed evidenzi  competenze e abilità del profilo professionale del diplomato.

Per ricerca intendiamo una raccolta di informazioni su un tema d’interesse volta a rispondere a interrogativi specifici, ad esempio la sicurezza nelle transazioni online oppure l’economia della sardegna tra le guerre mondiali. Sarebbe auspicabile, e consigliabile, che la ricerca approfondisse, in modo scientifico e razionale, un tema trattato durante l’anno scolastico e che questa attività sia configurabile come una esperienza, come suggerisce la normativa. Dovrà essere evidente, dal lavoro che si presenta, che l’esperienza di ricerca ha consentito di maturare delle competenze e delle abilità nel metodo e nelle tecniche di ricerca oltre che nell’approfondimento del tema scelto.

Il percorso multidisciplinare solitamente aggrega attorno ad un tema (es. la seconda guerra mondiale oppure le telecomunicazioni) una serie di argomenti del programma svolto durante l’anno in discipline diverse.

 Nel caso (a) si presenterà il progetto e la documentazione a corredo dello stesso ed eventualmente il prototipo, nel caso (b) la tesina che documenta il lavoro svolto ed evidenzia i risultati della ricerca, nel caso (c) un documento di sintesi sul sul percorso multidisciplinare. In tutti i casi sarà bene preparare un documento da stampare e consegnare alla commissione e un documento di ausilio alla presentazione in forma di diapositive o ipertesto. Due documenti da curare nella sostanza, ma anche nella forma, ne riparleremo.

C’è qualcosa che non va

Onda elettromagnetica polarizzata circolarmente e linearmente. I vettori associati alle linee rosse rappresentano il campo elettrico. C'è qualcosa che non va?Parla, elenca, riporta, usa correttamente l’italiano, scandisce le parole, è simpatico e ha tante cose dire, tutte opportune e pertinenti, ma basta un ‘perchè?’ per bloccarlo. Incapace di proseguire, ti guarda muto. Il fiume di parole si è seccato sul terreno del perché e su quello del per cosa serve,  e quasi ti senti in colpa, per quella domanda inattesa.

C’è qualcosa che non va e il problema è quello di sapersi muovere tra teoria e pratica. Comprendere la teoria e non solo studiare e conoscere la teoria. Saper andare oltre, sapersi servire della teoria, inserendola nelle strutture cognitive a supporto di nuovi e più completi metodi di ragionamento. Continue reading C’è qualcosa che non va

SOLE

bimbo al computerSelf Organized Learning Environments (SOLE) – “Luoghi di apprendimento auto-organizzati”. Bambini che imparano insieme, senza insegnante, possibile? sembrerebbe proprio di si a sentire (in questo video)  Sugata Mitra.

Lo stesso metodo è utilizzato in CoderDojo laboratori di programmazione per bambini che stanno riscuotendo sucesso in mezzo mondo. Oggi il Coderdojo si tiene a Milano, se ne può leggere nell’apposito sito.

Un esperienza da studiare per chi insegna programmazione.

Sei un insegnante? trasformati in una nonna!

Tutti sanno

logo di aladdin - laboratorio divulgazione didattica informaticaUn giorno, dei miei primi in una sala prof, una collega raccontava e rideva a proposito di un suo giovane nipote, neolaureato in informatica, che in una allegra cena di famiglia aveva detto di non conoscere word. “Hahahaha, ma figurati! solo perchè gli ho chiesto di spiegarmi come ruotare la pagina” e tutti ridevano “hahaha”. Timidamente feci osservare che forse, il neodottore non sapeva come ruotare la pagina su ‘word’, ”hahahaha, scherzi? è laureato in informatica!”. Provai a spiegarmi meglio, ma quando la collega cambiò tono iniziando a parlare come si fà ad un bambino impertinente risi anche io “hahaha figurati, ma quando mai….avrà pur dato l’esame di word, dove si è laureato?….a Pisa! ma figurati”.

Ogni giorno abbiamo a che fare con questa idea errata e fuorviante dell’informatica, giovani alunni spiazzati da contenuti e attività proposte, genitori che non capiscono come sia possibile una insufficienza in informatica dato che il pargolo con il computer “…è bravo, lo chiamano anche  i vicini di casa”.
I danni che questo fatto comporta sono innumerevoli, i promotori di Aladdin provano ad affrontare il problema con una serie di iniziative mirate alla divulgazione della cultura dell’informatica, a orientare maggiormente gli studi sulla conoscenza della disciplina  e alla diffusione dello spirito e della curiosità che anima gli studiosi che si occupano di informatica. Tutti noi, essendo parte in causa, abbiamo il dovere di contribuire. Speriamo bene.