Tablouri

Declararea tablourilor

Variabilele se declara prin sintaxa:

[nume] db|dw|dd valoare [, valoare ...]

Numele este optional. Daca dam o singura valoare, variabila este simpla. Daca dam mai multe valori, variabila este de fapt de tip tablou. Asta inseamna ca:

Variabilele de tip db pot fi initializate cu un caracter sau sir de caractere date intre caractere apostrof. Variabilele de orice tip pot fi initializate cu constructia

numar dup (valoare)

aceasta fiind echivalenta cu un sir de lungime numar de valori identice cu valoare. Aceste constructii pot fi combinate.

Exemple

a dw 10, 13, 16, 3000 ; tablou de 4 cuvinte (8 octeti) cu
                       ; valorile initiale date
b db 'Text', 10, 13 ; tablou de 6 octeti
c db 84, 101, 120, 116, 10, 13 ; tablou de 6 octeti, avand acelasi
                       ; continut ca si b
d dd 100 dup (1) ; tablou de 100 dublu-cuvinte (400 octeti) de
                       ; valoare 1. Primul octet, al cincilea, al noualea
                       ; si asa mai departe (din 4 in 4) au valoarea 1,
                       ; ceilalti 0
e dw 50 dup (?) ; 50 cuvinte (100 octeti) cu valoare initiala
                       ; neprecizata

In toate cazurile, numele dat variabilelor este de fapt o eticheta asociata adresei de inceput a variabilei.

Folosirea tablourilor

In toate instructiunile in care putem da ca operand o locatie de memorie putem pune si un element dintr-un tablou. De fapt, operandul este locatia de memorie de la adresa data in instructiune (daca operandul este o variabila simpla, adresa este de obicei o constanta; daca operandul este un element dintr-un tablou, adresa se calculeaza ca adresa de inceput plus indexul inmultit cu dimensiunea elementului (indexul fiind considerat de la 0).

Adresa poate fi data ca:

Constanta este de obicei adresa unei etichete.

Exemple

  1. Se cere insumarea elementelor unui tablou
    Rezolvare 1
    Rezolvare 2 Aici numarul elementelor este calculat pornind de la diferenta intre adresa tabloului si adresa obiectului situat in memorie imediat dupa
    Rezolvare 3 Aici tinem minte direct adresa elementului curent, in loc de index.
  2. Sa se genereze reprezentarea zecimala a unui numar dat.
    Rezolvare

Exercitii

  1. Sa se scrie un program care construieste oglinditul unui sir de caractere
  2. Sa se inverseze un sir de caractere (adica la fel ca in problema precedenta, dar rezultatul se genereaza in aceeasi variabila (se scrie peste).
  3. Se da reprezentarea zecimala a unui numar. Sa se calculeze numarul.


Arhitectura calculatoarelor

20 Nov 2001
Radu-Lucian LUPSA