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 :

AsmEditor + FASM + NASM -> débuts difficiles


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2015
    Messages : 46
    Points : 26
    Points
    26
    Par défaut AsmEditor + FASM + NASM -> débuts difficiles
    Bonjour,
    j'ai installé AsmEditor, et les compilateurs FASM et NASM.

    Mon premier code (pris sur YouTube) n'est pas concluant. Le voici :

    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
    bits 32
    extern _GetStdHandle@4
    extern _WriteConsole@20
    extern _ExitProcess
    section .data
    message db 'Hello Word !', 10
    section .bss
    written resd 1
    section .text
    global main
    main
    push -11
    call _GetStdHandle@4
    push 0
    push written
    push 13
    push message
    push eax
    call _WriteConsole@20
    push 0
    call _ExitProcess@4
    J'ai lancé l'assembleur FASM ainsi :
    "C:\Program Files (x86)\AsmEditor\Fasm\Fasm.exe" "<Asm>" "<AsmNoExt><Ext>"
    J'ai obtenu :
    Code de sortie de Fasm.exe : 0
    J'ai tenté l'assembleur NASM ainsi :
    C:\assembleur\nasm.exe -f elf <Asm> -o <AsmNoExt>.o <AsmNoExt><Ext>
    J'ai obtenu :
    Code de sortie de nasm.exe : 1
    Pourriez-vous m'éclairer sur ces erreurs ? Je vous remercie de m'aider dans ces premiers pas...

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2015
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    J'ai tenté d'assembler directement par la console CMD. Windows 10 n'apprécie pas du tout. C'est peut-être bien lui qui me cause des ennuis lorsque, utilisant AsmEditor, celui-ci fait appel à un quelconque assembleur. Je ne sais pas s'il y a d'autres solutions que de me procurer à la décharge un vieux clou fonctionnant sous dos ..

  3. #3
    Expert éminent
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    mai 2010
    Messages
    3 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : mai 2010
    Messages : 3 009
    Points : 9 378
    Points
    9 378
    Par défaut
    ça dépend ,tu as écrit quoi exactement ?
    tu as vraiment écrit comme argument ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <AsmNoExt>.o <AsmNoExt><Ext>
    Si oui ça me semble assez normal que ça ne marche pas.

    La command de compilation est par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ; Name:     hello.asm
    ; Assemble: nasm.exe -f win32 hello.asm
    ; Link:     i686-w64-mingw32-gcc printf2.o -emain -lkernel32 --enable-stdcall-fixup -o printf.exe
    *i686-w64-mingw32-gcc remplacer par le compilateur C que tu as (vu qu'ici c'est une command Linux).
    Sur windows ça doit être un truc du genre mingw-gcc.exe où un truc du genre.


    Après pour être honnête ,je préfère éviter l'aide pour le x86 (je laisse ça à d'autre )
    Disons que je trouve cet assembleur horrible et l'architecture mal foutu , et de plus il est assez inutile à programmer en asm (vu les compilo actuel) , surtout si on a un OS derrière ,vu que tu passera ton temps à coder en asm en appelant des routines écrites en C... (on peut rêver mieux en terme de "bas niveau" je pense).

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2015
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    Je vous remercie pour votre réponse qui me montre clairement que je n'y suis pas du tout ! Je vais attendre d'être mieux équipé avant de me lancer dans la pratique.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2015
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    Une recherche sur internet me conduit à un forum décrivant mon problème. https://openclassrooms.com/forum/suj...us-win64-55755

    Il s'agit bien de caprices de Windows ! La solution serait d'assembler sous DOS, chose possible avec DosBox.

  6. #6
    Expert éminent
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    mai 2010
    Messages
    3 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : mai 2010
    Messages : 3 009
    Points : 9 378
    Points
    9 378
    Par défaut
    Sauf que ton problème n'a rien n'a voir avec Dosbox et le message cité

    La solution serait d'assembler sous DOS, chose possible avec DosBox.
    oulà pas du tout ,deja nasm ne marche pas sous DOS (donc tu pourrais pas l'assembler sous DOS) et secundu tu as mis du code x86-32 bits qui ne marche pas sous Dosbox , et de plus c'est du code spécifique pour Windows.

    Si tu avais posté du code pour pour MS-DOS , les compilations de Nasm sont différent du coup (vu que le format de sortie c'est du .com et non le format PE).

    Le soucis du gars est qu'il avait un .com mais qu'il n'arrivais pas à faire marcher sous Windows (ce qui est relativement logique ), ce qui n'est pas ton cas vu que ton code et les options de compilateur que tu tente de mettre c'est pour faire un .exe

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2015
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    Eh ben ! ... je suis mal barré !

    J'avais l'intention de percer les mystères de cet étonnant langage qu'est le langage-machine, et je découvre qu'il n'y a pas qu'un seul langage-machine - c'eût été trop simple ! - et je m'aperçois que l'étape de l'assemblage est autrement plus effrayant, tant il y a de conditions !

    J'ai écrit ce nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    A100
    MOV AH,01
    INT 21
    SUB AL,30
    MOV AH,4C
    INT 21
    RCX
    OC
    N CHOIX.COM
    W
    Q
    J'ai tenté de l'assembler sous DosBox par la commande DOS : DEBUG, mais bien entendu cette commande a disparu des radars de Windows. Comment vais-je l'assembler ?

  8. #8
    Expert éminent
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    mai 2010
    Messages
    3 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : mai 2010
    Messages : 3 009
    Points : 9 378
    Points
    9 378
    Par défaut
    Alors ce code n'est plus du x86-32 bits, soit tu veux changer de plateforme...

    Je ne sais pas où tu es allé cherchez ton code ,mais ce n'est pas du code nasm valide , voici un code asm pour nasm et pour MS-DOS :
    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
     
    org 0x100
     
    main:		
     
     
    	;affiche une chaine de caractere
    	mov dx, msg1
    	mov ah, 0x9
    	int 21h           
     
    	;termine un programme en .com
    	int 0x20
     
     
     
    msg1: 
    db "Hello world", 10, 13, '$'
    Le plus simple c'est que tu assemble avec nasm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nasm main.asm -o main.com
    dosbox main.com
    J'avais l'intention de percer les mystères de cet étonnant langage qu'est le langage-machine, et je découvre qu'il n'y a pas qu'un seul langage-machine - c'eût été trop simple !
    Non , ici on parle que d'une seule architecture le x86 , et il est rétrocompatible avec les anciens jusqu'au 8086 d'origine (donc du code de 1979 marcherais dessus).
    ce qui ne marchais pas chez toi c'est :
    -Tu as fait du code x86-32 bits , tu n'as pas réussi à le compiler donc tu as tenté de le faire marcher sur MS-DOS
    -MS-DOS ne lis pas les code Windows et ni le 32 bits (logique ça n'existais pas...)
    -Donc tu fais du code MS-DOS maintenant et donc un executable MS-DOS ne fonctionne pas sous Windows.

    C'est comme si tu avais un .exe et que tu tenterais de le faire fonctionné sur Linux où une PS4 où un Mac avec proc Intel , tous sont la même architecture (le x86), mais le format d’exécutable et les appel sont différent ce qui rend l'exécutable spécifique à un OS.
    Ici c'est pareil , MS-DOS est un OS spécifique qui ne prend pas des exécutables Windows (et inversement).

    NT: il faut savoir que le x86 vu sa "vieillesse" , le processeur n’exécute pas ce que tu lui dit exactement , il faut voir presque le x86 comme un langage "d'interface" , vu qu'aucun processeur actuel serait capable d’exécuter du x86 tel quel (où alors avec des performances très médiocre).
    Grosso modo il simule le fonctionnement d'un processeurs des années 80.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2015
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    Je vous remercie, Kannagi, pour avoir pris sur votre temps dans l'espoir de me tirer d'embarras. J'admire votre patience ! Mais je suis complétement largué, non par le langage lui-même (tout s'apprend), mais par la complexité de l'étape de l'assemblage sous Windows. J'abandonne, tout en m'excusant auprès de vous pour le temps que je vous ai fait perdre. Grand merci encore pour votre amabilité.

  10. #10
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 208
    Points : 32 631
    Points
    32 631
    Par défaut
    C'est complexe mais pas compliqué. Un assembleur ne te suffira pas, que ce soit sous Windows ou autre système moderne.

    Ca se passe en 2 étapes :
    1 : Tu assembles ton fichier, ce qui transforme ton fichier .asm en fichier objet.
    2: tu utilises le linker qui prend ton fichier objet et le transforme en .exe en y ajoutant les liens d'appels aux fonctions dans les bibliothèques externes.

    Kannagi t'a donné la solution :
    Tu assembles avec la commande nasm : nasm -f win32 fichier.asmceci va te créer un fichier objet fichier.o qui est du code machine mais pas encore exécutable.
    Tu vas devoir ensuite générer le .exe et linker les fonctions externes avec les bibliothèques (dll) qui les contiennent, dans ton cas : _GetStdHandle, _WriteConsole, et _ExitProcess, contenues dans kernel32.dll.

    Je te recommandes (tout comme Kannagi) minGW qui est un compilateur Linux/windows qui intègre les fichiers d'en-tête Windows. Tu n’utilisera ici que la fonction linker du compilateur.

    Et utilises puts qui va t'éviter d'utiliser un handler pour juste afficher du texte console. puts est ne fonction plus haut niveau que celles que tu utilises, et donc plus simple à utiliser.

    le mode debug comme présenté dans ton msg du 16 n'est plus utilisable depuis longtemps. sous MS-DOS, tu pouvais faire un binaire simple en .com, qui n'était pas relogeable contrairement à un .exe, et il n'y avait pas de bibliothèques donc pas besoin de linker.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2015
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    Finalement, je m'aperçois que c'est l'éditeur AsmEditor qui fonctionne mal et m'empêche de réussir l'assemblage. Je l'ai troqué contre l'éditeur Geany qui lance l'assembleur nasm sans souci. Me voilà prêt pour l'aventure. Merci à tous deux pour vos encouragements.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/03/2010, 17h29
  2. Des débuts difficiles en php5
    Par DJesus dans le forum Langage
    Réponses: 31
    Dernier message: 08/03/2007, 15h06
  3. Début difficile en Visual C++ 2005 .NET
    Par kinouseb dans le forum C++/CLI
    Réponses: 6
    Dernier message: 22/11/2006, 09h20
  4. [RCP]Début difficile - Ou est ma vue ?
    Par Procyon dans le forum Eclipse Platform
    Réponses: 15
    Dernier message: 09/10/2006, 09h16
  5. [FASM=>NASM] Problème traduction avec MOD et $
    Par SteelBox dans le forum Assembleur
    Réponses: 4
    Dernier message: 30/05/2005, 14h16

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