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

x86 32-bits / 64-bits Assembleur Discussion :

Pile en assembleur besoin d'aide


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Futur Membre du Club
    Pile en assembleur besoin d'aide
    Bonjour ,

    J'aurais besoin d'aide pour écrire en assembleur un code qui vas permettre d'inverser 2 à 2 les lettres d'une chaine de caractères , à l'aide d'une pile pointée par %rsp .
    Si quelqu'un peut m'aider à commencer , car je ne sais pas par ou commencer .
    Merci à vous

  2. #2
    Responsable Systèmes

    Pourquoi passer par la pile ? Tu charges les deux lettres dans un registre 16 bits exemple lodsw avec l'adresse de la chaine dans rsi->ax contiendra tes deux caractères et tu récupères les deux octets dans les registres 8 bits (dans l’exemple al et ah) dans l'ordre que tu veux. Tu peux même les swapper avec des opcodes, puis réécrire avec stosw adresse de destination dans rdi.

    Si tu veux passer par la pile, je crois qu'en 64 bits, la pile doit être alignée sur 4 octets, il te faut donc empiler 32 bits pour une charge utile de 8 bits (1 caractère) et jouer avec les adresses de pile pour en récupérer les éléments dans un ordre différent de l'empilement. donc à moins d'un exercice...
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutor...s/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Expert confirmé
    Bonjour,
    Citation Envoyé par chrtophe Voir le message
    donc à moins d'un exercice...
    Ce qui est manifestement le cas
    Le mysticisme est une maladie qui crée des problèmes là où il n’en existe pas.

  4. #4
    Membre confirmé
    je ne comprend pas exactement ce qui doit être fait mais je dirait que pour bien commencer il faut comprendre ce qu'est une pile et ce quelle fait exactement

    la pile c'est une LIFO (last in first out) une sorte de zone tampon ou les premières données sortie sont les dernière données entrée
    pour manipuler les données de la pile, on utilise 2 instructions:
    PUSH qui empile les données (entre les données dans la pile)
    POP qui dépile les données (sort les données de la pile)

    pour comprendre ce que fait push et pop exactement on peu remplacer chaques instructions par une équivalence

    "push eax" peut être remplacé par
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    sub esp,4 
    mov ss:[esp],eax


    "pop eax" peut être remplacé par
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    mov eax,ss:[esp]
    add esp,4