Partage
  • Partager sur Facebook
  • Partager sur Twitter

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

29 décembre 2014 à 19:38:45

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 dans mon fichier 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:
	    mov rax, 1
	    mov rbx, 1
	    call assertEqual
	    
	    mov rax, 1
	    mov rbx, 0
            int 80h



  • Partager sur Facebook
  • Partager sur Twitter
1 janvier 2015 à 22:33:33

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...

  • Partager sur Facebook
  • Partager sur Twitter
15 avril 2025 à 23:02:42 - Message modéré pour le motif suivant : Message complètement hors sujet


15 avril 2025 à 23:58:35

Bonne année 2015. Bravo pour le déterrage de 10 ans!
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

16 avril 2025 à 1:24:05

Bonjour,

Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

Pour plus d'informations, nous vous invitons à lire les règles générales du forum

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Liens conseillés

  • Partager sur Facebook
  • Partager sur Twitter