boucle1: loadb tableau,i ;tableau de pointeurs loadx index,d ;X=tableau actuel compx MAXLISTE,i ;arrive au bout de la liste? breq pastrouv ;si oui -> on a cherche partout sans le trouver.. loadb ,x ;sinon, on charge un ptr sur le prochain ; tableau a parcourir addx d#2,i ;ajuster X pour le prochain tour de boucle storex index,d ;Et le stocker. loadx d#0,i ;X pointe le 1er nombre du tableau boucle2: compx MAXNBS,i ;arrive au bout du tableau? breq boucle1 loada ,x ;Recuperer un nombre addx d#2,i ;X pointe la prochaine case du tbl compa ATROUVER,i ;C'est le nombre qu'on cherchait? brne boucle2 ;Non? alors on recommence loada msgtrv,i ;Oui -> imprimer l'enplacement du nombre storea d#-2,s addsp d#-2,i jsr Afficher loada index,d ;Numero du tableau actuel *2 asra ;Numero du tableau actuel storea index,d ;On n'a plus besoin de cette variable alors on s'en deco index,d ; sert pour afficher charo c#/,/,i asrx ;diviser par 2 pour avoir l'index actuel storex index,d deco index,d ;et afficher aussi br fin pastrouv:loada msgpastr,i storea d#-2,s addsp d#-2,i jsr Afficher fin: stop index: .WORD d#0 msgtrv: .ASCII /Trouve: / .BYTE d#0 msgpastr:.ASCII /Pas trouve.../ .BYTE d#0 ;Le tableau de pointeurs :) tableau: .ADDRSS L1 ;Pointeur sur la liste 1 (adresse de la liste 1) .ADDRSS L2 ;Pointeur sur la liste 2 .ADDRSS L3 ;Pointeur sur la liste 3 .ADDRSS L4 ;Pointeur sur la liste 4 L1: .WORD d#73 ;Liste 1 .WORD d#40 .WORD d#456 .WORD d#54 .WORD d#387 L2: .WORD d#75 ;Liste 2 .WORD d#15238 .WORD d#53 .WORD d#50 .WORD d#123 L3: .WORD d#81 ;Liste 3 .WORD d#788 .WORD d#24 .WORD d#35 .WORD d#12 L4: .WORD d#55 ;Liste 4 .WORD d#25 .WORD d#86 .WORD d#5 .WORD d#4 ATROUVER:.EQUATE d#123 ;nombre a trouver dans les listes MAXLISTE:.EQUATE d#8 ;nombre de listes de nombres *2 (pour WORDS) MAXNBS: .EQUATE d#10 ;nombre de nombres par liste *2 (pour WORDS) ; ------- Afficher ; Affiche une chaîne de caractères ASCII jusqu'à ce qu'il ; rencontre un caractère nul. Un paramètre qui est ; l'addresse du message sur la pile. ; vieuxX: .EQUATE d#0 ; sauvegarde X vieuxA: .EQUATE d#2 ; sauvegarde A adRet: .EQUATE d#4 ; adresse de retour addrMsg: .EQUATE d#6 ; addresse du message à afficher ; Afficher: ADDSP d#-4,i ; espace local sauvegarde STOREA vieuxA,s ; sauvegarde A STOREX vieuxX,s ; sauvegarde X LOADB addrMsg,s ; B := addresse du message LOADX d#0,i ; X := 0 LOADA d#0,i ; A := 0 EncorA: LDBYTA ,x ; LOOP BREQ FiniA ; EXIT WHEN Message(X) = 0; CHARO ,x ; afficher Message(X); ADDX d#1,i ; X := X + 1; BR EncorA ; END LOOP; FiniA: LOADA adRet,s ; adresse retour STOREA addrMsg,s ; déplacée sur paramètre LOADA vieuxA,s ; restaure A LOADX vieuxX,s ; restaure X ADDSP d#6,i ; nettoyer pile RTS ; .END