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ébutant] Afficher l'heure


Sujet :

Assembleur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 124
    Points : 43
    Points
    43
    Par défaut [Débutant] Afficher l'heure
    Bonjour

    Je débute en Assembleur et je cherche à afficher l'heure, j'ai donc fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mov ah,02h
    int 1Ah
    Je sais qu'en sortie j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CH = Heures
    CL = Minutes
    DH = Secondes
    et je voudrais, par exemple placer le contenu de CL dans AX (ou variable DW)
    pour ensuite l'afficher (ça c'est bon).
    Mais quand je fais
    j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Operand types do not match
    Merci de votre aide!

    ps: je débute !!
    j'utilise TASM

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Ton probleme vient du faites que tu veut deplacer le contenu d'un registre 8 bits dans un registre 16 bits tu devrait plutot deplacer cl dans al,bl ou dl

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 124
    Points : 43
    Points
    43
    Par défaut
    merci , je comprend un peut mieux,
    mais jai essayer cl->bl(al ou dl)->ax mais sa marche pas (surement pour le 8->16bit)

    comment je peut faire pour transformer un CL vers un dword ou un ax ?
    il doit avoir un moyen en passant pas plusieurs étape mais je sais pas lequelle

    je le répète : je débute

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Il faut mettre la partie haute du registre destination à 0:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    xor ax,ax  // mise à zéro de ax
    mov al,cl
    Ce que tu as fait avec tes cl->bl(al ou dl)->ax ne peut pas marcher, tu as bien vu pourquoi, à un moment, tu as toujours le passage 8 bits vers 16 bits.

    Donc, à partir de là, il aurait fallu te poser la question:
    - Que donne une valeur 8 bits transférée dans la partie basse d'un registre 16 bits, si on veut que ce registre 16 bits contienne la même valeur que le 8 bits d'origine?

    Et tu aurais normalement trouvé la réponse:
    - si on ne met pas la partie haute du registre 16 bits à 0, alors ce registre 16 bits ne contient pas la bonne valeur

    Et tu avais la solution.

    Attention quand même, ça ne marche que pour les valeurs non signées. Pour les valeurs signées, c'est un peu différent, car il faut gérer le signe.
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 124
    Points : 43
    Points
    43
    Par défaut
    merci !!
    j'ai fait comme tu ma dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    mov ah, 02h ;bios->heure....
    int 1Ah  
    xor ax,ax
    mov al,cl
    mov nb,ax
    call print_nbr16
    et j'obtiens des résultats bizarre j'obtiens des 67minute et des 32heure...

    mais finalement je crois que je reçois des données erroné dès le départ, parce que quand je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    xor ax,ax
    mov cl,15
    mov al,cl
    mov nb,ax
    call print_nbr16
    j'obtiens bien 15 ! donc la conversion 16->8bit marche parfaitement

    pourquoi le BIOS m'envoie de mauvaise données ?
    merci de votre aide

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par Guillaume602
    pourquoi le BIOS m'envoie de mauvaise données ?
    merci de votre aide
    Depuis le temps que je n'ai pas codé de telles fonctions en assembleur, je ne sais plus ce que l'interruption est censée te renvoyer, et je n'ai plus les docs que j'utilisais dans le temps.
    Si tu veux bien me montrer ce que donne ta doc, on pourra sans doute aller plus loin.
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  7. #7
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    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 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    En fait, les données renvoyées par la fonction 02h de l'interruption 1Ah sont en BCD (Binary-Coded Decimal) !
    http://lrs.fmi.uni-passau.de/support...57/RB-2209.HTM
    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]

Discussions similaires

  1. [débutante]Afficher l'heure ou la date
    Par Lydie12 dans le forum Développement
    Réponses: 9
    Dernier message: 16/05/2014, 15h50
  2. [Débutant] afficher l'heure du système ?
    Par ibma4 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/07/2007, 16h32
  3. [Débutant] Afficher date et heure
    Par matchieu dans le forum LabVIEW
    Réponses: 3
    Dernier message: 09/07/2007, 17h03
  4. afficher l'heure toutes les minutes
    Par rvfranck dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 22/02/2005, 14h12

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