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 :

Débuter en Assembleur


Sujet :

Assembleur

  1. #1
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut Débuter en Assembleur
    Voilà, j'ai quelques notions dans divers langages, et je voudrais me lancer dans l'asm; j'ai téléchargé Tasm mais les diférents codes que j'ai trouver dans les tutos ne marchent pas dessus. Quelqu'un peut me filer un petit code qui affiche un message a l'écran, juste pour voir ?

    Sinon vous me conseillez quoi comme tutos complets, car je n'en ai pas vue des tonnes qui apprennent l'assembleur... en fait il n'y en a que 2...
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  2. #2
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Bon j'ai réussi a faire un programe qui marche avec un mov ax vers ex. Bon come vous avez compri ce programe afiche : RIEN!

    Donc des peutites questions : Comment aficher un message avec FASM(message db "teste",'$' sa marche pâs >_<) sans utiliser d'api!
    Quel est le meilleur compilateur asm si on vut créer par exemple un systheme dexploitation, ou un programe multiplateforme(windows/mac/linux...)


    Moi qui penssais trouverLE langage asm, je me retrouver avec 1 langage asm par compilateur...
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  3. #3
    Membre à l'essai Avatar de flaith
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 11
    Points : 19
    Points
    19
    Par défaut
    salut,
    si tu ne veux pas utiliser les api, tu utilises alors les interruptions du DOS !

    du genre (code tiré de FASM):

    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
     
    ; fasm example of writing simple EXE program
     
    format MZ
     
            push    cs
            pop     ds
     
            mov     ah,9
            mov     dx,hello
            int     21h
     
            mov     ax,4C00h
            int     21h
     
    hello db 'Hello world!',24h ; a la place de 24h on peut mettre '$'

  4. #4
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut


    Ok, alors euh ça veut dire quoi format
    Et quel est l'intérêt de pusher tous ces machins sur la pile???

    Bon comme je me doute que format défini un paramètre quand a l'exécution, et que les push et mov servent au fonctionnement du message, je vais donc aller directement a la vraie question : où trouver un tutoriel qui explique ça, et plus?
    Car j'ai déja feuilleté les tutos de developpez.com, mais les exemples de codes ne marchent pas (en tout cas pas sur fasm)
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  5. #5
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Dans ton 1er post, tu dis t'être procuré TASM.
    Cela tombe bien : tous les exemples contenus dans le tutoriel de Benoit-M suivent les règles de syntaxe de TASM.

    Avant de te lancer dans l'écriture d'un OS, il vaut mieux t'initier à l'Assembleur en général et ce genre de tutoriel devrait t'être très utile.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  6. #6
    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
    Comme personne ne l'a encore fait...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            push    cs  ; "S"egment de "C"ode sur la pile
            pop     ds  ; "S"egment de "D"onnees = cs (on ne peut pas faire de mov ds,cs
     
            mov     ah,9 ; fonction 9
            mov     dx,hello ; dx=adresse de la chaine (en fait ds:dx)
            int     21h 
     
            mov     ax,4C00h  ; ca c'est pour finir le programme et revenir a DOS
            int     21h
    voila !

    Il vaut mieux que tu commences a lire des tuts et apprendre les
    differents registres de ta machine (pas tous pour debuter)
    enfin, si tu as des question n'hesites pas

    a+ Francois

  7. #7
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Bonjour, d'abord désolé de faire remonter ce message qui date d'il y a si longtemps, mais voilà qu'après avoir acquis plus d'expérience grâce au c++, je me re-lance dans la programmation asm. J'ai finalement choisi FASM pour développer. (Utilisé pour SKAN, donc pourquoi ne pas commencer directement par la?)
    Seulement je voudrais savoir pourquoi dans les .exe, on doit faire pointer le segment de données vers le segment de code?! Alors qu'avec les .com, il n'y a pas ce problème?
    Et encore une petite question. Où pointe donc le segment de données avant la manipulation?

    Edit: Ah oui, j'allais oublier, vaut-il mieux utiliser
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mov ax, cs
    mov ds, ax
    ?
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  8. #8
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par JC_Master
    Et encore une petite question. Où pointe donc le segment de données avant la manipulation?
    Après le chargement de l'exe en mémoire, le segment de données pointe sur le début du PSP.

    Citation Envoyé par JC_Master
    Seulement je voudrais savoir pourquoi dans les .exe, on doit faire pointer le segment de données vers le segment de code?! lors qu'avec les .com, il n'y a pas ce problème?
    Toutes les données, toutes les instructions et la pile d'un programme .com sont comprises dans un bloc de maximum 64 Kb (un segment). Lors du chargement en mémoire, tous les registres de segment ont déjà la même valeur.
    Dans un .exe, il est plus rare d'inclure des données dans le segment de code. On ne doit pas faire pointer le registre ds vers le segment de code, on peut le faire.

    Citation Envoyé par JC_Master
    vaut-il mieux utiliser
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mov ax, cs
    mov ds, ax
    ?
    Un push sreg et un pop sreg sont des instructions d'un seul octet tandis que les mov sreg,reg et mov reg,sreg en nécessitent deux chacune.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  9. #9
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Dans ce cas je n'aurais pas du écouter le tuto, c'est ce qu'ils disent de faire ^^
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  10. #10
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par JC_Master
    Dans ce cas je n'aurais pas du écouter le tuto, c'est ce qu'ils disent de faire ^^
    A propos du push/pop ou bien de la nécessité d'assigner à ds la valeur de cs ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  11. #11
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Changer les adresses des segments.
    Sinon, pourquoi ceci ne marche pas :
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  12. #12
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Salut !

    Cette instruction ne fonctionne pas tout simplement parce que le processeur est incapable de l'exécuter.

    Pour faire des .exe avec FASM il faut définir tes segments :

    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
          Format MZ          ;Tu veux faire un exe DOS
          entry  CODE_SEG:Start  ;Point d'entrée du programme
     
    segment CODE_SEG  ;Segment de code (tu peux l'appeler comme tu veux)
     
      Start:                   ;Point d'entrée comme définit plus haut
     
        push    DATA_SEG ;Au début, ds ne pointe pas sur le segment de données
        pop     ds
     
        mov     dx, Message  ;Message est défini dans DATA_SEG,
        mov     ah, 09h        ;son adresse est calculéé par rapport à ce segment
        int     21h        ;Affichage du message (Int 21h --> 09h)
     
        mov     ah, 08h  ;Petit truc utile si tu veux avoir le temps
        int     21h  ;de voir ton message^^
                      ;Ce service du DOS attend qu'une touche soit pressée
     
        mov     ax, 4C00h 
        int     21h    ;On quitte
     
    segment DATA_SEG
     
        Message db 'Hello World !', '$'    ;Terminaison en '$'
    Par défaut, FASM calcule les adresses des variables par rapport au segment dans lequel elles sont définies.
    Ainsi Message est calculé par rapport à DATA_SEG.

    Mais tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mov     dx, CODE_SEG:Message
    Mais ça n'a là aucun intérêt et ne fonctionnerait pas dans le programme, car le DOS utilise l'adresse DSX, donc si DS pointe sur DATA_SEG, il va y avoir quelques problèmes...
    On pourrait y remédier en faisant pointer DS sur CODE_SEG.

    Mais tout cela n'a aucun intérêt dans notre cas de toutes façons...

    Attention je n'ai pas testé le prog 8) donc il se peut que j'ai fait une erreur...
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  13. #13
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Oula, déja que j'ai du male et que je mélenge les segments(ds/cs), et mentenant tu me rajoute des nouveaux noms ^^
    J'ai aps comprit, ici on fait pointer ds vers cs, hor j'ai resu un message précédent disan qu'il ne falais pas! Alors comment je fait pour aficher message qui est en cs, si ds pointe toujours vers son emplacement de départ?!
    Nb: Dans mon code précéden, message es défini dnas le même segment que le reste du code...
    Mais je présise que je débute! J'ai justement prévu de m'acheter un livre récent pour bien comprendre comment fonctione la programation assembleur, quels sont les conventions, et surtout eviter de bousiller mon pc avec des codes douteux.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  14. #14
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Le programme que je t'ai montré était un .EXE sous DOS.
    Celui que tu utilise c'est un .COM.

    Si tu ne vois pas encore la différence entre les deux je te conseille de lire entièrement le tuto de Benoît-M cité plus haut, depuis le début et sans sauter les étapes, car cela est merveilleusement bien expliqué et même si l'auteur utilise TASM dans ses exemples les principes du DOS, du segmentage de la mémoire, des interruptions etc. s'appliquent à tous les assembleurs.

    A partir de là il faut simplement réussir à 'traduire' les exemples codés en TASM vers un code FASM : on peut très bien t'aider là-dessus (j'utilise moi-même FASM donc pas de problème ) mais on ne va pas réexpliquer les principes de base alors qu'ils le sont si bien dans ce tutoriel...

    BONNE ANNEE à tous les développeurs et non développeurs !
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  15. #15
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Citation Envoyé par Nico*3-3
    Le programme que je t'ai montré était un .EXE sous DOS.
    Celui que tu utilise c'est un .COM.
    Non, c'est un .exe!
    Je n'ai donner qu'une ligne de code, pas la totalitée. Et en première ligne il y a bien le Format MZ.

    Déja, je ne savais comment définir l'entrée du programe, et un autre segment de donée.
    Donc, j'avais un segment de code/de donnée, pour la totalitée du code.
    Je voudrais donc savoir, comment accèder a une donnée qui se trouve dans le segment de code, sans pour antent faire basculer le segment de donnée sur le segment de code
    (Même si mentenant que je sais définir plusieurs segment, grace a toi, je ne referait plus jamais cela.)
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  16. #16
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par JC_Master
    Je voudrais donc savoir, comment accèder a une donnée qui se trouve dans le segment de code, sans pour antent faire basculer le segment de donnée sur le segment de code
    Tu peux aussi te servir du registre de segment ES au lieu de DS
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  17. #17
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Donc, il n'y a aucun moyen avec cs:message ? C'est bizare, je ne voit pas trop pourquoi... Sinon, avec ES, il faut que je le fasse pointer vers cs, et que ensuite j'entre es:message ?
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  18. #18
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Tu peux nous montrer le prog complet s'il te plaît ?
    Si tu n'utilises qu'un segment, c'est forcément un COM (même si à la sortie le fichier est un .EXE).

    Montre-nous le code je suis sûr que tu te compliques la vie pour rien !

    PS : Le processeur ne peut pas traiter CS:Message ni ES:Message, ni n'importe quel autre registre de segment comme ça tout simplement parce que l'instruction n'existe pas et n'a pas de vrai sens, c'est pour ça que je penses que tu te compliques le choses...
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  19. #19
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Enfaite, je croi que j'ai comprit. Pour acèder a une donée, on passe obligatoirement par ds:nom.
    Donc, quand je fait mov ax,val, ce qui ce produit c'est que ce que l'adresse ds:val est mit dans ax, c'est bien sa?

    Nb: Quelquin peut me presiser si [val] représente une adresse ou la valeur? Parce que je parle un coup d'adresse, un coup de valeur, pour la même chose, parce que je ne sais pas cela. Daprès ce que j'ai lut, val est l'adresse et [val] la valeur, c'est sa?
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  20. #20
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Salut !

    Alors tout d'abord petites conventions d'écriture en FASM (différences par rapport à TASM):
    Quand tu définis une variable ("Var dw 08FCh" par exemple). Var est traité comme un label, c'est-à-dire que "mov dx, Var" mettra toujours l'adresse de la variable nommée Var dans DX, la valeur du labels on veut...
    Les crochets eux signifient toujours un "déréférencement de pointeur" pour comparer avec les langages de haut niveau. Ce qu'il y a entre les crochets est une adresse et [adresse] est ce qui ce trouve à cette adresse. Ansi "mov dx, [Var]" mettra la valeur 08FCh dans DX.

    C'est la difference fondamentale entre la syntaxe TASM-MASM et celle de FASM-NASM.
    Donc dans ton cas, "mov dx, Message" mettra dans DX l'adresse du début de ta variable alors que "mov dx, [Message]" mettrait les deux premiers octets de ta chaîne dans DX (puisque DX est un mot, donc deux octets).

    En fait tu doit passer par DS parce que la fonction du DOS se base sur DS. Elle doit être déclarée comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mov  al, [ds:dx] ;ceci est possible
    S'il y avait ça :
    On devrait se baser sur ES.

    Ce qu'il faut comprendre c'est que le DOS utilise l'adresse d'un segment (DS), plus un décalage (DX).
    Il faut donc que DS dans ton programme pointe sur le bon segment, et que DX ait la bonne valeur de décalage par rapport à au segment pointé par DS. Une fois que tu auras assimilé ça ce sera bon.

    Ton programme n'est composé que d'un seul segment ce qui simplifie grandement les chose pour toi. En effet dans un programmede ce type le DOS fait automatiquement pointer tous les registres de segment sur le même segment, ce qui veut dire que DS = ES = CS... Et il se trouve que ton assembleur calcule automatiquement toutes les adresses de tes variables et labels par rapport à ce même segment, tu n'as donc pas à t'occuper de la valeur de DS quand tu appelle l'Int du DOS :
    Ceci suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mov  ah, 09h
    mov  dx, Message
    int  21h
    Tu peux mettre ça directement au début de ton programme.
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

Discussions similaires

  1. Tutoriels pour débuter en Assembleur
    Par Alcatîz dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 25/03/2013, 17h50
  2. Comment débuter avec l'Assembleur ?
    Par deessemba dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 16/10/2010, 15h17
  3. Assembleur : quel cours choisir pour débuter ?
    Par Débutant_ASM dans le forum Assembleur
    Réponses: 3
    Dernier message: 26/02/2010, 18h36
  4. Pour débuter : tutoriel et choix d'un assembleur
    Par damien77 dans le forum Assembleur
    Réponses: 9
    Dernier message: 25/06/2007, 23h01
  5. Débuter l'Assembleur sous Windows XP
    Par Bibouda dans le forum Assembleur
    Réponses: 2
    Dernier message: 03/12/2005, 02h41

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