; ************************************************************ ; Programme: lab_d_9.txt version PEP813 sous Windows ; ; INF2171 - laboratoire sur DECI ; 9) Fusionner le nouveau programme PREMIERx (étape 3) et le programme PREMIER3 qui traite les débordements. ; Ajouter les phrases explicatives au terminal pour l'utilisateur. ; ; auteur: Bernard Martin ; code permanent: non applicable ; courriel: martin.bernard@uqam.ca ; date: hiver 2019 ; cours: INF2171 ; *********************************************************** ; STRO msgbien,d ; début: LDA 32767,i ; valeur maximum possible STA petit,d LDA -32767,i ; valeur minimum possible (-32768 est une exception et sera rejeté) STA grand,d ; STRO msgtexte,d ; nombre demandé DECI nombre,d ; lecture d'un nombre BRV débordem ; il y a débordement si le nombre est > 32767 ou < -32768 BREQ FINI ; si le nombre lu est zéro, on termine définitivement le programme boucle: NOP0 LDX nombre,d CPX -32768,i ; le nombre -32768 est rejeté BRNE accepté STRO msgrejet,d ; et doit »etre relu BR lecture ; accepté: LDA 1,i ; témoin indiquant qu'il y a maintenant un nombre lu valide STA nombrelu,d CPX petit,d ; le plus petit ? BRGT nonpetit STX petit,d ; nonpetit:CPX grand,d ; le plus grand ? BRLT nongrand STX grand,d nongrand:NOP0 lecture: STRO msgtexte,d ; nombre demandé DECI nombre,d ; lecture d'un autre nombre BRV débordem ; il y a débordement si le nombre est > 32767 ou < -32768 BRNE boucle ; zéro termine la sommation ; termine: LDX nombrelu,d BREQ aucun_nb nombreS: STRO msgpetit,d DECO petit,d ; affiche le plus petit nombre lu STRO msggrand,d DECO grand,d ; affiche le plus grand nombre lu CHARO ".",i ; point CHARO "\n",i ; nouvelle ligne BR init ; aucun_nb:STRO msgaucun,d ; il n'y a pas de nombre lu init: LDX 0,i ; témoin indiquant qu'il n'y a pas encore de nombre lu STX nombrelu,d BR début ; débordem:STRO msgrejet,d ; message de débordement, soit > 32767 (ou < -32768) BR lecture ; FINI: STRO msgfin,d 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. msgbien: .ASCII "Bienvenue à ce programme de traitement" .ASCII "\nde nombres avec DECI." .ASCII "\n(le nombre 0 entré au début d'une série de données," .ASCII "\ntermine le programme).\n\x00" msgtexte:.ASCII "\nVeuillez entrer un nombre entre -32767 et +32767" .ASCII "\n(le nombre 0 termine l'entrée d'une série de" .ASCII "\ndonnées):\x00" msgpetit:.ASCII "\nLe plus petit nombre lu est: \x00" msggrand:.ASCII ".\nLe plus grand nombre lu est: \x00" msgaucun:.ASCII "\nAuun nombre n'a été entré.\n\x00" msgrejet:.ASCII "Le nombre doit se trouver entre -32767 et +32767.\n\x00" msgfin: .ASCII "\n\nFin normale du programme.\x00" nombre: .BLOCK 2 ; #2d valeur initiale zéro total: .BLOCK 2 ; #2d valeur initiale zéro petit: .BLOCK 2 ; #2d grand: .BLOCK 2 ; #2d nombrelu:.BLOCK 2 ; #2d (0-aucun nombre lu, 1-au moins un nombre lu valide) ; .END