Che materia stai cercando?

Allocazione di interi in un vettore

Appunti con esempio di Calcolatori elettronici I del prof. Canonico sul loop per l'allocazione di interi in un vettore: il vettore, la variabile numerica, l'indirizzo di memoria dell’array, la dichiarazione del vettore, i codici operativi, l’utilizzo di un loop.

Esame di Calcolatori elettronici I docente Prof. R. Canonico

Anteprima

ESTRATTO DOCUMENTO

LOOP PER ALLOCAZIONE DI INTERI IN UN VETTORE

Attraverso questo esercizio ci prefiggiamo di allocare un vettore di n posizioni con i primi n numeri naturali, tramite

l’utilizzo di un loop.

Cominciamo col definire tutto ciò che ci occorre per completare l’esercizio. Ciò che serve è:

un vettore;

• una che ci dica allocare;

variabile numerica quante posizioni

• una che ci permetta di voluti all’interno del vettore.

variabile, inserire i valori

Volendo partire col dichiarare ciò che abbiamo detto, abbiamo:

$8100

ORG

VET 10

DS.W

In realtà abbiamo con questa istruzione allocato solamente dello spazio per porre in memoria i numeri del vettore. Le

altre due variabili saranno dei registri di sistema. Questo consente al sistema di generare del codice più corto e di

accedere alla memoria meno frequentemente, facendo risultare il processo più veloce.

Una volta che sappiamo su cosa possiamo operare, possiamo procedere alla progettazione del nostro codice. Facciamo

una riflessione: il nostro programma sa dove prelevare e dove scrivere i dati, se gli vengono specificati di volta in volta

gli indirizzi. Se avessimo un vettore di 1000 posizioni sarebbe disumano pensare di poter scrivere gli indirizzi di ogni

singola cella di memoria componente il vettore. Dunque possiamo fare in modo di prendere il primo indirizzo del

vettore e di incrementarlo di volta in volta, sino a riempirlo tutto. Come sappiamo, l’Asim fa uso delle cosiddette label,

vale a dire delle etichette che contraddistinguono una certa locazione di memoria. In altre parole utilizzare una label

all’interno del nostro algoritmo equivale a fornire l’indirizzo della locazione di memoria, alla quale vogliamo riferirci.

vett ---- ----

9000 9001 9002

Supponiamo di avere definito un array di tre posizioni e di averlo chiamato Scrivere vett all’interno dell’algoritmo

vett.

oppure 9000, cioè il suo indirizzo di memoria, avrebbe pari risultato. Ma come raggiungere le posizioni 9001 e 9002

che non hanno un nome? È sufficiente copiare il primo indirizzo di memoria dell’array in un registro indirizzi,

di volta in volta, incrementare il valore e in questo modo avere accesso alle altre posizioni.

Chiariamoci ulteriormente le idee facendo un confronto tra l’asim e il C++. Quando vogliamo accedere in C++ ad un

array attraverso puntatore, basta assegnare al puntatore il nome dell’array, questo perché al nome dell’array

corrisponde l’indirizzo di memoria dal quale l’array parte e dunque al puntatore viene assegnato il valore dell’indirizzo.

a[10]; //dichiarazione del vettore.

int p; //dichiarazione del puntatore al vettore.

int*

p=a; //assegnazione dell’indirizzo di memoria al puntatore.

(*(p+1))=3; //abbiamo assegnato alla locazione a[1] il valore 3.

In modo del tutto analogo avviene il processo all’interno dell’Asim. Capito il meccanismo, il nostro compito diventa

molto più semplice. Suddividiamo il codice in due parti, la fase iniziale di preparazione dei dati e la fase di

assegnazione dei valori al vettore vera e propria.

START

Affrontiamo in questa sezione la preparazione di tutto ciò che deve essere allocato. Carichiamo allora l’indirizzo della

prima cella del vettore all’interno del registro indirizzi e poniamo il valore costante 10, all’interno di un registro dati.

$8000

ORG

START #VET,A0

MOVEA.L #10,D0

MOVE.B

Domanda – I codici operativi della prima e della seconda istruzione sembrano diversi, perché hanno lo

stesso effetto?

Nel primo caso l’indirizzo del vettore viene mosso all’interno di un registro indirizzi, invece nel secondo caso è un

VET

valore costante ad essere copiato all’interno di un registro dati. Pertanto nel primo caso occorre usare il (move

MOVEA

nel secondo un semplice

address), MOVE.

LOOP

L’utilizzo di codici operativi semplici permettono sì una rete di controllo più semplice del sistema, ma alle volte

impediscono la facile implementazione di alcune operazioni. In questo caso c’è bisogno di operare dieci assegnazioni,

se stessimo nel C++ potremmo scrivere cioè vale a dire

fin quando il valore di i rimane al di sotto di 10,

(i<10), Fare questo tipo di operazione in

compara il valore attuale i con il 10 finché i non rimane al di sotto di questo valore.

Asim è decisamente complesso, per cui non ci rimane che optare per una soluzione più semplice. Eseguiamo un ciclo a

decremento e al processore di sottrarre il valore 1 a 10 ad ogni ciclo ed il risultato viene assegnato man mano

diciamo

all’interno delle caselle, finché questo non diventa 0. Dunque D0 funge sia da contatore e sia da valore di input da

posizionare all’interno del vettore.


PAGINE

2

PESO

76.17 KB

PUBBLICATO

+1 anno fa


DETTAGLI
Corso di laurea: Corso di laurea in ingegneria informatica
SSD:
A.A.: 2013-2014

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher valeria0186 di informazioni apprese con la frequenza delle lezioni di Calcolatori elettronici I e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Napoli Federico II - Unina o del prof Canonico Roberto.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Calcolatori elettronici i

Quaderno appunti presi a lezione con esercizi esame svolti
Appunto
Calcolatori elettronici I - Esercizi sugli Automi
Esercitazione
Calcolatori Elettronici I - Appunti e esercizi
Appunto
Calcolatori elettronici I - analisi
Appunto