Vediamo un esempio di utilizzo dei vettori in Assembly.
In particolare vogliamo capire come si effettuano elaborazioni che riguardano tutti gli elementi. Vedremo come si impiega un ciclo iterativo in modo da accedere in sequenza a ciascun elemento del vettore.
Problema
Dato un vettore contenente 10 valori a 8 bit sommare 2 a ogni elemento.
Analisi e progetto
Il vettore sarà inizializzato con una lista di valori all’atto della dichiarazione. Il programma dovrà effettuare una scansione del vettore elemento per elemento e sommare il valore 2 all’elemento corrente. Al termine del programma tutti gli elementi del vettore avranno il loro valore aumentato di 2.
Dati
nElem variabile di tipo intero a 8 bit (contiene il numero degli elementi inseriti nel vettore);
vett vettore di 10 elementi di tipo intero a 8 bit;
i variabile di tipo intero a 8 bit (contatore ).
Algoritmo in pseudocodice
Programma sommVet Inizio vett <-- (06h,00h,02h,01h,05h,01h,03h,01h,09h,01h); i <-- 0; nElem <-- 10; mentre (i<nElem) esegui vett[i]<-- vett[i] + 2; i = i +1; FineMentre Fine.
Codice sorgente
.model small .stack 100h .data vett db 49h, 54h, 49h, 53h, 20h, 53h, 43h, 41h, 4eh, 4fh ;vettore di 10 elementi nElem dw 0Ah ;contiene il numero di elementi del vettore .code inizio: mov ax,@data mov ds,ax mov si,0000h ; inizializzazione di si mov cx,nElem ; inizializzazione di cx inizioCiclo: ; ciclo di scansione del vettore cmp si,cx jnb fineMentre add vett[si],02h ;aggiorno il valore dell'elemento corrente inc si jmp inizioCiclo fineMentre: ;esce dal ciclo dopo 10 iterazioni mov ah,4Ch int 21h end inizio |
Il programma proposto utilizza un ciclo a controllo in testa (precondizionato) e scansiona il vettore dal primo elemento all’ultimo (senza saltarne).
Proposte di lavoro
1. Verifica il funzionamento del programma.
2. Sviluppa un programma per lo stesso problema che utilizzi un ciclo di tipo ‘loop‘.
3. Modifica il programma in modo che fornisca in output il vettore dopo la modifica degli elementi. (Visualizzazione).
4. Modifica il programma in modo che acquisisca in input il valore degli elementi del vettore. (Caricamento).
Buon lavoro!