Advertisement
Guest User

Untitled

a guest
Aug 13th, 2017
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
E 2.11 KB | None | 0 0
  1. ; Programme qui manipule une liste chaînée
  2. ; Nilovna Bascunan-Vasquez
  3. ; Stephan Michaud
  4. ;
  5. ;                            ; // Lit la liste (à l'envers)
  6.  
  7. loop_i:  LDA     mLength,i  
  8.         CALL    new         ;   X = new Maillon(); #mVal #mNext
  9.         CHARI   mVal,x      ;   X.val = getChar();
  10.         LDBYTEA mVal,x      ;    if (caractère == fin de ligne) break;
  11.         CPA     0xA,i
  12.         BREQ    out
  13.         LDA     head,d      
  14.         STA     mNext,x     ;   X.next = head;
  15.         STX     head,d      ;   head = X;
  16.         BR      loop_i
  17.  
  18. ;
  19. ;                            ; // Affiche la chaine de caractères à l'envers
  20. out:     LDX     head,d      
  21. loop_out:CPX     0,i        
  22.          BREQ    fin         ; for (X=head; X!=null; X=X.next) {
  23.          CHARO   mVal,x      
  24.          LDX     mNext,x    
  25.          BR      loop_out    ; } // fin for
  26.          CHARO   '\n',i      ; // Saut de ligne
  27.                              ; // Affiche la chaine de caractères à l'endroit
  28.  
  29. fin:     STOP                
  30. head:    .BLOCK  2           ; #2h tête de liste (null (aka 0) si liste vide)
  31. ;
  32. ;******* Structure de liste d'octets
  33. ; Une liste est constituée d'une chaîne de maillons.
  34. ; Chaque maillon contient une valeur, l'adresse du maillon suivant et
  35. ;  l'adresse du maillon précédent
  36. ; La fin de la liste est marquée arbitrairement par l'adresse 0
  37. mVal:    .EQUATE 0           ; #2d valeur de l'élément dans le maillon
  38. mNext:   .EQUATE 1           ; #2h maillon suivant (null (aka 0) pour fin de liste)
  39. mPrev:   .EQUATE 3           ; #2h maillon précédent (null (aka 0) pour début de liste)
  40. mLength: .EQUATE 5           ; taille d'un maillon en octets
  41.  
  42. ;
  43. ;
  44. ;******* operator new
  45. ;        Precondition: A contains number of bytes
  46. ;        Postcondition: X contains pointer to bytes
  47. new:     LDX     hpPtr,d     ;returned pointer
  48.         ADDA    hpPtr,d     ;allocate from heap
  49.         STA     hpPtr,d     ;update hpPtr
  50.         RET0                
  51.  
  52. hpPtr:   .ADDRSS heap        ;address of next free byte
  53. heap:    .BLOCK  1           ;first byte in the heap
  54.         .END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement