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 :

[Tutoriel] Découverte de l'assembleur Intel avec NASM


Sujet :

Assembleur

  1. #21
    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
    Matarc: tu peux te renseigner sur le format ELF (prit en charge par le noyau Linux et BSD, parmi d'autres) et sur les syscalls qui ne sont pas les même que pour DOS (la recherche "linux+syscalls" donne de très bons résultats sur Google ou le Man 2 de Linux).

  2. #22
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Je trouve le tuto bien mais mon pc tourne sous win7-64bits. Et j'ai à l'exécution un joli : Le programme ne peut être lancé en 64 bits.
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  3. #23
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 341
    Points
    341
    Par défaut
    Oups ! Désolé.

    Comme je n'ai pas de Windows 7 sous la main, il va falloir me donner un peu plus d'informations. Quel chapitre, quelles commandes, quel fichier, ce genre d'informations. Plus ce sera précis et mieux je pourrai chercher une solution.

  4. #24
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Citation Envoyé par Chevalier au taureau Voir le message
    Oups ! Désolé.

    Comme je n'ai pas de Windows 7 sous la main, il va falloir me donner un peu plus d'informations. Quel chapitre, quelles commandes, quel fichier, ce genre d'informations. Plus ce sera précis et mieux je pourrai chercher une solution.
    Le tout premier programme, "Hello papi."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    org 0x0100 ; Adresse de début .COM
    ;Ecriture de la chaîne hello dans la console
    mov dx, hello
    mov ah, 0x9
    int 0x21
    ret
    hello: db 'Bonjour papi.', 10, 13, '$'
    .
    La compilation se produit sans soucis, mais l'OS ne parvient pas à exécuter le .COM obtenu
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  5. #25
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 341
    Points
    341
    Par défaut
    C'est tout ? Pas de message d'erreur ?
    En mode de compatibilité windows XP, ça donne quoi ?

  6. #26
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2009
    Messages : 1
    Points : 3
    Points
    3
    Par défaut Merci
    Bonjour, je tenais tout d'abord à vous remercier pour toutes ces précieuses informations sur l'assembleur, le BIOS, etc...

    Je suis votre "tutoriel" avec un grand intérêt.

    J'en suis au chapitre IV, or je rencontre des difficultés:

    Je suis sous windows 7 x64, donc bien évidemment dès le début, lorsque j'ai voulu exécuter un programme .com (16bit), windows m'a jeté avec un message explicite.

    La solution qui fonctionnait jusque là, (attention ce n'est pas forcément la meilleure...), fut d'installer windows Virtual PC, et de créer un ordinateur virtuel sous windows XP.

    Cette solution a fonctionné jusqu'au chapitre III inclus, mais je ne sais pourquoi, avec le code du chapitre IV j'ai le message d'erreur suivant :


    Je pense donc que je vais me rabattre sur la solution "dosbox" que vous avez évoqué concernant windows Vista...

    Sinon j'ai une question :
    Dans le chapitre : IV.2. Le refacteur sonne toujours une paire de fois (refactoring)

    Pour l'instruction LODSB, ne serait-ce pas plutôt l'équivalent de
    MOV AL, [DS:SI] ; en gardant la syntaxe destination, source (intel)
    INC SI

    de même pour STOSB qui devient :
    MOV [ES:DI], AL
    INC DI

    J'avoue que lorsque que j'ai lu le chapitre ce détail m'a perturbé.

    Enfin encore merci!!!

    Ps: si vous avez des choses à ajouter sur le sujet je serait ravi de pouvoir les lire...

  7. #27
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 341
    Points
    341
    Par défaut
    Bonjour,

    Merci de vos compliments, mais n'en jetez plus, je pourrais les croire.

    En effet, vous avez une interdiction d'accéder aux services vidéo du BIOS à partir de Vista. La machine virtuelle Windows ne restaure peut-être pas l'accès à ces services.

    Vous m'avez tout l'air d'avoir repéré une coquille, que je m'en vais corriger de ce pas nonchalant (parce que là je suis un poil juste, en temps).

    Vous trouverez la suite du tuto ici, ou bien les dernières versions, y compris celles en cours de développement

    Au plaisir de vous lire,

  8. #28
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour ce tutoriel, il est extrêmement bien fait!

    Mais j'ai malheureusement aussi un problème...

    Dans le chapitre III.II., on nous montre un code avec des fonction et qui devrais proposer une interaction avec l'utilisateur mais quand je lance le programme, il se contente d'afficher la première ligne de texte et bloque la console alors qu'il devrait afficher cette première ligne puis laisse l'utilisateur entrer une ligne puis l'affiche et affiche une seconde fois le tout premier message...

    Help...

    Merci de votre attention

  9. #29
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 341
    Points
    341
    Par défaut
    Arf. Je dois préciser : effectuer un "cls" avant de lancer le programme. CLS pour CLear Screen, nettoyer l'écran. Le code, simpliste, ne gère pas le dépassement de l'écran. CLS vous remet en haut de l'écran.

    Je mets à jour dès que possible.

  10. #30
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup sa fonctionne

    Cordialement

  11. #31
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Je viens de commencer à lire ce tutoriel pour comprendre un peu moins mal le code assembleur obtenu avec des programmes en C. J'apprécie le style d'écriture et je souhaiterais en particulier applaudir la phrase suivante :

    en RAZant (de l'informaticien RAZer : effectuer une RAZ, Remise A Zéro)
    SPLENDIDE !!!


    PS : dans la partie II.4. Des soucis, le premier code contient une phrase qui n'aurait pas dû être dans le code ("Et juste après le JZ, on insère :").

  12. #32
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    Salut je viens de lire ton tutoriel,

    J'étais au dernier chapitre a fond dans l'action, je clique sur suivant et la apparition de la page remercient, je fait retour arrière "genre y'a un bug"... et bha non je suis passer de sa à sa .

    La rédaction est génial j'ai suivit d'autre tutos mais la j'ai compris tout de suite, alors je trépigne en attendant la suite !

    A très bientôt !

    PS: Mon but est de crée un langage évolué avec comme base l'assembleur

  13. #33
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    de même, très bon tuto!!

    Dommage qu'il soit un peu abandonné: toute les pages sur ton site (http://laetitia.coilliot2.perso.neuf...eur/index.html) ne sont pas présente ici!!

  14. #34
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 146
    Points : 156
    Points
    156
    Par défaut
    salut et merci pour ce tuto


    pour ce code, http://esauvage.developpez.com/tutor...e=page_2#LII.2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mov ah, 0x0A
    mov al, 'B'
    xor bx, bx
    mov cx, 1
    int 0x10
    ret
    pourquoi tu n'a pas ajouté l'instruction

  15. #35
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 341
    Points
    341
    Par défaut
    Bonjour,

    C'est parce que c'est une directive d'assemblage et non de l'assembleur à proprement parler. C'est la valeur par défaut dans NASM, il est donc superflu de la préciser. Après, pour des notions de lisibilité, je veux bien entendre que c'est une bonne pratique. Bonne prog !

  16. #36
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 146
    Points : 156
    Points
    156
    Par défaut
    salut
    dans le code ici http://esauvage.developpez.com/tutor...e=page_2#LII.3

    pourquoi ça marche pas si je tente de faire à la place de l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    or al, al;on compare al à zéro pour s'arrêter
    merci

  17. #37
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 146
    Points : 156
    Points
    156
    Par défaut
    salut
    dans le code ici

    je vois pas l'utilité de faire des push http://esauvage.developpez.com/tutor...=page_3#LIII.2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    push ax
    push bx
    push cx
    push dx
    et des pops

    je l'ai enlevé et ca a marché

  18. #38
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    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 214
    Points : 10 140
    Points
    10 140
    Par défaut
    C'est plus une 'habitude' de mettre des push/pop sur les fonctions , si tu utilise ax hors de ta fonction tu retrouvera avec push/pop la même valeur avant ou après l'appel de la fonction , sans c'est pas pareil ton ax peut etre modifier pendant l'appel de fonction , tout dépend de la façon de programmer (et de la machine cible , si chaque cycle compte pourquoi pas ).

    Par contre ce genre de code (push/pop) est quasi obligatoire pour les interruptions (m'enfin sur MS-DOS je ne sais pas si on peut écrire sois même les interruptions).

  19. #39
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 341
    Points
    341
    Par défaut
    va comparer un mot, tandis qu'on ne cherche qu'à tester un seul octet.

    Et la raison de la présence des push/pop est indiquée dans le paragraphe :
    Pour se faciliter le travail, nous allons sauvegarder les valeurs que ces registres avaient avant l'appel à la fonction. Comme ça, l'appel à la fonction est neutre au niveau des registres.
    La fonction modifie le contenu de 4 registres. Afin de remettre le processeur dans l'état d'avant la fonction, on commence par sauvegarder les registres. Et la dernière étape consiste à les recharger. Après l'appel à la fonction, le programme retrouve donc dans les registres les valeurs qu'il y avait mises. Donc oui, ça marche dans cet exemple sans les push/pop, mais rien que faire un affichage en boucle et ça ne fonctionne plus.

  20. #40
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 446
    Points : 43 088
    Points
    43 088
    Par défaut
    Ta fonction appelle d'autres fonctions (des int 0x10), qui sont susceptibles de modifier les registres ou d'utiliser des registres que tu vas positionner. Donc les registres sauvegardés peuvent ne plus contenir leur valeurs d'origine (avant appel de ta fonction), et peut donc poser des problèmes au code qui a appelé ta fonction, si il a encore besoin des valeurs écrasés. Dans une fonction on va donc sauvegarder les registres au début et les restaurer à la fin, ça s’appelle le prologue et l'épilogue de ta fonction.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/05/2008, 12h29

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