Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Programme qui manipule une liste chaînée
- ; Nilovna Bascunan-Vasquez
- ; Stephan Michaud
- ;
- ; ; // Lit la liste (à l'envers)
- loop_i: LDA mLength,i
- CALL new ; X = new Maillon(); #mVal #mNext
- CHARI mVal,x ; X.val = getChar();
- LDBYTEA mVal,x ; if (caractère == fin de ligne) break;
- CPA 0xA,i
- BREQ out
- LDA head,d
- STA mNext,x ; X.next = head;
- STX head,d ; head = X;
- BR loop_i
- ;
- ; ; // Affiche la chaine de caractères à l'envers
- out: LDX head,d
- loop_out:CPX 0,i
- BREQ fin ; for (X=head; X!=null; X=X.next) {
- CHARO mVal,x
- LDX mNext,x
- BR loop_out ; } // fin for
- CHARO '\n',i ; // Saut de ligne
- ; // Affiche la chaine de caractères à l'endroit
- fin: STOP
- head: .BLOCK 2 ; #2h tête de liste (null (aka 0) si liste vide)
- ;
- ;******* Structure de liste d'octets
- ; Une liste est constituée d'une chaîne de maillons.
- ; Chaque maillon contient une valeur, l'adresse du maillon suivant et
- ; l'adresse du maillon précédent
- ; La fin de la liste est marquée arbitrairement par l'adresse 0
- mVal: .EQUATE 0 ; #2d valeur de l'élément dans le maillon
- mNext: .EQUATE 1 ; #2h maillon suivant (null (aka 0) pour fin de liste)
- mPrev: .EQUATE 3 ; #2h maillon précédent (null (aka 0) pour début de liste)
- mLength: .EQUATE 5 ; taille d'un maillon en octets
- ;
- ;
- ;******* operator new
- ; Precondition: A contains number of bytes
- ; Postcondition: X contains pointer to bytes
- new: LDX hpPtr,d ;returned pointer
- ADDA hpPtr,d ;allocate from heap
- STA hpPtr,d ;update hpPtr
- RET0
- hpPtr: .ADDRSS heap ;address of next free byte
- heap: .BLOCK 1 ;first byte in the heap
- .END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement