Flags PF/AF

Lilia_sys Messages postés 15 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 21 avril 2007 - 5 janv. 2007 à 20:22
Lilia_sys Messages postés 15 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 21 avril 2007 - 17 janv. 2007 à 19:21
Bonsoir tout le monde

1)Pourquoi le bit d'état PF (Parity flag) ne concerne que les 8 bits de poids faible du résultat de l'opération?? Et quel est le BUT d'indiquer si le nombre de bits à 1 est pair ou impair??

2)Pourquoi le bit d'état auxiliaire AF ne concerne la transition du 1 que entre les bits B3 et B4 précisément??

8 réponses

Nukleos Messages postés 31 Date d'inscription vendredi 31 décembre 2004 Statut Membre Dernière intervention 31 juillet 2008
6 janv. 2007 à 15:51
Il s'agit de drapeaux réservés à l'usage exclusif des opérations en BCD. (Binaire Codé Décimal).


Ces opérations de type 4-bits étaient à la mode à l'époque des processeurs 4-bits dans les années 197x. Elles sont aujourd'hui tombées en désuétude et sont même bannies pour les processeurs 64-bits.


La parité de bits était utilisée pour les transmission série. C'était une forme de CRC du pauvre...


Salutations.


Patrick
0
Lilia_sys Messages postés 15 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 21 avril 2007
6 janv. 2007 à 18:27
Merci Patrick
Est ce que tu peux etre plus explicite concernant le BCD, je connais le BCD mais je ne vois pas trop l'interet ici.


Et puis pour les termes TRANSMISSION SERIE et CRC du pauvre, j'aimerais bien que tu sois plus explicite aussi stp

Salutations

Lilia
0
Nukleos Messages postés 31 Date d'inscription vendredi 31 décembre 2004 Statut Membre Dernière intervention 31 juillet 2008
7 janv. 2007 à 13:51
Quelques liens,

pour  BCD :http://fr.wikipedia.org/wiki/Binary_coded_decimal

pour bit de parité :
http://fr.wikipedia.org/wiki/Bit_de_parit%C3%A9

J'espère que ces définitions te conviendront.
 
Patrick.
0
Lilia_sys Messages postés 15 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 21 avril 2007
13 janv. 2007 à 22:47
Salut,
Ok patrick, merci  infiniment pour les liens,sauf que ya une ptite confusion là concernant le PF lorsqu'on dit:

la parité du nombre est paire s'il contient un nombre pair de bits à 1 ; cela donne évidemment le même résultat que faire la somme des bits.
http://fr.wikipedia.org/wiki/Parit%C3%A9
Là je ne saisi pas trop ce que ça veut dire.
Soit c'est une contradiction avc ce qu'ils expliquent dans la suite en signalant qu'
Il ne faut pas confondre parité d'un nombre, et le fait qu'il soit pair ou impair (au sens mathématique du terme). Le nombre binaire 00000011 (3 en nombre décimal) est impair (non-divisible par 2) mais de parité paire (nombre pair de bits à 1).
Soit c'est moi qui ne comprends pas le sens de la phrase:-)

Et puis pour le code BCD, vu que les opérations arithmétiques dans ce code nécéssitent souvent une corréction du résultat final, est ce que vous pouvez m'expliquer comment se fait cette corréction au juste

D'avance, Merci!

Salutations
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nukleos Messages postés 31 Date d'inscription vendredi 31 décembre 2004 Statut Membre Dernière intervention 31 juillet 2008
14 janv. 2007 à 23:09
> la parité du nombre est paire s'il contient un nombre pair de bits à 1 ;
> cela donne évidemment le même résultat que faire la somme des bits.



> Il ne faut pas confondre parité d'un nombre, et le fait qu'il soit pair ou impair (au sens mathématique du terme).
> Le nombre binaire 00000011 (3 en nombre décimal) est impair (non-divisible par 2) mais de parité paire (nombre pair de bits à 1).



Tableau concret pour les nombres 0 à 17 :
00000000 ; nombre   pair ; SommeBits=000   paire ; PF=1.
00000001 ; nombre impair ; SommeBits=001 impaire ; PF=0.
00000010 ; nombre   pair ; SommeBits=001 impaire ; PF=0.
00000011 ; nombre impair ; SommeBits=010   paire ; PF=1.
00000100 ; nombre   pair ; SommeBits=001 impaire ; PF=0.
00000101 ; nombre impair ; SommeBits=010   paire ; PF=1.
00000110 ; nombre   pair ; SommeBits=010   paire ; PF=1.
00000111 ; nombre impair ; SommeBits=011 impaire ; PF=0.
00001000 ; nombre   pair ; SommeBits=001 impaire ; PF=0.
00001001 ; nombre impair ; SommeBits=010   paire ; PF=1.
00001010 ; nombre   pair ; SommeBits=010   paire ; PF=1.
00001011 ; nombre impair ; SommeBits=011 impaire ; PF=0.
00001100 ; nombre   pair ; SommeBits=010   paire ; PF=1.
00001101 ; nombre impair ; SommeBits=011 impaire ; PF=0.
00001110 ; nombre   pair ; SommeBits=011 impaire ; PF=0.
00001111 ; nombre impair ; SommeBits=100   paire ; PF=1.
00010000 ; nombre   pair ; SommeBits=001 impaire ; PF=0.
00010001 ; nombre impair ; SommeBits=010   paire ; PF=1.
........



PF peut être obtenu en prenant l'inverse du bit de poids faible de la somme des bits.





>Et puis pour le code BCD, vu que les opérations arithmétiques dans ce code nécéssitent souvent une corréction du résultat final, est ce que vous pouvez m'expliquer comment se fait cette corréction au juste



Petit programme à suivre dans un débogueur :
MOV AX,8    ; nombre 8.
ADD AL,3    ; augmenté de 3 égale 11. Mais 11 tient sur un octet.
AAA          ; Correction car on souhaite le nombre 11 écrit sur 2 octets.
                  ; AH=1 AL=1



A bientôt.



Patrick
0
Lilia_sys Messages postés 15 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 21 avril 2007
15 janv. 2007 à 21:21
Salut

Merci pour la réponse concernant le PF, chui super satisfaite :-) , sauf que a propos de l'exemple concerant le BCD, je suis un peu perdue, parceque là, si je cherche à savoir comment se fait la corréction  c'est pour pouvoir faire le lien avec le  AF . c à d comment se fait la corréction par le processeur, par exemple si on veut faire:


mov ax ,59D
add ax, 11D

Donc si je ne me trompes pas, ce code va faire corréspondre à chaque caractére du systeme décimal, un mot du code binaire sur 4bits . Quand on fait l'opération indiqué en haut on aura
01011001 + 00010001 on aura pour résultat 01101010 ,or ce résultat est faux puisqu'il faut obtenir 01110000( c. à .d  70), donc là il est necessaire de corriger ce résultat.


Concernant ton exemple, je ne vois pas la nécéssité de corriger le résultat

Bref, là je me nois dans un verre d'eau :-), je crois que j'ai tout faux  et qu'il ya quelque chose qui cloche dans mon raisonnement concernant les opérations arithmétiques dans le code BCD

A bientôt.


Lilia
0
Nukleos Messages postés 31 Date d'inscription vendredi 31 décembre 2004 Statut Membre Dernière intervention 31 juillet 2008
15 janv. 2007 à 22:23
Attention !!! il fallait écrire :

 MOV AX,59H ; en pensant mentalement que tu veux du Décimal.
 ADD AX, 11H ; en pensant mentalement que tu veux du Décimal.
 DAA  ; il faut dire au processeur que c'était du Décimal, d'où la correction qu'il fait à posteriori du résultat de l'addition réalisée en binaire naturel.

Tu comprendrais mieux si tu traçais le programme avec un débogueur.
En voici un ici : http://www.ollydbg.de/
Et le programme là : ftp://patrick.ruiz2%40libertysurf.fr@ftp.chez-alice.fr/DAA.exe

Patrick

P.S. : Où trouver l'option pour joindre un fichier dans un message ?
0
Lilia_sys Messages postés 15 Date d'inscription samedi 28 octobre 2006 Statut Membre Dernière intervention 21 avril 2007
17 janv. 2007 à 19:21
Bonsoir
Merci de m'avoir répondu Patrick, mais là mes blemes ne sont pas encore réglés :-(
Je ne suis pas douée en anglais , jme suis perdue sur le lien ke tu m'as passé.


Bon si tu veux mpasser un fichier, (je n'ai aucune idée sur la façon de le joindre dans le message), mais tu peux me l'envoyer a cette adresse :-) 
[mailto:asm_archi2@yahoo.fr asm_archi2@yahoo.fr]

A bientot

Lilia
0
Rejoignez-nous