Felder

Felder werden wie normale Variablen deklariert. Der einzige Unterschied
sind die Dimensionsangaben:

	int a[10];
	
Dieses Feld kann "10" short Zahlen speichern. Um in ein Feld zu schreiben
verwenden wir einen speziellen move Befehl:

	move_i_a    L0, a, L1;
	
Das erste Argument ist der zu schreibende Wert, der zweite ist das Feld und
der dritte ist der Feldindex.

Aus einem Feld lesen:

	move_a_i    a, L1, L0;
	
        array.na

     1| int a[10];
     2|
     3| push_i    0, L0;
     4| push_i    9, L1;
     5|
     6| lab init_a;
     7|     move_i_a    L0, a, L0;
     8|     inc_l       L0;
     9|     lseq_l      L0, L1, L2;
    10|     jmp_l       L2, init_a;
    11|
    12| push_i    0, L0;
    13| push_i    1, L2;
    14|
    15| lab print_a;
    16|     move_a_i    a, L0, L3;
    17|     print_l     L3;
    18|     print_n     L2;
    19|     inc_l       L0;
    20|     lseq_l      L0, L1, L4;
    21|     jmp_l       L4, print_a;
    22|
    23| push_i    0, L0;
    24| exit      L0;
    

Befehle

    L = long Register, D = double Register
    BV = byte Variable, IV = int Variable, LV = long int Variable
    DV = double Variable
    LI = array index
    

Register zu Feld

    move_i_a        L, IV, LI;
    move_l_a        L, LV, LI;
    move_d_a        D, DV, LI;
    move_b_a        L, BV, LI;
    

Feld zu Register

    move_a_i        IV, LI, L;
    move_a_l        LV, LI, L;
    move_a_d        DV, LI, D;
    move_a_b        BV, LI, L;
    

Feld freigeben

Um den Speicher, den ein Feld belegt freizugeben, kann "dealloc" verwendet werden.
Wenn ein Programm versucht ein freigegebenes Feld zu lesen oder zu schreiben, dann wird
ein "overflow" Fehler ausgegeben.

    dealloc         a;      Feld "a" freigeben
    
Nano gibt alle Variablen am Programmende frei.
Man kann es dazu verwenden um die Feldgrösse zu verändern.


Feldgrösse verändern

Um die Feldgrösse zu verändern, müssen wir es zuerst freigeben. Danach deklarieren wir es
mit einer neuen Grösse.
Das sieht wie folgt aus:

    int size;

    push_i          10, L0;
    pull_i          L0, size;
    
    int a[size];                       Platz für 10 int Variablen

    ...
    
    dealloc         a;                 Feld freigeben

    push_i          20, L0;
    pull_i          L0, size;
    
    int a[size];                       Platz für 20 int Variablen
    
Prev: Sprünge | Next: Strings