Vettori in Assembly: media dei valori

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!