1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| ;ce prog calcule le nombre des chiffres d'un nombre ainsi que le nombre
;des séparateurs (nbr des séparateurs calculé sert pour tester si le nombre est erroné ou pas
;si on a 0 ==> le prog affiche nbr car = 0 et nbr sep = 0
;si on a 0.23 ==> le prog affiche nbr car = 4 et nbr sep = 1
;si on a 10..23 ==> le prog affiche nbr car = 6 et nbr sep = 2 ==> nombre erroné
lda 0, i
sta nbCar, d
ldx 0, i
stx nbSep, d
boucle1: chari sCar, d ;compter le nombre des caracteres
ldbytea sCar, d
cpa 0x0A, i ;fin de la ligne
breq fboucle1 ;si fin ligne ==> aller au traitement après la boucle
ldx nbCar, d ;initialiser x par nbCar pour l'augmenter et le stocker de nouveau à nbCar
addx 1, i
stx nbCar, d
cpa ".", i
brne orSep ;si != "." ==> re-boucle sinon continue
ldx nbSep, d ;initialiser x par nbSep pour l'augmenter et le stocker de nouveau à nbSep
addx 1, i ;sinon ajouter 1
stx nbSep, d ;nbSep := x de nouveau
cpVirg: cpa ",", i
brne boucle1 ;si != "," ==> re-boucle sinon continue
ldx nbSep, d ;initialiser x par nbSep pour l'augmenter et le stocker de nouveau à nbSep
addx 1, i ;sinon ajouter 1
stx nbSep, d ;nbSep := x de nouveau
br boucle1
fboucle1: deco nbCar, d ;juste pour test
charo 0x0A, i ;juste pour test
deco nbSep, d ;juste pour test
lda nbSep, d
cpa 0, i
brgt errNbr
stop
orSep: br cpVirg
;variables
sCar: .block 1 ;#1c ;le caractère lu
nbCar: .block 2 ;#2d ;nombre des caractères
nbSep: .block 2 ;#2d ;nombre des séparateurs
errNbr: stro errNbrm, d
stop
;variables msg
errNbrm: .ASCII "nombre erroné\x00"
.end |
Partager