Index du forum




Un petit coup de main... Vous pouvez nous aider à mettre ce site à jour: n'hésitez pas à me contacter !!!

* Connexion   * Inscription

* FAQ
Nous sommes actuellement le 12 Juil 2025, 05:42

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Afficher des nombres décimaux en assembleur

Modérateur: poulette73



Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 5 message(s) ] 
  Aperçu avant impression Sujet précédent | Sujet suivant 
Auteur Message
sPOKE
 Sujet du message : Afficher des nombres décimaux en assembleur
Message Publié : 05 Fév 2025, 13:05 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 08 Fév 2012, 18:19
Message(s) : 375
Salut les gars, je me remets un nième fois a l'Assembleur sur CPC :mdr:

Comment faites-vous pour afficher un nombre décimal a l'écran en langage machine ?

Je le fais par division successive en divisant par 1000, 100 et 10 et j'ajoute le reste puis j'affiche a l'écran.

Je trouve ça un peu long et redondant. Avez vous une solution plus courte, utilisant le systeme BCD ou autre ?

Par exemple 15 si tu ajoute 6 tu obtiens 21 donc 0001 0101 en binaire soit 1 et 5.

Mais avec 36 décimal ça marche pas...


Donc je fais : 15 / 10 = 1 reste 5. Facile a afficher a l'écran.

Quel est votre code le plus court pour faire ça ? Merci


Haut
 Profil  
 
marcel
 Sujet du message : Re: Afficher des nombres décimaux en assembleur
Message Publié : 05 Fév 2025, 18:27 
Hors-ligne
Rulezzzz
Rulezzzz

Inscription : 26 Juil 2016, 13:06
Message(s) : 513
Localisation : Valence
y a la technique des soustractions qu'on trouve un peu partout

https://wikiti.brandonw.net/index.php?t ... her:DispHL

le BCD ou même plus bourrin, 1 octet par décimale est aussi intéressant, en particulier si tes octets correspondent déjà aux caractères à afficher

+dans le cas d'un octet par décimale, si tu as vraiment besoin de temps machine, tu peux afficher un caractère, puis un autre plus tard, puis un autre, ...


Haut
 Profil  
 
velus
 Sujet du message : Re: Afficher des nombres décimaux en assembleur
Message Publié : 05 Fév 2025, 18:37 
Hors-ligne
Rulezzz
Rulezzz

Inscription : 05 Août 2011, 14:38
Message(s) : 204
Ceci transforme un chiffre hexa en décimal il suffit d'écrire le nombre qu'on veut convertir
à la place du chiffre ici &41DE pour l'exemple à la fin du programme.



org &2000


ld de,decimal ; ecrit en decimale humain
ld hl,(hexaici) ; lire en hexa
DispHL:

ld bc,-10000
call Num1
ld bc,-1000
call Num1
ld bc,-100
call Num1
ld bc,-10
call Num1
ld c,-1
Num1: ld a,'0'-1
Num2: inc a
add hl,bc
jr c,Num2
sbc hl,bc
call &bb5a ; resultat a l'ecran
ld (de),a
inc de
ret

hexaici: db &de,&41 ; ici nombre en hexa qu'on veut convertir
decimal: db 00,00 ; ici resultat en chiffre decimal


Haut
 Profil  
 
sPOKE
 Sujet du message : Re: Afficher des nombres décimaux en assembleur
Message Publié : 06 Fév 2025, 05:10 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 08 Fév 2012, 18:19
Message(s) : 375
Merci de vos réponses.

Ne serait-ce pas plus simple en utilisant DAA ?

En BASIC on peut faire :

INPUT NB
MUL=FIX(NB/10)
PRINT HEX$(NB+6*MUL)

et on obtient bien le BCD a afficher. J'essaie d'utiliser DAA pour reproduire ça en Assembleur...


Haut
 Profil  
 
sPOKE
 Sujet du message : Re: Afficher des nombres décimaux en assembleur
Message Publié : 08 Fév 2025, 18:50 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 08 Fév 2012, 18:19
Message(s) : 375
Ça y est, j'ai capté. J'ai pu faire un programme pour additioner des nombres 16 bits avec DAA

DAA c'est pour faire des additions en BCD mais pas pour convertir un nombre en BCD,
ll faut donc fournir les 2 nombres déja convertis en BCD. J'avais oublié tout ça... :sweatingbullets:

J'ai codé une routine qui convertit les nombres 8 ou 16 bits en BCD,
ce qui sera pratique pour afficher des scores ou autres en décimal.

J'ai juste fait des soustractions au lieu de faire des divisions donc je n'ai pas eu besoin
de faire de décalage de bits.

Tu testes juste si le nombre est supérieur ou égal a 10.000 par exemple,
tu lui soustrait 10.000 avec une boucle et tu obtiens le chiffre des dizaines de mille.
Idem pour les milliers, centaines, dizaines et unités. Et voila ton BCD en quelques lignes de code.


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 5 message(s) ] 

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 3 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Aller vers :  
Powered by phpBB® Forum Software © phpBB Group
Traduit en français par Maël Soucaze.