; Compter et afficher le nombre de bits égaux à "1" dans un mot mémoire. ; Utilisation du code de condition C, touché par le décalage. ; Lorne H. Bouchard (adapté par Ph. Gabrini mars 2006) ; debut: DECI nbLu,d ; CHARO '#',i ; DECO nbLu,d ; CHARO '=',i ; CHARO 'x',i ; LDA nbLu,d ; STA -2,s ; SUBSP 2,i ; CALL HEXO ; CHARO '=',i ; LDA nbLu,d ; BRGE boucle ; if(nbLu < 0) ANDA 0x7FFF,i ; on se débarrasse du bit de signe STA nbLu,d ; LDX 1,i ; STX nombre1,d ; et on le compte boucle: LDA nbLu,d ; while(encore des bits 1) BREQ fini ; ASRA ; décaler A dans C STA nbLu,d ; conserver BRC un ; if(C == 1){ BR boucle ; un: LDA 1,i ; ADDA nombre1,d ; nombre1++; STA nombre1,d ; compter le bit BR boucle ; } fini: DECO nombre1,d ; cout << nombre1; 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 ; res: .WORD 0 indic: .WORD 0 nbLu: .WORD 0 ; nombre lu nombre1: .WORD 0 ; nombre de "1" dans n .END