Programme assembleur

Fermé
hammou - 8 mars 2020 à 16:40
 hammou - 10 mars 2020 à 20:48
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

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,
0
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
0
Wow 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,
0
jevousshouaiteunebonnej Messages postés 2 Date d'inscription dimanche 8 mars 2020 Statut Membre Dernière intervention 8 mars 2020
8 mars 2020 à 23:23
0
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 ^^
0
jevousshouaiteunebonnej Messages postés 2 Date d'inscription dimanche 8 mars 2020 Statut Membre Dernière intervention 8 mars 2020
8 mars 2020 à 23:27
Ok np merci quand meme
0
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,
0
ç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
0
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 ?
0
hammou > DevGnode
10 mars 2020 à 20:48
Se 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
0