Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;
- ; ; // Lit la liste (à l'envers)
- LDA 5,i
- STA taille,d
- STA cpt,d
- loop_in: CPA 0,i
- BRLE out ; for(cpt=5; cpt>0; cpt--) {
- LDA mLength,i
- CALL new ; X = new Maillon(); #mVal #mNext
- CHARI caract,d ; X.val = getInt();
- LDA 0,i
- LDBYTEA caract,d ;analyse du caractère lu
- STA mVal,x
- LDA head,d
- STA mNext,x ; X.next = head;
- STX head,d ; head = X;
- LDA cpt,d
- SUBA 1,i
- STA cpt,d
- BR loop_in ; } // fin for
- ;
- ; ; // Affiche la liste
- out: LDX head,d
- STX index,d
- STX min,d
- comp: LDX index,d
- LDA mVal,x
- LDX min,d
- CPA mVal,x
- BRLT changem
- BR tmax
- changem: LDA index,d
- STA min,d
- BR tmax
- tmax: LDX index,d
- LDX mNext,x
- STX index,d
- LDX index,d
- CPX 0,i
- BREQ impr
- BR comp
- impr: LDX min,d
- CHARO mVal,x
- LDA 'z',i
- STA mVal,x
- LDA taille,d
- SUBA 1,i
- STA taille,d
- LDA taille,d
- CPA 0,i
- BREQ fin
- BR out
- fin: STOP
- caract: .BLOCK 1 ; #1h
- vide: .BLOCK 1 ;
- head: .BLOCK 2 ; #2h tête de liste (null (aka 0) si liste vide)
- cpt: .BLOCK 2 ; #2d compteur de boucle
- taille: .BLOCK 2 ; #2d
- index: .BLOCK 2 ; #2d
- min: .BLOCK 2 ; #2d
- ;
- ;******* Structure de liste d'entiers
- ; Une liste est constituée d'une chaîne de maillons.
- ; Chaque maillon contient une valeur et l'adresse du maillon suivant
- ; La fin de la liste est marquée arbitrairement par l'adresse 0
- mVal: .EQUATE 0 ; #1h valeur de l'élément dans le maillon
- mNext: .EQUATE 1 ; #2h maillon suivant (null (aka 0) pour fin de liste)
- mLength: .EQUATE 3 ; 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
Add Comment
Please, Sign In to add comment