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 :

Flags ?? [FAQ]


Sujet :

Assembleur

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 13
    Points : 3
    Points
    3
    Par défaut Flags ??
    Bonjour, j ai entendu des différents types de flags : zero flag, flag overflow, sign flag et carry flag.

    A quoi sert un 'flag' et quelle est le differences entre ceux-ci ?

    Merci d avance

    P.S : J ai fait une recherche sur le site et dans google mais je n ai rien trouvé... (Moi non plus je comprend pas...)

  2. #2
    Membre régulier

    Inscrit en
    Juin 2002
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 18
    Points : 105
    Points
    105
    Par défaut
    Il me semble que ça concerne plus l'assemblur ça, non? A tout hasard, fais une recherche sur le forum assambleur, tu trouveras peut-être quelquechose.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Rien a faire, je trouve rien sur ces fameux flags... En fait le prof en a parler en faisant allusion au C...

    En fait je dois absolument savoir ce que c est car je dois realiser une serie d exercices du genre : 0c0h + 40h (=> je dois convertir en binaire puis effectuer l operation et apres positionner les 'flags - Z C O S)

    Je précise que ce n est pas au cour de c que le prof en a parler mais il en a fait allusion ( au C). C'est pour le cours de 'techniques des microprocesseurs' que je dois savoir ca...


    P.S : si je me suis tromper de forum je men excuse mais je croyais que ca concernait le C...

  4. #4
    Membre régulier

    Inscrit en
    Juin 2002
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 18
    Points : 105
    Points
    105
    Par défaut
    Bon, moi j'ai vu ça dans le cours d'assembleur, donc...
    Enfin voici ce que je sais : en fait les opérations sont réalisées sur un certain nombre de bits, quand tu as des dépassements, ben ce sont les flags que tu utilise pour les signaler : alors voici mon interprétation, qui doit pas être trop trop loin de la vérité
    - zero flag : le résultat est zéro
    - overflow : trop grand
    - sign : signe du résultat
    - carry : retenue


    Je jette un oeil dans mes polys pour vérifier

  5. #5
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    Perso je connais que ca en assembleur mais bon !! Voila quelques explications tiré d'un bouquin sur l'assembleur :

    zero flag : ce flag est mis a 1 si le résultat d'une instruction arithmétique a donné 0. La valeur du flag sera modifié à la prochaine opération arithmétique.

    flag overflow :Ce flag n'a un sens que si l'on travaille en mode signé (cf plus loin). Il est mis à 1 quand le signe change alors qu'il ne le devrait pas.sign flag : Il indique le signe du resultat d'une instruction ( 1 négatif, 0 positif)

    carry flag : Il sera mis à 1 si il y a retenue lors de la dernière instruction arithmétique .

    J'espere ke c clair. sinon redemande mais plutot forum assembleur. des mecs bcp plus fort que moi en assembleur te repondront.

    ZUL

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Je vous remercie bcp... Ci un admin passe par ici, il sait ce qui lui reste a faire... (direction asm). Si je dis que le prof est pas claire dans ses explication ca va me retomber dessus, alors je dis rien

    Au risque d abuser, vous savez comment convertir en binaire un pareil truc du genre 0c0h + 40h ? Comme je l ai dit je dois convertir ca en bianire puis faire l operation (additionner 2 binaires, y a pas de prob, mais convertire 0c0h, 40h et jen passe en bianire je suis perdu...) J ai entendu dire qu il fallait ce servir de la table de converstion ASCII... Pas de probleme, si je suis cette logique, je regarde la lettre c et je prend la valeur decimale associee... mais dans lexemple de 0c0h jarrive a un nombre du genre (0)990104... Convertir ca en binaire je veux bien, mais on a vu que la methode de division ecrite (avec les restes) ... diviser ce nombre par 2 jusqu a ce qu il n y ait plus moyen et prendre les reste, je veux bien mais je ne pense pas etre sur la bonne voie...

    Si quun peut m aiguiller...

    encore merci davance

    P.S : je n ai pas juger utile de creer un post ds le forum asm car tt ce post va ds le forum asm a la reflexion... Donc des qu un admin vois ce topic il peut le mettre ds le forum approprié

  7. #7
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut Re: Flags ??
    Citation Envoyé par foussa
    Bonjour, j ai entendu des différents types de flags : zero flag, flag overflow, sign flag et carry flag.

    A quoi sert un 'flag' et quelle est le differences entre ceux-ci ?
    Effectivement ca s'utilise plutot en assembleur. En gros il faut savoir que les processeurs possede plusieur registre dont un qui contient une serie de flag qui sont mis a jour ou teste par le processeur lors de l'execution de certaines instructions selon le resultat.

    Citation Envoyé par foussa
    Au risque d abuser, vous savez comment convertir en binaire un pareil truc du genre 0c0h + 40h ? Comme je l ai dit je dois convertir ca en bianire puis faire l operation (additionner 2 binaires, y a pas de prob, mais convertire 0c0h, 40h et jen passe en bianire je suis perdu...)
    mais c'est deja du binaire ! la tu as une representation hexadecimale du nombre (plus comprehensible pour l'humain moyen) mais ce n'est qu'une representation, pour le processeur, 0c0h est un nombre binaire. Il n'y a rien a convertir

  8. #8
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    Bon on va supposer que le prof te demade de l'ecrire en binaire a la main. Donc voila la methode.
    C pas dur quand on sait que chaque caractère de l'hexa est compris entre 0 et 15 soit 2^4 possibilités.
    Donc pour convertir, tu prend le premier chiffre tu le convertis en binaire directement et tu recommence avec les autres chiffres.
    Ex parce que la je sens ke c pas tres clair

    A2

    2 se decompose en 0010
    A=10 se decompose en 1010

    donc A2 se decompose en 1010 0010

    J'espere que je ne me suis pas trompé lors de la convertion quand meme =)
    ZUL

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Merci, je crois que j ai compris... Enfin, on va voir ca tout de suite...

    Imaginons que je veuille converti 0c0h en binaire...

    0c0h

    0=0000
    c=1100
    0=0000
    h=???? => je ne le trouve pas

    Comme on est de 0 à 15, il n y a pas de h... J'ai remarqué aussi que certains calculs comporte des lettres en majuscules (C,c,A,B,...) Quelle est la difference maj/min. J ai limpressions qu il faut aller voir ds la liste des code ASCII non ?

  10. #10
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par foussa
    0=0000
    c=1100
    0=0000
    h=???? => je ne le trouve pas
    Le h n'est pas une valeur mais une indication pour signifier que le nombre est en hexadecimal.

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Hmm... ok, donc le resultat de 0c0h +40h donnerait

    0c0h = 000011000000

    40h = 01000000 (je convertit 4 en binaire puis zero)
    +--------------------------
    000111000000 = 0c0h + 40h

    ca vous parait juste ?

  12. #12
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    Non je crois que tu t'es trompé. Petite precision , tu peux ne pas convertir les 0 a gauche du nombre comme en base 10. Pour additionner, il fo aligner les bits de meme poids ( meme position )

    Donc 1100 0000
    + 0100 0000
    ______________
    1 0000 0000=0001 0000 0000= 100h

    ce qui peut se verifier en passant en decimal

    0c0h=0*16+12*16=192
    40h= 0*16+4*16=64
    donc 0c0 h + 40 h= 296
    100h=0*16+0*16+1*16^2=256

    Voila, hesite pas si tu veux plus d'explications.

    ZUL

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Arf, je vois pas ce que tu veu dire par lalignement des bits...

    on est daccord que je dois additionner ces 2 terme :

    1100 0000 + 0100 0000 ET ca doit donner : 1100 0000 Non ?

    Il est vrai que qd je fais la verification (bianire=> decimal) je tombe a 56... - je ne suis qua 100 pres de la reponse...

    Pourrais tu mexpliquer plus precisement le principe d alignement ? merci d avance

  14. #14
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    Bon un peu de math. Soit une base b.Soit x un nombre quelconque. Alors x peut s'ecrire

    x= a0 + a1 * b+ a2 * b^2+ a3 *b^3+ .... an * b^n

    Donc lorsque tu realise une addition, tu dois additionner les bits de meme poids, c'est-a-dire ceux ki ont le meme puissance pour b ( bon la ca doit pas etre clair=)). En base 10 (base classique) tu additionne les dizaines avec les dizaines , les centaines avec les centaines etc ...
    En base 2, c pareil.

    Concretement, comment faire le calcul.
    Tu calle tes chiffres a droite et tu rajoute des zeros a gauche pour ke les nombres soit de meme longueur. Ensuite tu additionne en sachant ke 1+1 =10 donc j'ecris 0 et je retiens 1.

    Exemple : additionnons 0110 0011 0111 et 0100 1101

    Premier operation : callage a droite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
              0110 0011 0111
                   0100 1101
    Deuxieme operation : on rajoute les 0

    0110 0011 0111
    0000 0100 1101

    Troisieme operation : on fait l'addition proprement dite

    0110 1000 0100

    Voila, en esperant etre clair mais c pas facile de faire des maths comme ca.

    ZUL[/code]

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Encore merci a toi, maintenat tout est clair pour moi !

    Pour vous prouver que je prend grand soin de vos conseils, je fais l'exercice devant vous

    0c0h + 40h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    a) Convertion en bianire : 0000 1100 0000 + 0000 0100 0000 
     
    b) Resultat en bianire : 0c0h + 40h = 0001 0000 0000
     
    c) Resultat en décimal : 1*2^8 = 256
     
    d) Resultat en hexadecimal : 100h
     
    e) Positionnement des flags : ?? Ca ce sera pour une prochaine fois  :wink:

    Voila je vous remercie encore en esperant que les resultats soient justes. Maintenant j ai une page pleine a faire mais j ai compris le principe donc je pense que ca ira...

  16. #16
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Citation Envoyé par foussa
    e) Positionnement des flags : ?? Ca ce sera pour une prochaine fois [/code]
    Si les calculs se font sur 8 bits, alors le flag Carry est positionne a 1, et le flag Zero a 1 aussi (on a zero sur 8 bits !), le flag Overflow est aussi postitionne a 1 et le signe je sais pas j'aurais dit 0 (positif).

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Ok c est noté en merci pour toutes vos explications



    P.S : dsl pour le retard mais j ai eu qq problemes de connections ...

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    il i a un truc qui m echappe vous faite comment pour trouver le h en binaire??

  19. #19
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par chaolin
    il i a un truc qui m echappe vous faite comment pour trouver le h en binaire??
    comme je l'ai deja signale, le h n'intervient pas dans la valeur mais indique qu'il s'agit d'une valeur representee en hexadecimal, il n'est donc pas a convertir.

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    mais biensur excuse moi il ete 11h passé je ni penser plus mille excuse pour avoir pausé une question aussi pourri

Discussions similaires

  1. [MFC] Flags sur OnKeyDown
    Par nico-pyright(c) dans le forum MFC
    Réponses: 5
    Dernier message: 03/10/2005, 10h00
  2. Réponses: 1
    Dernier message: 11/09/2005, 02h04
  3. [Débutant]Fonction avec des flags
    Par @r$£~%[ dans le forum C++
    Réponses: 10
    Dernier message: 22/08/2005, 10h19
  4. [langage] Flags et listes
    Par claire14pb dans le forum Langage
    Réponses: 22
    Dernier message: 23/05/2005, 22h54

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