[ASSEMBLEUR][AT&T]Afficher un entier sur la sortie standard

D’abord, j’explique rapidement la situation:
J’ai un exo de tp où je dois créer une calculatrice élémentaire très basique (opérations + - * / de 0 à 9, expression sous forme de chaîne postfixée) avec une pile et je dois afficher le résultat (dans la console, quoi). Exercice simple , mais je débute.

Aucun problème pour les calculs (un pas-à-pas dans gdb me montre bien l’évolution de la pile et des registres comme je le veux) mais à la fin, je n’arrive pas à afficher le résultat.
La seule méthode d’affichage que je connais est celle-ci, qui affiche un caractère de chaîne:

movl $4,%eax movl $1,%ebx movl $msg,%ecx /*(avec $msg une variable de type string)*/ movl $1,%edx int $0x80
Or, ça ne marche pas avec une valeur numérique directe (puisque %ecx agit comme un pointeur).

Comment puis-je afficher directement mon résultat, ou à défaut le convertir en une chaîne de caractère (et utiliser la méthode sus-citée)?

Nous on a fait un truc similaire (en fait on était censé faire la calcul et faute de temps (LRU toussa) on l’a pas faite).
Mais on a eu le problème inverse pour lire depuis le clavier.
Il me semble qu’il faut passer par la valeur ascii.
Le plus simple c’est de faire un add $variable, $'0'

Au fait pour les pointeurs / valeurs pointées ya un truc avec “[ ]” genre %[eax] de mémoire.

Fser
Oulala faut que je m’y remette !

Il faut que tu convertisse ta valeur en character ASCII.
Pour un entier entre 0 et 9, le charactere qui va bien c’est valeur + 48 (en decimal, voir la table ascii pour plus de details).
donc tu fais ca pour les unites, les dizaines, etc, etc, et apres tu n’as plus qu’a utiliser ta fonction d’affichage!

Ouais, ça peut marcher ça mais seulement quand le résultat ne dépasse pas 9, puisque j’ajouterais 48 (n° ascii du caractère 0) à ma valeur calculée.
Genre l’expression que j’utilise, c’est “5 3 * 2 +” (soit (5*3) +2), le total c’est 17, si je fais [add $‘0’, result], j’aurais result=65, et le code d’affichage me donnera un “A”.

Non, ce qu’il me faut au moins, c’est pouvoir parcourir ma valeur calculée chiffre par chiffre (ce qui implique pouvoir l’utiliser comme une chaîne)

Edit: si ça peut aider, v’là l’énoncé en question (4.2.2, exercice 11).

Mais voyons, et le modulo ça sert à quoi, hein ?

Par exemple, pour afficher 456:

456 % 10 = 6 + 48 -> '6’
456 / 10 = 45
45 % 10 = 5 + 48 -> '5’
45 / 10 = 4
4 % 10 = 4 + 48 -> ‘4’

Et hop, t’as la liste des chiffres à l’envers.

[quote=« c0unt0, post:3, topic: 47023 »]Il faut que tu convertisse ta valeur en character ASCII.
Pour un entier entre 0 et 9, le charactere qui va bien c’est valeur + 48 (en decimal, voir la table ascii pour plus de details).
donc tu fais ca pour les unites, les dizaines, etc, etc, et apres tu n’as plus qu’a utiliser ta fonction d’affichage![/quote]
Ou OR 0x30.

En syntaxe Intel oui mais alors il n’y a pas besoin du préfixe %. En AT&T c’est () je crois.

Le plus simple ce serait quand même d’utiliser printf(). :slight_smile: