Page 1 of 2
[ASM] Stocker un nombre ASCII dans une adresse mémoire

Posted:
26 Feb 2015, 20:34
by Epharius
Bonjour à tous !
Bon, j'ai assez de mal à m’expliquer... du coup si vous ne comprenez pas quelque chose, dites-le moi =)
Alors voilà, le but en lui même est de stocker un nombre hexadécimal inconnu dans une adresse de mémoire mais déjà convertie en code ASCII. Petit exemple (parce que ça m'étonnerais que vous ayez compris ^^) :
Je veux stocker "57" dans l'adresse, par exemple, $8265. Cependant, je ne veux pas stocker le code ASCII 57 (ce qui me donnerait W avec un _Puts) mais bien le nombre "57" et donc mettre dans l'adresse mémoire $8265 "35" et dans la suivante "37" (qui me donnerait bien "57" avec un _Puts). En outre, je ne peux pas faire un...
- Code: Select all
label:
.db "57"
...puisque le nombre que je veux stocker est inconnu.
Maintenant la question, y a-t-il une RomCall qui convertirait un caractère en code ASCII ? Y en a bien une qui fait le contraire (keyToString) mais j'en n'ai pas trouvé une qui fait ce que je veux. S'il n'en existe pas, comment feriez-vous pour convertir ce nombre ? J'ai bien eu quelques petites idées, malheureusement, puisque c'est un nombre inconnu, à chaque fois il y avait quelque chose qui n'allait pas. Et puis, je voudrais être sûr qu'il n'existe aucune Romcall qui ferait le travail à ma place avant de me lancer dans ça ^^
Merci d'avance =)
PS : Petite image pour illustrer le tout :
Capturer.PNG
Re: [ASM] Stocker un nombre ASCII dans une adresse mémoire

Posted:
26 Feb 2015, 21:41
by grosged
En se basant sur cette table, ASCII
http://tibasicdev.wikidot.com/ascii-codesles caractères ASCII de 0 à 9 , valent respectivement de 128 à 137 (&80 à &89 en hexadécimal)
Prenons un exemple:
le registre A contenant 12 (&0C), ainsi le registre BC devrait contenir &8182
C'est ça la manip' que tu cherches à faire ?
Re: [ASM] Stocker un nombre ASCII dans une adresse mémoire

Posted:
26 Feb 2015, 23:05
by Epharius
C'est cela ! En fait, j'ai un nombre allant de $9327 (pas par hasard) à $AFFF, et ce nombre je veux le transformer en token. Mais comme je ne trouve pas de RomCall pour ça, je pense que je vais créer un routine pour.
Cependant, je ne vois pas trop comment faire... j'aimerais éviter de faire 10 "CP [...]" pour éviter que la taille du programme n'explose et en même temps, je ne vois pas comment je pourrais faire autrement.
Ah et aussi, comment je pourrais faire pour récupérer juste le 2 dans 12 ? En masquant des bits ?
Re: [ASM] Stocker un nombre ASCII dans une adresse mémoire

Posted:
27 Feb 2015, 08:34
by Hayleia
Je ne sais pas si j'ai tout compris mais je vais expliquer comment faire ce que j'ai compris que tu veux faire.
Pour récupérer le 3 dans 123, tu fais 123 modulo 10. Pour récupérer le 2, tu fais 123 divisé par 10 puis modulo 10. Etc, pour obtenir chaque chiffre, tu divises par 10 un certain nombre de fois puis tu fais modulo 10 (sachant que tu devrais avoir une romcall DivHLby10 ou quelque chose du genre si je ne m'abuse).
Pour stocker le chiffre A (0≤A≤9) en "ASCII", normalement c'est assez simple.
Débrouille toi pour trouver quelle est la "valeur ASCII" de 0 (par exemple, fais un vieux programme avec un .db "0" et affiche la valeur numérique contenue à cette adresse), puis ajoute simplement la valeur trouvée à ton A, et le résultat obtenu devrait être ce que tu cherches.
Dit autrement, ce que tu cherches, c'est "0"+A.
Re: [ASM] Stocker un nombre ASCII dans une adresse mémoire

Posted:
27 Feb 2015, 11:19
by grosged
Oui, c'est ça!
On peut faire une routine en ASM genre:
HL contient la valeur 16bits
Tant que HL n'est pas à 0
on divise HL par 10 , le reste de cette division nous donne les unités, (+128 nous donnera l'ascii correspondant)
puis encore HL/10, le reste nous donne maintenant les dizaines...etc
Re: [ASM] Stocker un nombre ASCII dans une adresse mémoire

Posted:
27 Feb 2015, 18:02
by Epharius
Pas bête, en divisant par 10 on obtient bien à chaque fois les unités puis les dizaines etc... merci !
Petite question plus dure... j'aurais envie de faire pareil mais avec des lettres. Suis-je obligé de faire 26 CP ? Puisqu'il est impossible de faire des opération sur des lettres, je ne pense pas que ce soit possible. Ça m'embête, mon programme est déjà assez gros...
Re: [ASM] Stocker un nombre ASCII dans une adresse mémoire

Posted:
27 Feb 2015, 18:11
by Hayleia
T'as pas juste à faire un .db "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
pour les lettres ?
Re: [ASM] Stocker un nombre ASCII dans une adresse mémoire

Posted:
27 Feb 2015, 18:51
by Epharius
Ouais mais les lettres sont inconnues aussi...
Re: [ASM] Stocker un nombre ASCII dans une adresse mémoire

Posted:
27 Feb 2015, 20:33
by Hayleia
Ouais, mais t'es pas très clair là.
Autant un nombre, on le coupe en chiffres et on lit ce qu'il y a à une adresse offestée du chiffre en question, autant une lettre... ben c'est quoi une lettre en assembleur ? Tu la tiens d'où ta lettre ?
Parce que après avoir fait mon .db, je peux facilement transformer n'importe quel nombre de 0 à 25 en une lettre de A à Z, mais il nous faudrait plus de détails sur tes lettres à l'origine pour pouvoir les transformer en nombres de 0 à 25.
Il se peut même qu'avec ton manque de clarté, je n'ai pas compris ce que tu veux faire avec tes lettres...
Re: [ASM] Stocker un nombre ASCII dans une adresse mémoire

Posted:
27 Feb 2015, 21:02
by Epharius
C'est vrai, je n'étais pas très clair... et je ne pense pas que ce soit possible. Mais je voulait juste voir si quelqu'un avait une idée. Mais du coup je vais faire des CP, ce n'est pas très grave ;)
En fait, la lettre vient d'une adresse mémoire (EX : $B58A). J'ai dit à tort 26, puisque ces lettres ne dépassent pas F. Ce que je veux, concrètement, c'est transformer un nombre, représentant une adresse mémoire, en tokens pour ensuite le mettre dans une autre adresse mémoire.
Et ma question était "serait-ce possible d'éviter les CP en les contournant par une opération". Mais comme je l'ai dit précédemment " je voulait juste voir si quelqu'un avait une idée".
Merci d'essayer de m'aider, j'en suis conscient, la communication et la clarté n'ont jamais été mon fort =)