IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Quelques questions en assembleur [tableaux, affichage,..]


Sujet :

Assembleur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut Quelques questions en assembleur [tableaux, affichage,..]
    Bonjour, je suis nouveau sur le forum.

    J'aimerais vous poser quelques questions concernant un travail à réaliser.

    1/Comment transmettre un tableau (d'entiers)en argument?
    Je pense qu'il faut utiliser la pile mais je ne voi pas comment faire..

    2/Comment créer un fichier texte et y écrire dedans?

    Merci de bien vouloir me répondre au plus vite possible.


  2. #2
    Membre expérimenté
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    Par défaut
    Bonjour et bienvenue sur developpez.com

    Afin de pouvoir vous répondre au mieux, merci de nous préciser :
    - le type d'assembleur ? (x86 16-bit, 32-bit, etc ...)
    - l'OS utilisé ? (DOS, W98, XP, etc ...)
    - éventuellement, le compilateur utilisé

    Merci

    PS : le fait de demander une réponse rapide ne sert à rien ici, les membres répondent aussi rapidement que possible mais il n'y a pas de posts "prioritaires"

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 53
    Points : 59
    Points
    59
    Par défaut
    1/Pour passer les paramètres d'une fonction on utilise la pile, en général. Pour un tableau, tu empiles son adresse avant l'appel de fonction et tu y accèdes dans la fonction avec le pointeur de pile.

    2/La façon dont on crée et écrit un fichier dépend du système d'exploitation.

    Salut !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Merci pour vos réponse.

    Je fais de l'assembleur avec DOS (sous win xp).
    Le compilateur utilisé est TASM.


    Je dois donc calculer la somme des éléments d'un tableau d'entiers.

    POUR LE CALCUL DE LA SOMME:

    Voila le code que j'a écrit mais ca ne fonctionne pas, j'utilise une procedure SOMME:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    somme proc
          mov ax,0
          mov cx,0
        pour:
          cmp CX,n
          JGE finpour
          mov i,cx
          mov bx,tab[i] [color=brown];message d'erreur ici[/color]
          add ax,bx
          add cx,1
          JMP pour
        finpour:
          mov som,ax
          ret
    somme endp
    MESSAGE DERREUR:CAN'T ADD RELATIVE QUANTITIES

    j'ai déclaré pour le moment dans le .DATA :
    -le tableau : tab DW 9,6,5,3,2,10,11,15,18,3,2 (j'ai choisi moi meme les éléments).
    -le nombre déléments que je veux prendre dans le tableau et dont je veux calculer la somme : n DW 5
    -la somme : som DW ?
    -le i pour ma boucle POUR : i DW ?


    POUR METTRE LES ARGUMENTS (donc N et tab) sur la pile, je fais :

    PUSH n
    et pour le tableau je ne comprend pas que faire, pourriez vous me donner un exemple?


    Merci d'avance

    PS:pour le fichier j'ai pu me débrouiller

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 53
    Points : 59
    Points
    59
    Par défaut
    Tu essayes trop de coller la syntaxe d'un C/Pascal ...
    La boucle pour peux utiliser un registre comme compteur, cela permettra d'utiliser le compteur pour addresser le tableau (ce que tu ne peux pas faire avec une valeur en mémoire, d'où le message d'erreur).
    Ensuite pense à prendre en compte la taille des éléments du tableau dans l'adressage. Par exemple mov bx, tab[cx] avec cx=3 va placer 0x0500 dans bx...

    Pour le passage des arguments, si tu fais push N et push tab, il faut récupérer ces valeurs dans la fonction et non les utiliser directement (sinon inutile de les empiler)

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Voila mon code fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    somme proc
          mov ax,0
          mov cx,0
          mov bx,0
        pour:
          cmp CX,n
          JGE finpour
          mov dx,tab[bx]
          add ax,dx
          add bx,2
          add cx,1
          JMP pour
        finpour:
          mov som,ax
          ret
    somme endp
    Seulement ici je ne travaille pas avec la pile..

    Donc pour travailler avec la pile, avant d'appeler la procedure somme je fais :
    Et ensuite, pour reprendre n de la pile, je fais, au tout début de ma procédure somme :
    Mais pour le tableau je ne voi pas comment je dois faire, je suppose que je ne peux pas faire pop tab..
    Merci de bien vouloir m'expliquer cela..


    Autre question:je dois ensuite afficher le résultat à l'écran (mais SANS interruption) et écrire le résultat dans un fichier, que je crée. Seulement, je sais comment faire pour écrire à l'écran une chaine de caractère.. mais comment faire pour transformer ma somme (qui se trouve dans la variable SOM) en une chaine de caractère de type :

    chaine DB 'salut' ???

    Pareil pour écrire dans le fichier, je sais comment écrire une chaine de caractère mais pas la valeur contenue dans une variable..


    Merci

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Pour l'affichage a l'écran, j'ai écrit ici comment afficher une chaine de caractère.. mais comme vous le voyez, dans ce cas si je dois afficher le contenu d'une variable.. et pas une chaine..

    Pouvez vous me dire quoi modifier dans mon code? Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    .DATA
         phrase DB 'Salut!'
         longphrase DW $-phrase
     
    .CODE
    main PROC
     
         mov ax,@data
         mov ds,ax
     
         mov   ah,00h
         mov   al,03h
         int   10h
         mov   ax,0b800h
         mov   es,ax
         mov   di,(80*12+40)*2
         mov   si,0
         mov   ah,10100100b
     
       affichage:
         mov   al,phrase[si]
         mov   es:[di],ax
         add   di,2
         inc   si
         cmp   si,longphrase
         jb    affichage
     
         mov ax,4C00H
         int 21h
     
    main ENDP
     
    END main

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Bonsoir à tous,

    je ne veux pas vous harceler de me répondre rapidement mais juste vous dire que je dois rendre ce travail demain (lundi) après midi (oui je m'y suis pris un peu tard )

    J'ai pu tout écrire mais voila les 3 problèmes qu'il me reste à régler et que j'aimerais régler avant la remise..

    1/Pour récuper les éléments du tableau après qu'il ait été mis sur la pile (après le PUSH tab) et pouvoir les utiliser ds la procédure somme.

    2/Pour afficher (sans interruptions) la somme (voir le code mis un peu plus haut, je sais le faire avec un caractere ou une chaine de caractere mais pas avec un nombre.. ni un chiffre.. contenu dans une variable)

    3/Pour ecrire la somme dans un fichier (que j'ai pu creer sans problemes..) mais encore une fois, je sais y insere un caractere ou une chaine mais pas la valeur contenue ds une variable).


    Encore merci bcp

  9. #9
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    hou.... ca sent le carton ca ...

    desole pour toi

    a+ Francois (comment ca ma reponse ne l'aide pas ? )

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Pas bien grave

    Le prof m'a pas tres bien coté mais il m'a expliqué, c'est le principal


    Je vais donc refaire ca calmement quand j'aurai soufflé.. lol


    Puis je reviendrai certainement vous demander un peu d'aide quand je bloque


    A+

  11. #11
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Essayes de pas poster la veille pour le lendemain

    Et aussi d'avoir des question precises, car il existe un paquet de solutions a tes questions ...

    Perso, j'ai un peu de mal a faire les devoirs des autres
    (deja quand j'etais etudiant, j'avais du mal a faire les miens )

    a+ Francois

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Ouep, j'y penserai

    Je vais de toute facon le refaire entierement, normalement ca devrait aller.. sauf quelques petits détails.. et la je compterai sur vous


    A+ et bonne nuit

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/03/2014, 19h49
  2. Réponses: 5
    Dernier message: 24/11/2007, 15h18
  3. [install]Install sous windows... quelques questions
    Par omega dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 26/02/2004, 10h50
  4. [MFC] Quelques questions de débutant...
    Par Sephi dans le forum MFC
    Réponses: 4
    Dernier message: 20/02/2004, 18h25
  5. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 22h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo