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
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
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
Le Tout est souvent plus grand que la somme de ses parties.