; ******************************************************************************* ; Programme: DECIMAL1.TXT version PEP813 sous Windows ; ; version 1 - nombre positif seulement ; ; Programme qui lit un nombre à l'écran à partir de caractères ASCII. ; Ce nombre doit être numérique et ne doit pas excéder la limite de 32767. ; ; auteur: Bernard Martin ; code permanent: non applicable ; courriel: martin.bernard@uqam.ca ; date: été 2020 ; cours: INF2171 ; ******************************************************************************* ; STRO bienvenu,d ; message de bienvenue à afficher ; ; lire à l'entrée, les caractères un par un ; lire: CHARI caract,d LDA 0,i LDBYTEA caract,d ;analyse du caractère lu CPA "\n",i ;caractère "Entrée" ? BREQ finlire ;oui, on termine la saisie ; ; multiplication par 10 du nombre déjà saisi ; et vérification si le nombre excède 32767 (débordement) ; ; ex: 1234 est construit par 1*10+2=12, 12*10+3=123, 123*10+4=1234 ; ; ; le caractère lu doit être compris entre 0 et 9 ; CPA '0',i BRLT pasnombr CPA '9',i BRGT pasnombr SUBA '0',i ;transformons le caractère ASCII en décimal LDX nbcaract,d ;un caractère numérique lu de plus ADDX 1,i STX nbcaract,d ; multiplions par 10 le nombre actuel afin d'y additionner le caractère lu ; LDX nombre,d ;inutile de multiplier si le nombre est égal à 0 BREQ pasmult ASLX ; * 2 BRV déborde ASLX ; * 4 BRV déborde ADDX nombre,d ; * 5 BRV déborde ASLX ; * 10 BRV déborde STX nombre,d pasmult: ADDA nombre,d BRV déborde STA nombre,d BR lire ; finlire: LDA nbcaract,d ;avons-nous au moins un caractère numérique ? BREQ vide STRO réponse,d ;affichage du nombre en décimal DECO nombre,d STRO normale,d ;fin normale du programme BR finnorm vide: STRO msgvide,d ;seulement le caractère "Enter" a été entré BR finanorm pasnombr:STRO msgerreu,d ;caractère non compris entre 0 et 9 BR finanorm déborde: STRO msgdébor,d ;nombre > 32767 finanorm:STRO anormale,d ;fin anormale du programme finnorm: STOP ; ; variables ; N.B. Il est préférable d'afficher un long message sur plusieurs lignes car la largeur ; de la fenêtre d'output de PEP/8 n'est que de 52 caractères par défaut. bienvenu:.ASCII "Bienvenue à ce programme de lecture d'un nombre positif.\n\n" .ASCII "Entrez un nombre positif svp: \x00" réponse: .ASCII "\nLe nombre lu est: \x00" msgerreu:.ASCII "\nUn caractère non numérique a été entré.\n\n\x00" msgdébor:.ASCII "\nLe nombre excède la limite de 32767.\n\n\x00" msgvide: .ASCII "\nAucun caractère n'a été entré.\n\n\x00" anormale:.ASCII "Fin anormale du programme.\x00" normale: .ASCII "\n\nFin normale du programme.\x00" nombre: .BLOCK 2 ; #2d nbcaract:.BLOCK 2 ; #2d nombre de caractères lus caract: .BLOCK 1 ; #1h .END