; notes de cours de Philippe Gabrini chapitre 9.4.4 ; Passage de paramètres qui se trouvent déjà sur la pile ; LDA 5,i ; param1 STA -6,s LDA 10,i ; param2 STA -4,s SUBSP 6,i ; #result #parm2 #parm1 CALL ROUTINE STRO msgsomme,d DECO 0,s ; ADDSP 2,i ;#result STOP msgsomme:.ASCII "\n\nLa somme des nombres est: \x00" ; ;ROUTINE: ; reçoit 2 paramètres et en fait la somme -> résultat ; rempli un vecteur de 7 nombres signés quelconque ; appelle un sous-programme Tri qui affiche vecteur[3] ; ; IN: SP+0=param 1 ; SP+2=param 2 ; SP+4=résultat futur (somme) ; ; OUT: SP+0=résultat ; reg A: effacé ; reg X: effacé ; var1: .EQUATE 0 ;#2h var2: .EQUATE 2 ;#2h vecteur: .EQUATE 4 ;#2h7a retour: .EQUATE 18 ;#2h parm1: .EQUATE 20 ;#2h parm2: .EQUATE 22 ;#2h result: .EQUATE 24 ;#2h ; ROUTINE: SUBSP 18,i ; #vecteur #var2 #var1 LDA parm1,s ADDA parm2,s STA result,s ; initialiser vecteur avec les nombres 0 à 6 LDA 0,i LDX 0,i initV: STA vecteur,sx ADDA 1,i ADDX 2,i CPX 14,i ; vecteur[7] ? BRLT initV ; MOVSPA ; copie valeur SP ADDA vecteur,i ; ajouter le déplacement STA -2,s ; placer sur la pile SUBSP 2,i ; ajuster pointeur pile #AdVect CALL Tri ; Tri(vecteur); LDA retour,s STA parm2,s ; conserve la somme de parm1 + parm2 ADDSP 22,i ; #var1 #var2 #vecteur #retour #parm1 RET0 ; Tri: ; reçoit un pointeur à un vecteur de 7 nombres signés quelconque ; affiche vecteur[3] ; ; IN: SP+0=adresse d'un vecteur de 7 éléments ; ; OUT: rien ; reg X: effacé ; retourT: .EQUATE 0 ; #2h AdVect: .EQUATE 2 ; #2h ; Tri: LDX 6,i ; 4éme élément du vecteur d'entiers DECO AdVect,sxf ; affiche vecteur[3] LDX retourT,s STX AdVect,s RET2 ; #retour .END