Programme assembleur

Bonjour,

Je shouaite écrire en assembleur qui calcule la somme des n premiers entiers je ne sais pas comment m'y prendre
besoin d'un coup de pouce .
Sur cet assembleur exactement :
http://www.peterhigginson.co.uk/AQA/

4 réponses

  1. Bonsoir,

    Avant de ce lancer dans un langage de bas niveau comme ASM, il faudrait apprendre la base du fonctionnement des architectures x86.

    - La segmentation de la mémoire ( text, data, bss )
    - Les registres ( généraux, offsets, segments )
    - Les flags
    - Les opcodes est leurs utilisations
    - Utilisation de la stack.
    https://fr.wikibooks.org/wiki/Programmation_Assembleur/x86/Registres

    le mieux encore serait pour débuter t de travailler avec les registres 16 bits après passe au 32 bits puis 64 bits.

    Si tu travail sur Windows voir aussi le PE ( portable exécutable ) format des en-têtes Windows ( PEB, TEB )

    Et tu verra que tout va s’éclaircir pour ton problème, entraîne toi à faire des boucles (EAX, ECX ), travailler des chaîne de caractère etc...

    Pour développer en ASM le mieux serait d'utiliser :

    - notepad++, gedit ou un autre éditeurs ( pour l'édition du code ).
    - nasm & ld afin compiler ta production. ( x86, x64 )
    - Immunity Dbg ou OllyDBG pour debugger ton programme ( Windows ), IDA Dbg ( linux )
    - hexdump ( linux et Windows )
    - objdump ( linux et Windows )

    Cdlt,
    1. Excuse moi mais ce n’est pas par envie c’est plutôt pcq je suis obliger c’est un dm que j’ai a faire plutôt une partie d’un dm niveau première
    2. @HammouWow d'accord mais avec cette émulateur http://www.peterhigginson.co.uk/AQA/
      je ne saurais d'aider désolé. Pourquoi as-tu choisi spécialement cette émulateur ? a t-il été imposé ?

      peut-tu quand même envoyer l'énonce au complet s'il te plaît.

      Bien cdlt,
    1. Merci bien, je vais regarder ça mais sans t'assurer quoi que ce soit, je n'ais jamais fait se type ASM on dirait du coreWar ^^
  2. Ok np merci quand meme
    1. la réponse a
      changer :
            cmp R1,#5
      

      par
            cmp R1,#10
      


      b

            mov R1,#1
            B maboucle
      maboucle:
            add R0,R0,R1
            add R2,R0,R2
            cmp R0,#10
            bne maboucle
            str R2,100
            halt
      


      R0 est n
      R1 est ta raison
      R2 est le terme

      le terme est placé à l'adresse 100

      j'espère que c'est ça que tu chercher.

      pour n = 5, R = 1, T = 15
      pour R0= 5, R1=1, R2=15

      cdlt,
  3. ça ne marche pas enf il faut rajouter une ligne pour n car n'est doit être choisis par l'utilisateur
    INP RO,2 (2 pour le type ) en fonction de cet variable le programme doit tourner
    mais j'arrive pas a faire tourner ton programme avec et sans la variable la valeur envoyer dans la mémoire 100 est fausse ils m’envoient 55 .
    ps: j'ai bien indenter ainsi qu'ajuster les majuscules
    1. Oui il renvoie 55 car je fait pour n = 10

      n se trouve dans l'opcode ( offset 6 de EIP (PC) ):
            cmp R0,#10
      


      non majuscule ou minuscule cela changera rien, tout dépend si le compilateur fait une différence mais pas ici.

      pour N = 10, R = 1, T = 55

      mais wait je vais essaie d'init dans un autre registe R3 ta valeur n avant la boucle et d'y récupérer cette valeur lors de comparaison.

      je suis au travail je regarde dans 1 heures. tu dois le rendre pour quand ?
    2. @DevGnodeSe soir mais j'ai finalement trouver   0       MOV R1,#1
        1       INP R0,2
        2       MOV R2,#1
        3       B maboucle
          maboucle:
        4       ADD R1,R1,#1
        5       ADD R2,R2,R1
        6       CMP R1,R0
        7       BNE maboucle
        8       STR R2,100
        9       HALT

      sur ceux merci bonne soirée