loadb chaine,i loadx d#-1,i ;-1 parce que l'on rajoute 1 dès le début ; de la boucle.. loada d#0,i next: addx d#1,i ldbyta ,x breq fin compa h#41,i ;'A' brlt next ;pas une lettre?, on branche compa h#5A,i ;'Z' brle lettre ; c'est une lettre -> on branche compa h#61,i ;'a' brlt next ;pas une lettre?, on branche compa h#7A,i ;'z' brle lettre ;c'est une lettre -> on branche br next ;arrivé ici, ça ne peut plus être une lettre... lettre: anda h#DF,i ;A AND 11011111, pour faire une lettre majuscule ;lettre: ora h#20,i ;A OR 00100000, pour faire une lettre minuscule stbyta ,x ;remplacer le caractère dans la string br next ;et recommencer la boucle... fin: loada chaine,i storea d#-2,s addsp d#-2,i jsr Afficher ;Rajouter la fonction afficher après le programme, ; ou mettre l'appel en commentaire stop chaine: .ASCII /Bonjour TOUT le Monde 123/ .BYTE d#0 ;une fois le programme chargé en mémoire, ce byte ; (qui est le caractère nul) suivra la string "Bonjour". ; Il ne faut donc déclarer AUCUNE variable entre .ASCII ; et .BYTE !! ; ------- 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