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

x86 32-bits / 64-bits Assembleur Discussion :

Probleme au niveau d'un code minimal


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    Par défaut Probleme au niveau d'un code minimal
    Bonjour.

    Connaissant quelques langages informatiques, je me suis décidé de me mettre apprendre l'assembleur. Voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    .386
    .model flat,stdcall
    option casemap:none
    include \masm32\include\masm32rt.inc
    .code
    start:
    inkey "Appuyez sur une touche pour continuer..."     ;macro de mise en pause de la console
    exit
    end start
    Ceci m'affiche l'erreur suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    C:\Masm32\Bin\ML.EXE /c /coff /Cp /nologo /I"C:\Masm32\Include" "mon prog.asm"
     Assembling: mon prog.asm
    \masm32\include\masm32rt.inc(33) : warning A4011: multiple .MODEL directives found : .MODEL ignored
     
    Make finished.
    Total compile time 1107 ms
    Note : Comme proposé dans le cours, j'utilise l'IDE RadASM et l'Assembleur MASM.

    Voila je suis donc incapable de débugger cette erreur, étant débutant depuis cette après-midi.

    J'ai aussi une question qui me trotte dans la tête : Je pensais que l'assembleur était un langage qui a l'avantage d'être dépendant du système comme il travaille directement avec le CPU et donc il pouvait être exécuté au démarrage du PC sans passer par un OS (Windows).

    Une autre chose aussi : Dans le cours, on nous apprend comment fonctionne les bytes dans la mémoire, les bus, certaine parties du CPU dont les registres… Je cherche donc maintenant des cours sur les instructions de l'Assembleur ainsi que sur les macros. Ceci me permettra d'avancer.

    PS : Pour ma dernière question, j'ai déjà pas mal fouillé les cours sur Developpez et je les trouves difficiles pour un newbie comme moi.

    Merci d'avance. J'espère avoir été clair sur mes 3 questions

  2. #2
    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 : 48
    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
    Citation Envoyé par Guyome41 Voir le message
    Une autre chose aussi : Dans le cours on nous apprend comment fonctionne les bites dans la mémoires, les bus, certaine partie du CPU dont les registres.... Je cherche donc maintenant des cours sur les instructions de l'Assembleur ainsi que sur les macros ceci me permettra d'avancer.


    Sinon, oui, l'assembleur dépend du système, par contre, si tu veux que ton prog tourne
    sous Win$ il faut l'écrire pour win$, si tu veux qu'il tourner sous Linux, et bien pareil, faut
    l'écrire pour Linux.
    Les OS empêchent l'exécution de code à l'arrache (heureusement)

    Je ne connais pas la syntaxe MASM, par contre, si tu veux du code plus "simple" à lire,
    je te conseille d'utiliser FASM ( je t'ai grillé Edfed !! )

    a+ François

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    Par défaut
    Merci pour ta réponse et désolé des fautes du "parler technique" je suis pas encore habitué.

    Sinon, oui, l'assembleur dépend du système, par contre, si tu veux que ton prog tourne
    sous Win$ il faut l'écrire pour win$, si tu veux qu'il tourner sous Linux, et bien pareil, faut
    l'écrire pour Linux.
    Les OS empêchent l'exécution de code à l'arrache (heureusement)
    Donc d'après se que tu me dit il n'est pas possible de démarrer une application hors système (je pense au démarrage du PC)

  4. #4
    Membre actif Avatar de golden boy
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 120
    Points : 230
    Points
    230
    Par défaut
    Je cherche donc maintenant des cours sur les instructions de l'Assembleur ainsi que sur les macros ceci me permettra d'avancer.
    Pour les macros je sais pas (sûrement la doc MASM), mais pour les instructions tu as bien-sûr les Manuels d'Intel (ou autre fondeur). Je sais qu'on le dit souvent et que ça effraie les gens, mais il n'y a pas de quoi. C'est accessible à partir d'un niveau collège en anglais, et c'est simple à comprendre, les instructions sont expliquées vraiment très clairement. La doc n'est pas si terrifiante que ça...
    je suis moi aussi débutant en assembleur et je ne peux pas me passer de cette doc.

    Dernière chose : je te déconseille très fortement d'utiliser les macros du genre "inkey" ou "if" et autres, que propose MASM. C'est pas ça qui va t'apprendre à programmer en assembleur, loin de là. Le but n'est pas d'imiter un langage de haut-niveau (ce que font les macros en l'occurrence), mais bel et bien d'apprendre l'assembleur, ici, il me semble.
    Quand tu auras compris ce que fais telle ou telle instruction et pourquoi, là tu pourras faire tes propre macros pour alléger tes codes si besoin est.

    Et... +1 pour fasm

  5. #5
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Forthman Voir le message

    je te conseille d'utiliser FASM ( je t'ai grillé Edfed !! )
    a+ François
    je m'incline, en effet, il faut prendre fasm, c'est plus leger comme syntaxe, puis c'est tellement mieu un logiciel qui commence par F de FASM, au lieu de ce M tout vilain de Masm.
    Meme le T de Tasm ou le N de Nasm sont plus beaux.

    J'ai aussi une question qui me trotte dans la tête : Je pensai que l'assembleur était
    Merci d'avance j'espère avoir était clair sur mes 3 questions
    celà signifie qu'il te faut des cours pour newbie.
    si tu lis l'anglais, c'est avec plaisir que je te fillerais des exemples.

    allez, telecharge http://flatassembler.net/download.php .

    dezippes la dernière version de fasmw dans c:/fasmw/ c'est mieux.

    ensuite, direction c:/fasmw/examples/hello/hello.asm

    executer avec la touche F9, ça marche!

    si ça ne marche pas, fermer fasm et ouvrir le fichier c:/fasmw/fasmw.ini dans notepad à la première ligne. normalement, elle y est deja, mais avec le numero de version dans le nom du repertoire de fasmw, je les ai enlevés car ils changent souvent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [environment]
    include=c:/fasmw/include
    voilà deja de quoi bien commencer. puis après, je peut t'indiquer d'aller voir dans la rubrique contribuez, j'ai posté deux trois trucs pour attaquer le fond des choses, dont le demarrage d'applications pour le boot.

  6. #6
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Donc d'après se que tu me dit il n'est pas possible de démarrer une application hors système (je pense au démarrage du PC)
    Justement, si, sinon plus rien ne marcherait!
    En fait, le processeur lit des suites d'octets, et selon ces octets, il effectue une action simple (additionner deux nombres, sauter à un endroit, lire dans la RAM...). Quand ton système va démarrer, ton processeur va exécuter le BIOS, qui va lui-même charger le premier secteur du disque dur dans la RAM et l'exécuter.
    Or ce qu'il y a dans ce premier disque dur, c'est du langage machine "pur", directement exécutable par le processeur. Or dans le tuto que tu lis, tu demandes à MASM de créer un exécutable Windows: cet exécutable contient plein d'en-têtes nécessaires à Windows pour lancer l'exécution du programme (le PE header), mais qui n'ont aucune signification pour le malheureux processeur . C'est en fait Windows qui va gérer l'exécution du programme, en "disant" au processeur quoi exécuter .

    J'espère que j'ai été clair, et que je suis resté assez conforme à la réalité dans mes explications
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  7. #7
    Membre actif

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Points : 277
    Points
    277
    Par défaut
    Puisque personne ne répond à la question.
    Ceci m'affiche l'erreur suivante <<<<<<<<<<<<<
    warning A4011: multiple .MODEL directives found <<<<<<<<<<
    L'instruction .model est déja dans le fichier inclus masm32rt.
    Ce fichier regroupe toutes les commandes les plus courantes pour démarrer.

    Quand aux remarques sur la légèreté de la syntaxe ....
    Si on n'en veut pas,on ne l'utilise pas.
    Ce n'est pas parce l'on a une voiture qu'il ne faut plus utilisé le vélo.
    Dans le genre vélo , oui il y a fasm.
    Et dans le genre trotinette il y a nasm.
    Vélo electrique TASM 5.3

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Points : 277
    Points
    277
    Par défaut

    Un exemple de syntaxe légère,légère.......
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    @ILT+90(_dwtodeci@8):
      0040105F: E9 E0 01 00 00     jmp         _dwtodeci@8
      00401064: CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
      00401074: CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
      00401084: CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
      00401094: CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
      004010A4: CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
      004010B4: CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
      004010C4: CC CC CC CC CC CC CC CC CC CC CC CC              ÌÌÌÌÌÌÌÌÌÌÌÌ
    _convert@4:
      004010D0: 55                 push        ebp
      004010D1: 8B EC              mov         ebp,esp
      004010D3: 83 C4 FC           add         esp,0FFFFFFFCh
      004010D6: 56                 push        esi
      004010D7: 57                 push        edi
      004010D8: C7 45 FC 01 00 00  mov         dword ptr [ebp-4],1
                00
      004010DF: 8B 75 08           mov         esi,dword ptr [ebp+8]
      004010E2: 8D 3D C8 50 40 00  lea         edi,ds:[4050C8h]
      004010E8: B9 E7 03 00 00     mov         ecx,3E7h
      004010ED: 80 3E 00           cmp         byte ptr [esi],0
      004010F0: 74 05              je          004010F7
      004010F2: A4                 movs        byte ptr es:[edi],byte ptr [esi]
      004010F3: 49                 dec         ecx
      004010F4: 46                 inc         esi
      004010F5: 75 F6              jne         004010ED
      004010F7: C6 07 00           mov         byte ptr [edi],0
      004010FA: 8B 45 FC           mov         eax,dword ptr [ebp-4]
      004010FD: 5F                 pop         edi
      004010FE: 5E                 pop         esi
      004010FF: C9                 leave
      00401100: C2 04 00           ret         4
    _UtoA@4:
      00401103: 55                 push        ebp
      00401104: 8B EC              mov         ebp,esp
      00401106: 6A 00              push        0
      00401108: 6A 00              push        0
      0040110A: 68 E8 03 00 00     push        3E8h
      0040110F: 68 C8 50 40 00     push        4050C8h
      00401114: 6A FF              push        0FFFFFFFFh
      00401116: FF 75 08           push        dword ptr [ebp+8]
      00401119: 6A 00              push        0
      0040111B: 6A 00              push        0
      0040111D: E8 02 0F 00 00     call        _WideCharToMultiByte@32
      00401122: 0B C0              or          eax,eax

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    Par défaut
    Merci pour vos réponses.

    Comme vous me le conseillez, je vais m'orienter vers FASM.
    Si vous avez le liens vers la doc d'intel et tutos merci.

    voilà deja de quoi bien commencer. puis après, je peut t'indiquer d'aller voir dans la rubrique contribuez, j'ai posté deux trois trucs pour attaquer le fond des choses, dont le demarrage d'applications pour le boot.
    edef oui je suis preneur merci.

    Quand ton système va démarrer, ton processeur va exécuter le BIOS, qui va lui-même charger le premier secteur du disque dur dans la RAM et l'exécuter.
    supersnail comment placer des fichiers dans le premier secteur du disque (ou clef USB serais le mieux pour tester).

    Merci

Discussions similaires

  1. [MySQL] Probleme au niveau du code, j'ai l'impression que rien ne sort de la boucle WHILE.
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/12/2007, 14h51
  2. [Thread] petit problème au niveau du reveil d'un thread
    Par sagitarium dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 13/01/2006, 11h35
  3. [PHP-JS] Probleme de javascript dans un code php
    Par stomerfull dans le forum Langage
    Réponses: 20
    Dernier message: 12/01/2006, 13h41
  4. PROBLEME haut niveau BACKUP
    Par Dev_Michael dans le forum Administration
    Réponses: 7
    Dernier message: 10/03/2005, 15h32
  5. [langage] Probleme avec commande system et code
    Par Ludo167 dans le forum Langage
    Réponses: 3
    Dernier message: 14/07/2004, 12h01

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