IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Fonction : comment retourner une chaîne de caractères ?


Sujet :

Assembleur

  1. #1
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut Fonction : comment retourner une chaîne de caractères ?
    Bonjour,

    comment faire pour qu'une fonction (en asm) retourne une chaine de caractère ??? j'ai penser à transmettre son adresse par les registres mais comment être sur que la chaine n'écrase pas d'autre variables en mémoire :

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Ca dépend d'où tu déclares ta chaine. En asm, c'est chiant, parce que les allocations dynamiques ne sont pas codées par une couhche plus haute, donc on emploie directement les appels systèmes. En fait ca va dépendre du contexte, peut être que tu peux te permettre de déclarer ta chaine dans le segment de donnée, et retourner l'adresse, tu seras sûr de la validité de la zone pointée. Sinon, il y a moyen de faire usage de la pile, où dans ce cas, la fonction appellante va devoir conserver la pile tant qu'elle à besoin de la chaine (et la copîer donc, si il faut appeller d'autres fonctions entre temps.)

  3. #3
    Membre expérimenté
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    Par défaut
    Bonjour,

    Je pense qu'il faut faire des fonctions qui prennent 2 paramètres supplémentaires : un pointeur qui contient l'adresse de début de chaine et un nombre qui correspond à la taille maximale de la chaine qui peut être retournée. De cette manière c'est au processus qui appelle la fonction d'allouer la mémoire ce qui simplifie les choses je pense.

  4. #4
    Membre du Club Avatar de Arnaudv6
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 82
    Points : 63
    Points
    63
    Par défaut
    Je pense aussi : 2 infos : adresse, et longueur
    mais le probleme reste le meme : comment savoir que tu
    n'écris pas a un endroit utilisé.
    Je pense qu'il faut reserver des octets (resb je crois)
    mais le pb, c'est qu'a ce niveau, tu limite la taille maximale de ta chaine.
    tu peux en déclarer plus qu'il n'en faut, mais si jamais tu dépasse....
    Et tu le sais, ton OS ne te laissera pas sortir de ton "domaine" de ram...
    Tu auras un écran bleu, ou simplement ton prog se quittera.

  5. #5
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    Je vais utiliser la technique de Juju_41, c'est le mieux dans mon cas (je n'ai pas besoin d'un espace enorme, c'est juste pour des saisies aux claviers ...)

    merci

  6. #6
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Oui cette technique est sûrement la plus sûre à mettre en oeuvre et aussi la plus simple...
    L'appelant donne une adresse pour un buffer (ds:dx par exemple) et le nombre maximal d'octets à écrire.

    C'est d'ailleurs exactement ce type de procédure qui est utilisé par le DOS pour une entrée au clavier, sauf que la longueur maximale est dans le buffer...

    Arnaudv6 : Il n'y a aucun problème d'écriture dangereuse puisque l'adresse est donnée par l'appelant, qui sait où se trouve son buffer...

    Salut !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction retournant une chaîne de caractères
    Par lamyruth dans le forum C
    Réponses: 2
    Dernier message: 04/01/2010, 10h58
  2. Réponses: 4
    Dernier message: 22/12/2006, 15h10
  3. Réponses: 23
    Dernier message: 13/11/2006, 03h33
  4. Réponses: 1
    Dernier message: 01/11/2006, 19h20
  5. Comment découper une chaîne de caractères en VBA
    Par TomPad dans le forum Access
    Réponses: 3
    Dernier message: 23/06/2005, 09h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo