; ********************************************************************* ; Programme: SOUS5.TXT version PEP813 sous WINDOWS ; ; Programme qui appelle un sous-programme qui retourne la sommation ; des valeurs d'un tableau dont le nombre d'éléments et l'adresse ; sont fournis sur la pile.(SXF) ; ; auteur: Bernard Martin ; code permanent: non applicable ; courriel: martin.bernard@uqam.ca ; date: hiver 2020 ; cours: INF2171 ; ********************************************************************* ; ; lecture des éléments du tableau "nombres" ; dont le dernière valeur est 0 ; LDA 0,i ; nombre d'éléments du tableau LDX 0,i STRO message,d lecture: DECI nombres,x ; élément du tableau BREQ finlire ADDX 2,i ; élément suivant ADDA 1,i ; 1 élément de plus BR lecture ; ; copie l'adresse du tableau "nombres" sur la pile ; finlire: STA -2,s ; nombre d'éléments du tableau LDA nombres,i ; adresse du tableau STA -4,s ; sauve sur la pile LDA 4,i SUBSP 4,i ; #taille #tableau ; CALL SOUS5 ; appel à la routine de sommation ; STRO somme,d DECO 0,s ; affichage du nombre maximum ADDSP 2,i ; on enlève de la pile #taille STOP message: .ASCII "Entrez les nombres (0-pour terminer):\n\x00" somme: .ASCII "\nLa somme des nombres est: \x00" ; ; ;SOUS5: retourne la somme des éléments d'un tableau ; ;IN: SP+0=adresse du tableau ; SP+2=nombre d'éléments du tableau ; ;OUT: SP+0=la somme du tableau ; sauveA: .EQUATE 0 ; #2h sauveX: .EQUATE 2 ; #2h retour: .EQUATE 4 ; #2h tableau: .EQUATE 6 ; adresse du tableau #2h taille: .EQUATE 8 ; taille du tableau #2h ; SOUS5: SUBSP 4,i ; #sauveX #sauveA STA sauveA,s STX sauveX,s LDA taille,s ASLA ; 2 octets pour chaque élément du tableau STA taille,s LDA 0,i ; somme=0 LDX 0,i addition:CPX taille,s BREQ finsom ADDA tableau,sxf ADDX 2,i BR addition ; finsom: STA taille,s ; sommation LDA retour,s STA tableau,s ; adresse de retour LDA sauveA,s ; registre A original LDX sauveX,s ; registre A original ADDSP 6,i ; désempilons #sauveA #sauveX #retour RET0 ; nombres: .BLOCK 8 ; #2d4a tableau d'une grandeur illimitée dont on ne voit que les 4 premiers .END