Récupérer des valeurs en mémoire [Assembleur]

Fermé
TheFatalError Messages postés 2 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 1 janvier 2015 - 30 déc. 2014 à 16:41
TheFatalError Messages postés 2 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 1 janvier 2015 - 1 janv. 2015 à 22:36
Bonjour à tous,

Je débute en assembleur. Je voulais explorer un peu le sujet et faire un petit fizzbuzz pour commencer dans ce langage, histoire de me faire la main. Ceci dit, je souhaite le faire en TDD. Mais, je n'ai pas trouvé de framework en assembleur. Alors, j'ai décidé d'en faire un, un très basique qui vérifie les égalités via un assertEqual.

Alors, je suis sous Linux et utilise Nasm. Architecture x86, 64bits, syntaxe Intel.

Mon problème c'est que dans mon fichier FizzBuzz.asm j'entre deux valeurs via push (j'ai aussi essayé en utilisant mov) que je voudrais vérifier dans le fichier AUnit.asm via un call assertEqual. Mais je n'arrive pas à récupérer mes valeurs entrés dans le fichier FizzBuzz (push 1 et push 1) pour les faire passer dans ma boucle dans AUnit.

Mon fichier AUnit se présente comme ça :

segment .text
  global main
   
segment .data
 
  msg_green:     db "Passed", 10
  size_green:     equ $ - msg_green
  msg_red:     db "Failed", 10
  size_red:     equ $ - msg_red
     
  main:
   
    assertEqual:
      mov rax, 1
      mov rbx, 1
    loop:
      cmp rax, rbx
      je found
      jne notfound
    found:
      mov rax, 4
      mov rbx, 1
      mov rcx, msg_green
      mov rdx, size_green
      int 80h
      jmp exit
    notfound:
      mov rax, 4
      mov rbx, 1
      mov rcx, msg_red
      mov rdx, size_red
      int 80h
       
    exit:
      mov rax, 1
      mov rbx, 0
      int 80h


Bon, le code fonctionne mais avec des valeurs en "dur", ici 1 et 1 qui vérifie l'égalité.

Je souhaite pouvoir récupérer ces valeurs à partir du fichier FizzBuzz. Mais j'arrive pas à connecter les deux. J'ai essayé de jouer avec les registres et la pile en vain. Voilà, je m'en remets à vous car je tourne en rond.

Pour avoir une idée de mon fichier FizzBuzz :

%include "AUnit.asm"
 
segment .text
 
    global main
      
      _main:
       
      test_truth:
        push 1
        push 1
        call assertEqual
         
        mov rax, 1
        mov rbx, 0
        int 80h

1 réponse

TheFatalError Messages postés 2 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 1 janvier 2015
1 janv. 2015 à 22:36
Pourquoi lorsque j'essaie de récupérer la valeur dans la pile ça ne fonctionne pas ?

Fichier AUNit

assertEqual:
      mov rax, [rsp+4]
      mov rbx, [rsp+8]


Fichier FizzBuzz

%include "AUnit.asm"
 
segment .text
 
    global main
      
      _main:
       
        test_truth:
        push 1
        push 1
        call assertEqual
        add rsp, 8
         
        mov rax, 1
        mov rbx, 0
        int 80h



Je ne vois pas vraiment pas comment faire...
0