1 ; Programme qui manipule une liste chaînée
4 ; ; // Lit la liste (à l'envers)
8 BRLE out ; for(cpt=10; cpt>0; cpt--) {
10 CALL new ; X = new Maillon(); #mVal #mNext
11 DECI mVal,x ; X.val = getInt();
13 STA mNext,x ; X.next = head;
14 STX head,d ; head = X;
18 BR loop_in ; } // fin for
20 ; ; // Affiche la liste
23 BREQ fin ; for (X=head; X!=null; X=X.next) {
25 CHARO ' ',i ; print(X.val + " ");
27 BR loop_out ; } // fin for
29 head: .BLOCK 2 ; #2h tête de liste (null (aka 0) si liste vide)
30 cpt: .BLOCK 2 ; #2d compteur de boucle
32 ;******* Structure de liste d'entiers
33 ; Une liste est constituée d'une chaîne de maillons.
34 ; Chaque maillon contient une valeur et l'adresse du maillon suivant
35 ; La fin de la liste est marquée arbitrairement par l'adresse 0
36 mVal: .EQUATE 0 ; #2d valeur de l'élément dans le maillon
37 mNext: .EQUATE 2 ; #2h maillon suivant (null (aka 0) pour fin de liste)
38 mLength: .EQUATE 4 ; taille d'un maillon en octets
42 ; Precondition: A contains number of bytes
43 ; Postcondition: X contains pointer to bytes
44 new: LDX hpPtr,d ;returned pointer
45 ADDA hpPtr,d ;allocate from heap
46 STA hpPtr,d ;update hpPtr
48 hpPtr: .ADDRSS heap ;address of next free byte
49 heap: .BLOCK 1 ;first byte in the heap