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 16-bits Assembleur Discussion :

[NASM] Afficher une chaîne de caractères


Sujet :

x86 16-bits Assembleur

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Points : 12
    Points
    12
    Par défaut [NASM] Afficher une chaîne de caractères
    Bonsoir !

    Comme je suis débutante en langage assembleur, j'essaie de commencer avec de simples programmes. Je suis arrivée à faire fonctionner un programme qui permet d'afficher un nombre non signé avec NASM ; ensuite j'ai essayé de modifier le programme pour faire en sorte d'afficher une chaîne de caractères.

    Je sais que pour un chiffre, on doit faire des divisions successives sur 10 puis stocker le résultat dans une case mémoire pour l'afficher ensuite ; j'ai essayé de faire la même chose pour la chaîne mais ça ne marche pas.

    Pouvez-vous m'aider?
    Merci.

  2. #2
    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
    afficher une chaine:
    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
     
    afficher:
    mov si, chaine
    les di,[ecran_texte]
    mov ah,4Fh ;rouge sur fond blanc
    @@:
    lodsb
    cmp al,0
    je .fin
    stosw
    jmp @b
    .fin:
    ret
    chaine db 'salut mademoiselle',0
    align 4
    ecran_texte dd 0b800h:0
    voilà, il ne te reste pus qu'a inclure ça dans ton code. et faire

    call afficher

  3. #3
    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,

    @--1--: Ça m'a pas l'air très portable le code. Si j'ai bien compris, tu écris directement dans la RAM vidéo (or les OS modernes interdisent cet accès direct, sauf si on développe un driver en kernel-mode).

    @z.rhita: Tu peux nous montrer ce que tu as fait?

  4. #4
    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
    bien sur que si qu'il est portable, tu le met dans une clé usb, et hop, il devient portable.
    tu peut meme l'envoyer par email, et hop, il devient virtuel, trop magique.
    lorsque une personne débute, il faut qu'elle commence par le commencement, la prog sous dos (ou assimilé).
    apres elle peut commencer à jouer avec les api système.

    surtout que coder avec les API système n'enseigne rien quand au fonctionnement d'un programme.

    afficher sous windows:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    include 'win32ax.inc'
    .data
      fmt           db '%d',0
      output_string rb 20h
    .code 
    start:
            mov eax,654356
            invoke  wsprintf,output_string,fmt,eax
            invoke  MessageBox,HWND_DESKTOP,output_string,NULL,MB_OK
            invoke  ExitProcess,0
    .end start
    c'est portable à la windows, mais d'un coup, on comprend plus rien.

  5. #5
    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
    C'est sûr que d'utiliser les facilités de MASM pour développer, ça ôte tout intérêt à la programmation en assembleur (autant faire du Basic dans ce cas).

    Mais si on s'amuse à utiliser les APIs en pushant les paramètres, et à créer des fonctions en récupérant directement les arguments sur la pile, ça devient tout de suite plus instructif et amusant .
    Sinon pour en revenir à ton code, y'a des interruptions sous DOS... Alors pourquoi aller s'embêter à écrire directement dans la RAM vidéo? (qui sert quand on veut programmer un OS)

  6. #6
    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
    pourquoi ecrire dans la ram video?
    parce que c'est possible et ne depend ni de dos, ni de bios ni de personne et est super rapide quand il s'agit de n'afficher que sur ecran VGA, très rapide. il suffit juste d'avoir un PC sur lequel faire tourner le code. que ce soit boot, dos, certains windows devenus anciens depuis..
    pas linux parce qu'il interdit de faire ça justement.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/12/2012, 16h24
  2. Afficher une chaîne de caractère
    Par javast dans le forum C++
    Réponses: 11
    Dernier message: 04/03/2012, 20h40
  3. Afficher une chaîne de caractères sur une seule ligne?
    Par Antigonos Ier Gonatas dans le forum Général Python
    Réponses: 3
    Dernier message: 14/06/2006, 23h07
  4. [NASM][Linux] Afficher une chaîne à l'écran
    Par aloula dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 26/04/2006, 07h17
  5. [NASM] Saisie d'une chaîne de caractères
    Par Skyounet dans le forum Assembleur
    Réponses: 9
    Dernier message: 29/08/2005, 12h31

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