init: .EQUATE h#0001 nbrep: .EQUATE d#18 loada init,i ;valeur initiale dans A loadx nbrep,i ;nombre de répétitions de la boucle rec: storea nb,d storea d#-2,s addsp d#-2,i jsr Binout ;afficher le nombre en base binaire charo h#20,i ;espace charo h#20,i ;espace hexo nb,d ;afficher le nombre en base hexadécimale charo h#20,i ;espace charo h#20,i ;espace deco nb,d ;afficher le nombre en base décimale charo h#0A,i ;CR/LF ;Choisir ASLA ou ASRA asla ;décalage à gauche du registre A ; asra ;décalage à droite du registre A subx d#1,i ;décrémenter notre compteur de 1 brne rec ;est ce que X = 0 ? si non, aller à "rec" stop nb: .WORD d#0 ;La fonction Binout: ;Un seul parametre: le nombre à afficher en binaire. ;Cette fonction nettoie la pile et conserve les registres A et X originaux REGX: .EQUATE d#0 REGA: .EQUATE d#2 RET: .EQUATE d#4 NBPARAM: .EQUATE d#6 Binout: addsp d#-4,i storea REGA,s storex REGX,s loada NBPARAM,s loadx d#16,i ;le registre X servira de compteur pour la boucle. ;16 bits à imprimer dans le registre A, donc 16 tours ; de boucle à effectuer rep: asla ;décalage à gauche. le bit de gauche du registre est ; transféré dans le flag de retenue (C) brc retenue ;il y a eu un débordement (C=1)? si oui, on branche à ; "retenue" sinon, on continue. charo c#/0/,i br dec ;branchement inconditionnel à "dec" retenue: charo c#/1/,i dec: subx d#1,i ;décrémenter notre compteur brne rep ;compteur arrive à zéro (Z=1)? si oui, on continue ;sinon, on branche à "rep" loada RET,s storea NBPARAM,s loada REGA,s loadx REGX,s addsp d#6,i rts .END