1 ; Programme qui manipule des produits
10 ; ****** main1: Initialise et affiche un produit global
13 STA produitA,x ; produitA->code = 1;
16 STA produitA,x ; produitA->prix = 1495;
19 STA produitA,x ; produitA->nom = nomA;
21 CALL prprod ; prprod(produitA);
23 produitA:.BLOCK 6 ; #prCode #prPrix #prNom
24 nomA: .ASCII "Un clavier\x00"
26 ; ****** main2: Initialise et affiche un produit local (dans la pile)
27 main2: SUBSP 6,i ; #prNom #prPrix #prCode
30 STA produitB,sx ; produitB->code = 2;
33 STA produitB,sx ; produitB->prix = 1395;
36 STA produitB,sx ; produitB->nom = nomB;
39 CALL prprod ; prprod(produitB);
40 RET6 ; #prNom #prPrix #prCode
41 produitB:.EQUATE 0 ; #prCode #prPrix #prNom
42 nomB: .ASCII "Une souris\x00"
44 ; ****** main3: Initialise et affiche un produit dans le tas
45 main3: SUBSP 2,i ; #produitC
47 CALL new ; produitC = malloc(6) #prCode #prPrix #prNom
50 STA prCode,x ; produitC->code = 3;
52 STA prPrix,x ; procduitC->prix = 1995;
54 STA prNom,x ; produitC->nom = nomC;
56 CALL prprod ; prprod(produitC);
58 produitC:.EQUATE 0 ; #2h
59 nomC: .ASCII "Clé usb\x00"
60 ; ****** Structure produit
61 prCode: .EQUATE 0 ; #2d code du produit
62 prPrix: .EQUATE 2 ; #2d prix du produit en cents
63 prNom: .EQUATE 4 ; #2h nom du produit (pointeur vers chaîne)
65 ; ****** prprod: Affiche un produit
66 ; IN A=adresse du produit (#2h)
67 prprodA: .EQUATE 0 ; #2h paramètre A
68 prprodX: .EQUATE 2 ; #2h sauve X
69 prprdstr:.EQUATE 4 ; #2h adresse du nom du produit (pour STRO)
70 prprod: SUBSP 6,i ; #prprdstr #prprodX #prprodA
71 STA prprodA,s ; range A
72 STX prprodX,s ; sauve X
74 DECO prprodA,sxf ; print(prprodA->prCode)
75 CHARO ':',i ; print(":")
79 STRO prprdstr,sf ; print(prprodA->prNom)
80 CHARO ' ',i ; print(" ")
82 DECO prprodA,sxf ; print(prprodA->prPrix)
83 CHARO '\n',i ; print("\n")
84 LDA prprodA,s ; restaure A
85 LDX prprodX,s ; restaure X
86 RET6 ; #prprdstr #prprodX #prprodA
90 ; Precondition: A contains number of bytes
91 ; Postcondition: X contains pointer to bytes
92 new: LDX hpPtr,d ;returned pointer
93 ADDA hpPtr,d ;allocate from heap
94 STA hpPtr,d ;update hpPtr
96 hpPtr: .ADDRSS heap ;address of next free byte
97 heap: .BLOCK 1 ;first byte in the heap