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:
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:
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.)
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.
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.
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
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 !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager