; Compter et afficher le nombre de bits égaux à "1" dans un mot mémoire. ; Lorne H. Bouchard (adapté par Ph. Gabrini mars 2006) ; debut: DECI nbLu,d ; CHARO '#',i ; cout << '#' DECO nbLu,d ; << nbLu décimal CHARO '=',i ; << '=' CHARO 'x',i ; << 'x' LDA nbLu,d ; STA -2,s ; SUBSP 2,i ; CALL HEXO ; << nbLu hexadécimal CHARO '=',i ; << '='; LDA nbLu,d ; BRGE boucle ; ANDA 0x7FFF,i ; on se débarrasse du bit de signe STA nbLu,d ; LDX 1,i ; STX nombre1,d ; mais on le compte boucle: LDA nbLu,d ; BREQ fini ; il n'y a plus de "1" ANDA 1,i ; BREQ zero ; si le bit est "1" LDA 1,i ; ADDA nombre1,d ; STA nombre1,d ; on compte le bit zero: LDA nbLu,d ; ASRA ; on passe au bit suivant STA nbLu,d ; BR boucle ; fini: DECO nombre1,d ; cout << nombre de bits 1 STOP ; ; ; HEXO: routine qui affiche en hexadécimal ; ; IN: SP+0=nombre hexa à afficher ; ; OUT: rien ; car: .EQUATE 0 ; caractère à afficher sauveA: .EQUATE 1 sauveX: .EQUATE 3 retour: .EQUATE 5 nombre: .EQUATE 7 ; donnée à afficher ; HEXO: SUBSP 5,i STA sauveA,s STX sauveX,s LDX 3,i ; 4 caractères à afficher boucleh: LDA nombre,s ROLA ; déplacement du premier caractère vers la droite ROLA ; ROLA ; ROLA ; STA nombre,s ; prochaine position ROLA ; ANDA 0x000F,i ; élimination des 3 autres caractères ADDA '0',i ; conversion en chiffre CPA '9',i ; lettre ? BRLE chiffre ADDA 7,i ; conversion en lettre chiffre: STBYTEA car,s ; caractère à afficher CHARO car,s SUBX 1,i ; caractère suivant BRGE boucleh LDA retour,s ; épilogue STA nombre,s LDA sauveA,s LDX sauveX,s ADDSP 7,i RET0 ; nbLu: .WORD 0 ; nombre lu nombre1: .WORD 0 ; nombre de "1" dans nbLu .END