-
Par diasmath le 5 Février 2007 à 12:49CHAPITRE VII
ANNEXE B : LES NOMBRES
'»
AVAmWOPOS SUR LES NOMBRES
On ne saurait dire à quand date le concept de
nombre. Mais on peut bien se figurer qu il ait
commencé dès la création de l'humanité.
Assemblons le code suivant dans le MS-DEBUG
a 100
3408:0100
3408:0103
34D8:0106
Î408:0108
34D8:010B
rnov ax, 0
sub an, f
not ax
add ax, 1
int 20
Voyons l'état initial des registres
avant de commencer l'exécution de
ce code, avec la commande
<r><cr>.
Ax=OOOF BX=0000
DS=34D8 ES=i408
OÎ3B:010Û BflOOOO
?0000 OX=0000 SP=FFE8
SS=34D8 CS=032B IP=0100
MOV AX.OOOQ
BP=OOQO 51=0000 DI=0000
NV DP Dl PL NZ NA PE HC
-t 4
AX'OOOO anïoooo
GS=Ï4Û8 ES=3408
0326:0103 200FOO
Cx^OOOO DX'OOOO SP=FFE8
SS=34D8 CS=032fl IP=0103
SUB Ax.OOOF
BP=0000 S 1=0000 D1=0000
HV UP Dl PL NZ NA PE ItC
AX contenant zéro, l'exécution de
l'instruction ci-dessus doit
normalernent nous donner le
nombre "moins 15" en
hexadécimal, comme le montre
l'affichage du DEBUG ci-dessous.
Dans les nombres signés. FFF1
représente le nombre "moins 15"
lin0000 0000OODt + 11110000 0000 1111 00010000 1110 0000 0001 10IUL;
00002-0 2-1 2'2 2"5 0000 1111eu» = 1= 2 = 4 = 8 1"""15
FFF1
Inversion de tous les bits.
on ajoute 1.
Pourtant, l'inverse bitwise (bit à bit)
de ce nombre ne donnera pas 1 5
mais 14 comme nous le montre
l'exécution de l'instruction ci-dessus
dont le résultat se trouve dans
l'affichage ci-dessous-
AX=FFF1 BX=OQDO
DS=34DB ES=Î408
03ZB:01Q6 F7DO
A)t=OOOE BX=0000
DS=3408 ES=34D8
032B:01Q8 050100
Cx=0000 0X^0000 SP=fFE8
SS=34Dfl CS=032B IP=0'106
MOT AX
CX^OOOO DX=0000 St>=FFE8
SS^34D8 CS=032B 1P^0108
ADD AX.0001
BP=0000 SI=0000 Q1=0000
NV UP 01 W NZ AC PO Cï
BP'OOOO SI^0000 D1=0000
NV UP 01 NG NZ AC PO CY
A IA DÉCOUVERTE DU LANGAGE C && C + + 64 / 24. 44. 57. 82. 99 - TOME Vil : Samedi 6 août 1994 12h24pml
Nous devons ajuster le résultat
ci-dessus en ajoutant 1 pour obtenir
ie résultat escompté, comme le
montre l'affichage ci-contre issu de
l'instruction ci-dessus. En ajoutant 1
à ce nombre nous devons donc
retrouver le nombre 1 5d ou FH. .
AX=OOOF BX=OOOO
DS=34D8 ES=34D8
032B:010B CD20
CX=0000 DX=0000 SP^FFES
SS=34D8 CS=032B 1P=010B
1NT 20
BP=0000 S 1=0000 Cl=0000
NV DP 01 PL NZ NA PE MC
C'est la méthode du complément à
deux d'un nombre pour obtenir
l'inverse arithmétique d'un nombre.
Calculons donc l'inverse de 1 :
-a 100
03 'B 0100 mov ax,
032B 0103 dec ax
032B 0104 int 20
032B 0106
r
AX'OOOF BX=0000
DS-34D8 ES=3438
032B:0100 B800ÛO
-t 2
AX=0000 BX=0000
DS^34D8 ES=34D8
032B:0103 48
CX=0000 DX=0000 SP=FFE2
SS-34D8 CS=032S IP=0100
MOV AX.OOOO
CX=0000 DX^OOOO SP-FFE2
SS^34DS CS=032B 1P=0103
DEC AX
BP=0000 S 1=0000 D1=0000
NU UP DI PL NZ NA PE NC
BP=0000 Sl^OOOO Dl-0000
NV UP Dl PL NZ Nfl PE NC
AX-FFFF BX=0000 CX=0000 DX=0000 SP=FFE3 BP=0000 SI=0000 01=0000
DS=34D8 ES=34DS SS-34D8 CS=0328 IP=0104 NV UP DI NG NZ AC PE NC
032B:0!04 CD20 INT 20
Nous voyons que l'inverse de 1 est FFFFH (1111 1111 1111 1111B) pour un registre de 1 6-BITou FFFF FFFFH
(1111 1111 1111 1111 1111 1111 1111 1111B) pour un registre de 32-BIT.
Pour obtenir facilement l'inverse
d'un nombre on peut se servir de
l'instruction NEG :
-a 100
032B 0100 raov ax,
032B 0103 neg ax
032B 0105 int 20
032B 0107
AX=FFFF BX=0000
DS=34D8 ES=34D8
032B:0100 B80FOO
-t 2
Ai(=OOOF BX-0000
GS=34D8 ES-3';D8
032B;0103 F7De
AX=FFf1 BX=0000
DS=34D8 ES=34DS
0328:0105 CD20
CX=0000 DX=0000 SP=FFE2
SS=34D8 CS=032B IP=0100
MOV ,AX,OOOF
CX=0000 DX=0000 SP=FFE2
SS^î4D8 CS=032B IP=0103
NEG AX
CX=0000 DX=0000 SP-FFE2
SS=34G8 CS=032B 1P^0105
INT 20
BP=0000 Sl=0000 DI=0000
NV UP 01 NG NZ AC PE NC
BP=0000 S 1=0000 D1=0000
NV UP DI NG NZ AC PE NC
BP=0000 Sl=0000 Dl=0000
NV UP DI NG NZ AC PO Cï
Nous retrouvons le résultat précédent.
Trouvez ci-dessous quelques conversions de nombres d'une base à une autre. Voyez aussi au chapitre Vfll.
en page 83, un programme <DEC13.ASM) pour convertir des nombres d'une base en une autre :
t. F DANS LES F. MWEfff/VTFS BASESmners calculator ' ' ' '-
' MEX OCTAL B1NARY DECIMAL F 17un15 B[S1 ]
B FE NON SIGNÉ DANS LES DIFFÉRENTES TAILLES DE REGISTRE
Décimal de FE en nombre
non signé 8-Bit :
HEX
OCTAL
B1NARY
DECIMAL
FE
376
11111110
254
Décimal de FFFE en non
signé 16-Bit :
HEX
OCTAL
B1NARY
DECIMAL
FFFE
177776
1111111111111110
65534
! Décimal de FFFF FFFE en non signé 32-Bit
HEX
OCTAL
81NARÏ
DECIMAL
FFFFFFFE
37777777776
111111111111111-11111111111111110
4294967294
c LE /WS GRAND NOMBRE DANS UN REGISTRE
1 L£ POSmF LE PLUS ÉLEVÉ DANS UN REGISTRE &BTr
Nombre positif signé le plus
élevé en 4-bit (quartet ou
quadruptet "nybble") :
Nombre négatif le plus grand en
non-signe en 4-bit (quartet ou
"nybble") :
Nombre positif signé le plus
éievé en 8-bit (octet ou
"byte") ;
HEX
OCTAL
B1NARY
DECIMAL
7
111
[BEL]
HEX
OCTAL
BINARï
DECIMAL
F
17
1111
15 (MAXINT EN 4-BIT) B[SI ]
HEX
OCTAL
BINARÏ
DECIMAL
7F
177
nnm
127
TOUT SUR LES NOMBRES 65 / 24, 44, 57. 82PCBR-SE FAIRE ENCADREUR EN LANGAGE MACHINE
AVANT-l'KOl'OS SDR LUS NOMBRKS
LES NOMBRES
2. LE NÉGATIF LE PLUS ÉLEVÉ EN ABSOLU DANS UN REGISTRE 8-BIT <
Nombre négatif le plus grand en non signé 8-BIT. ;, - .-
HEX FF
OCTAL 377
B1NARY 11111111
DECIMAL 255 tMAXINT EN 8-BIT)
-f:^
3 LE POSmF IfrBTT LE PLUS ELEVE 4. LE NÉGATIF 1&BTT LE PLUS ÉLEVÉ
HEX 7FFF
OCTAL 77777
B1NARY 111111111111111
DECIMAI. 32767
HEX
OCTAL
B1NARY
DECIMAL
FFFF
177777
65535 CMAXINT EN 16-B1T)
5 LE POSTTTF 32Bn- LE PLUS ÉLEVÉ 6 LE NÉGATIF 32-BTT LE PLUS ÉLEVÉ
HEX
OCTAL
B1NARY
DECIMAL
7FTFFFFF
\Î777777777
1111111111111111111111111111111
2I47483647
HEX
OCTAL
B1NARY
DECIMAL
FFFFFFFF
37777777777
4294967295 (MAXIMT EN 32-B1T)
Voila ce qui nous fait entrer dans le chapitre des nombres négatifs.
.LES NOMBRES NÉGATIFS
Ouvrons cette section en nous posant la question :'" Oů se place le signe '-'dans la représentation d'un nombre
négatif dans le registre ou le microprocesseur".
Le microprocesseur peut traiter les nombres aussi bien comme signés que comme non signés ; Vous deve?
vous męme le lui spécifier par l'instruction que vous utilisez. Certaines instructions en effet (comme le MUL
= MULtiply) traitent les nombres comme signés, d'autres instructions (comme le IMUL = Inieger MULtiply)
traitent les nombres comme signés.
Faites les divisions suivantes, DfV et IDIV divisant le nombre 10d contenu
dans le registre AX par un nombre signé négatif F001 qui, considéré comme
signé est négatif, et considéré comme non signé est naturellement positif.
Exécutez ce programme dans le debug.
MOV AX, 10
MOV BX, F001
[OIV BX
MOV AX, 10
MOV BX,
DIV BX
1NT 20
F001
*t"100 : MOV AX, 10
* t ; MOV BX, F001
* t : IDIV BX
Met 10h dans le registre AX
Met F001 dans le registre BX
Divise le nombre signé contenu dans le registre AX par le nombre signé contenu
dans le registre BX, tes deux étant donc considérés comme nombres signés (Integer
Division) et donne ce qui suit:
AX
DX
-PL
-PO
0000
0010
AX contient le quotient de la division;
DX contient le reste de la division;
Flag du signe indique que le résultat est de signe Positif (sup ou égale ŕ 0).
Le flag de parité indique IMPAIRE (ODD = PO) quand le nombre de bits ŕ valeur 1 est
impaire dans le résultat ; il indique PAIRE (EQUAL) quand le nombre de bits = 1 est paire
dans le résultat, dans ce cas le flag de parité devient PE (Signal de panty EQUAL) ;
Le fiag des zéro est resté NZ, donc l'ordinateur considčre le nombre comme étant différent de zéro.
t
t
t
MOV AX, 10
MOV BX, F001
DIV BX
AX = 0000
DX = 0010
-NG
-NA
-NC
Restaure AX ŕ 10h
Restaure BX ŕ P001
Divise le nombre non signé contenu dans le registre AX par ie nombre non signe contenu
dans le registre BX. ies deux étant considérés comme nombres non signés (
Division) et donne ce qui suit:
AX contient le quotient de la division;
DX contient le reste de la division;
(Signal de signe NEGATIF) devient PL (Signal de signe POSITIF); indique donc que le
résultat est un nombre positif;
(Signal de report auxiliaire (Auxiliary Carry) No Auxiliary carry) devient AC (Signal de
report auxiliaire ou Auxiliary Carry); Indique donc littéralement que le résultat n'a pas
provoqué de "report auxiliaire";
(Signai de regort N0 CARRY) devient CY (Signal de répori Carry Yes) ; indique donc que
le résultat a plus de 1 6 bits.
A LA DÉCOUVERTE DU LANGAGE C && C+ + - 66 / 24. 44, 57. 82. 99 TOME VII : Samedi 6 aoűt 1994 (2h24pm)
AVANT-1'KOI'OS SUR I.KS NOMBRKS
LES NOMBRES
2 l£ NÉGATIF LE PLUS ÉLEVÉ EN ABSOLU DANS UN REGISTRE &BTT
Nombre négatif le plus grand en non signé 8-BIT. ;., - '
HEX FF
OCTAL 377
BINARY 11111111
DECIMAL 25S (MAXiHT EN 8-BIT)
3 LE POSmF 1&BTT LE PLUS ELEVE 4 LE NÉGATIF 16OT LE PLUS ÉLEVÉ
HEX 7FFF
OCTAL 77777
BINARY 111111111111111
DECIMAI. 32767
HEX
OCTAL
BINARY
DECIMAL
FFFF
177777
65535 [MAX1NT EN 16-B1T)
s LE POSmF 32Bn- LE PLUS ÉUEVÉ 6 LE NÉGATIF 32-BTT UE PLUS ÉLEVÉ
HEX
OCTAL
BINARÏ
DECIMAL
7FTFFFFF
17777777777
1111111111111111111111111111111
31i7iSS647
HEX
OCTAL
3INARY
DECIMAL
FFFFFFFF
37777777777
4S949672Î5 (MAX 1 NT EN 32-Blt)
Voila ce qui nous fait entrer dans le chapitre des nombres négatifs.
» LES NOMBRES NÉGATIFS
Ouvrons cette section en nous posant la question :'"Où se place le signe '-'dans/a représentation d'un nombre
négatif dans te registre ou le microprocesseur".
Le microprocesseur peut traiter les nombres aussi bien comme signés que comme non signés ; Vous devez
vous même le lui spécifier par l'instruction que vous utilisez. Certaines Instructions en effet (comme le MUL
= MULtipiy) traitent les nombres comme signés, d'autres instructions (comme le IMUL = Inieger MULtiply)
traitent les nombres comme signés.
Faites les divisions suivantes, DIV et IDIV divisant le nombre lOd contenu
dans le registre AX par un nombre signé négatif F001 qui, considéré comme
signé est négatif, et considéré comme non signé est naturellement positif.
Exécutez ce programme dans le debug.
MOV AX, 10
MOV BX, F001
IOIV EX
MOV AX, 10
MOV BX, F001
DIV BX
1NT 20
*t-100 : MOV AX, 10
* t ; MOV BX, F001
* t : IDIV BX
Met 10h dans le registre AX
Met F001 dans le registre BX
Divise le nombre signé contenu dans le registre AX par le nombre signé contenu
dans Se registre BX, tes deux étant donc considérés comme nombres signés Onteger
Division) et donne ce qui suit:
AX
DX
-PL
-PO
0000
0010
AX contient le quotient de la division;
DX contient le reste de la division;
Flag du signe indique que le résultat est de signe Positif (sup ou égale à 0).
Le flag de parité indique IMPAIRE (ODD - PO) quand le nombre de bits à valeur 1 est
impaire dans le résultat ; il indique PAIRE (EQ.UAL) quand le nombre de bits = 1 est paire
dans le résultat, dans ce cas le flag de parité devient PE (Signal de aarJty EQUAL) ;
Le flag des zéro est resté NZ, donc l'ordinateur considère le nombre comme étant différent de zéro.
t
t
t
MOV AX, 10
MOV BX, F001
DIV BX
AX = 0000
DX = 0010
-NG
-NA
-NC
Restaure AX à 10h
Restaure BX à F001
Divise le nombre non signé contenu dans le registre AX par ]e nombre non signé contenu
dans le registre BX. les deux étant considérés comme nombres non signés ( .
Division) et donne ce qui suit:
AX contient le quotient de la division;
DX contient le reste de la division;
(Signal de signe NEGATIF! devient PL (Signal de signe POSITIF); indique donc que le
résultat est un nombre positif;
(Signal de report auxiliaire (Auxiliary Carry) No Auxiliary carry) devient AC (Signal de
report auxiliaire ou Auxiliary Carry); indique donc littéralement que le résultat n'a pas
provoqué de "report auxiliaire";
(Signal de report N0 CARRY) devient CY (Signal de réport Carry Yes) ; indique donc que
le résultai a plus de 1 6 bits.
A LA DÉCOUVERTE DU LANGAGE C && C+ + - 66 / 24. 44. 57, 82. 99 - TOME VII : Samedi 6 août 1994 (2h24pm)
LES NOMBRES
LKS NOMHRKS NKCATIl-S
Quand vous programmez dans l'assembleur, vous déterminez la nature de la multiplication ou de la division
par l'instruction que vous utilisez (MUL ET DIV pour les nombres non signés. IMUL ET IDIV pour les nombres
signés) et vous déterminez la nature du résultat par l'examen des signaux d'état (ou FLAG STATUSI contenus
dans le registre F (ou registre des signaux d'état).
Comment donc est-ce que le microprocesseur se rend compte que le nombre à 16-bits OFFB7H (65'463d) gui
se trouve dans son Registre est un nombre signé, un nombre binaire non signé, un PBCD (Packed BCD = BCD
compacté) ou un UBCD (Unpacked BCD = BCD non compacté),^! non pas le nombre négatif moins 73 (-73) ?
.Le microprocesseur traite tous les nombres de la même façon qu'ils soient signés, non signés ou BCD, C'est
pour cela qu'on ne peut dans la grande majorité de cas pas opérer directement sur deux opérandes Mémoires.
Pour l'ordinateur, quand il s'agit de faire des opérations arithmétiques sur des nombres signés, il considère son
biî le plus extrême à gauche, le hit du plus fort poids, le "Most Significant Bit ou MSB" (le 7è pour une opération
de 8 bits, le 1 5è pour une opération à 1 6 bits, le 31 è pour une opération à 32 bits, etc. les bits étant numérotés
de droite à gauche à partir de 0); Ce bit est appelé bit du signe: quand ce dernier bit à l'extrême gauche est
l, le nombre est considéré négatif; quand ce bit est 0, le nombre est considéré comme positif.
Le bit ie plus à gauche reste le bit du signe m, même dans tes BCD.
1. Le Bit du Signe rappelle deux autres notions, celles du Bit de Parité et du Make/Break Cods, qui occupent la même position
que le Bit ou Signe : \Q i>'t le plus à gauche.
Le Bit cta Parité sert, dans les télécommunications Btdans certains programmes d'application, à vérifier qu'un r.ode (caractère)
est ini.ict. Le princips est de se convenir que chaque code ou caractère doit avoir un nombre gaire ou Impaire de bit rie valeur
. 1. C'est justement ça la PARITÉ. SI le code ou caractère a, sur les 7 bits de droite, un nombre impaire de bit de valeur 1, le
7ème bit len tait le huitième si vous compter à partir de 1 de droite vers la gauche) prendra la valeur 1. Si le code ou caractère
a, sur les 7 bits de droite, un nombre paire de Dit de valeur 1, le 7ème bit len fait le huitième) prendra la valtiur 0. Ainsi, si
chaque fois qu'un test de parité sera effectue, si pour un code ou caractère on trouve un nombre impaire de bit rie valeur
1, on sait qu'il v a eu ERREUR DE STOCKAGE ou DE, TRANSMISSION. La lettre 'A' et la lettre 'B' par exemple oui le code1 ASCII
respectivement 65 et 66, et contiennent un nurnbfe paire de bit de valeur "1 (01000001 et 010000101, tandis que la lettre
'C' d'ASCII 67 contient un nombre impaire de bit de valeur 1 (0100 00111. SI on veut encoder A, B et C en tenant compte
du bit de parité, on va écrire A ^. 01000001d, B =- 01000010d, C = 11000011d, alors qu'en faisant abstraction du bit
d» parité 1100 0011b signifierait 1 95d équivalent au caractère ]-. Faites donc attention quand vous configurez des logiciels
de traitement de texte dans lequel on vous demande de spécifier vous-même s'il faut travailler en encodage 7 ou 8 bits, ou
S'il faut tenir compte du bit de parité ou cas,
Le Maka/Breah Coda est, dans les PCs, le B!T 7 (à partir de 0 à droite] du Scan Code. Le Make/Bwak Code détermine si une
touche a été frappée {MAK£ CODE, BIT 7 = 7) ou si elle a été relâchée [BREAK CODE, BIT 7 = 0}. Voir à ce h\\\f\ le TOIvIE V
de la série À La Découverte du LANGAGE ASSEMBLEUR : TOUT SUR LES UNITÉS DE SAISIE.
Mais. .!. faites gaffe ,1. : Les débogueurs (ou plutôt le processeur) ne tiennent pas compte du BIT-7 pouf statuer .sur la parité
d'un résultat, lis compte eux-mêmes dans te résultat le nombre de bits qui ont la valeur 1.
C:\COMP\OATA>debug
-a 100
279D 0100 mov ah 7ï
£790 0102 add ah 0
-2790 0105 add ah 1
27ÎG 0108 mov ah f3
2790 010A add ah 0
2790 0100 add ah 1
2790 0110 'nt 20
2790 OU?
073 H =
Oonne toujours
Donne 074 H =
OF3H =
Donne toujours
Donne OF4H =
0111 0011 b.
0111 0011 b.
OUI 0100 b.
1111 0011 b.
1111 0011 b.
1111 0100 b.
Pour sauvegarder ce fichier, nous devons lui donner un norn avec la commande 'N'. -M pariiy.scr
Nous devons aussi spécifier (stocker) sa taille licf 12H = 112H - 100H, que l'on peut obtenir avec
la commande Hexamhmétique 'H' qui donne la somme et la différence des deux nombres
nexadécimaux que vous lui présentez) dans le couple BX;CX,
-H 112 100
0212 0012
Voici avec la coiïmande 'R' les valeurs initialas
que nous avons dans les registres BX et CX:
AX=0000 BX^QQOO CX=QOOO DX=0000 SP=FFEE BP=0000 S 1=0000
DI^OOOO
DS-279D ES=2790 35=2790 CS=279D IP=0100 NV UP El PL N2 HA
PO NC
2790:0100 B473 . MOV AH,73
Modifions maintenant avec la commande R REG
les valeurs de BX et de CX,
Comme BX contient dé|â 2éro, nous n'aurons qu'à
ualidfif (avec un <cr>1 la valeur qu'il contient.
-r ex
CX 0000
;12
-r bx
BX 0000
suivre...
TOUT SUR LES NOMBRES
67 / 24, 44, 57. 82PSBR-SE FAIRE ENCADREUR EN LANGAGE MACHINE
Quand le microprocesseur doit faire des opérations arithmétiques non signées, il considère automatiquement
les nombres comme non signés. Les flags ou signaux d'états CARRY, AuXILfARY, et OVERFLOW apportent
l'information nécessaire au programme pour déterminer la valeur exacte dans le système utilisé:
*
w Le flagd'OVERFLOW indique que le résultat dépasse la rangée (ou domaine} du système de numération signée.
» Le flag des CARRY indique qu'un report (carry) hors du plus haut bit a eu lieu.
» Le flag d'AUXILIARY CARRY (AUX) permet au processeur de faire de l'arithmétique sur les BCD, on ne peut
pas l'utiliser directement car on ne peut même pas le tester.
1.1...suite)
Wci donc les nouvelles valeurs des registres, ainsi
que les valeurs initiales des registres des signaux
d'état dont le Ilag des parité (le deuxième à partir
de la droite, qui est Ici initialement PO, ce qui
signifie Parlty Odd, donc impaire), i
-!
AX-0000 B!<=0000 CX=0012 DX=0000 SP: FFEE
D1=0000
. r>S=27f[i ES=£79D SS=379D CS=279D 1P=H100
PO NE
279D;U100 B<i73 MOV AH, 73
BP=0000 Sl-0000
NV UP El PL Nï NA
Exécutons maintenant ce programme pas à pas
(avec des Traces ou "T'}, et voyons commRnt ce
signal d'état (ou flag) va se modifier. La première
instruction qui sefa exécutée est celle pointée rmr
le pointeur d'Instructions'IP, donc à l'adresse
100H. C'est l'instruction d'assignation
"MOVAH, 73".
AX=7300 a^OOOO CX-0012 DX=0000 SP=FFEE BP=0000 S 1=0000
D1=0000
DS=27W ES=,'7ÎD SS=279D CS=279D IP=0102 NV UP El PL HZ MA
PO NC ,
279D:Û102 iiOCiOO ADD AH, 00
Cette instruction ne modifie pas l'état des fiags. Le fia;) vins pari!;'- "ht donc resté ODD |PO). Et dt: toutes le"-; façons le nombre
73H (0111 0011 bl contient un nombre imoaire de hit - 1. Doni. Ir fidc] de parité ne pouv.lit donnur dinî ODD IPOt.
'Continuons notre exécution avec des <-T>, ce qui
va exécuter l'instruction ci-dessus (ÀDD AH, 00'.
Le BIT aes parités (le plus à gauche! est toujours (J
(donc PAIRE ou EVEN = PEl, mais le nambfe de
bit à valeur 1 dans le'résultat est Impaire, Le flag
de parité restera donc PO comme indiqué
ci-dessous.
fl^/SOO BX=0000 Ci('-0012 GX=OQOO SP=FFEE BP=0000 SI =0000 ,
DI^OOQU
DS--27TO FS=?79D SS"279D CS^ï-ÎD- IP=0105 NVUPEIPLNZMA
PO NC
279D-.010') SOC^OI ADD AH,01
En additionnant 1 à la valeur en cours de AH, nous aurons 74H(01 1 1 0100 h) comme l'indique l'irTi'Hyn (If MS DEB'UG ci-dessous.
donc un résultat avec un nombre paire de bits = 1. Li; flag des parités passera à PE iParity Equall pari:R que le nombre de bits
= 1 est PAIRE, mais pas parce que le flag des parités est à 0.
Voyons maintenant ce qui se passe quand le
résultat d'une opération est un nombre dont le bit
le plus à gauche est impaire (11. On va donc loqer
le nombre OF3H (1111 0011 b) dans un registr;.,
le AH, comme t'Indique la prochaine Instruction.
AX=7400 nï(-=OOOD [:X=001Z DX=0000 SP^FFEE BPïOOOO 51*0000
D1=OUOU
DS=279ll r.S-379D SS=279D CS-^?çD IP-0108 NV UP El PL N; NA
PE NC
279D:01i)8 B4F3 MOV AM,F3
t
AX=F300 BX=0000 CX=0012 DX=0000 SP=FFEE BP=0000 Si=0000
D 1=0000
DS=279D ES:Z79D SS=279D CS-2790 IP^OlOA NV UP El PL NZ MA
PE NC
Z79D:010A 80C400 ADD AH,00
Le bit de parité est donr. maintenant 1 (indiquant
donc en principe une parité impaire -- POI, mais
comme le résultat contient un nombre paire de bits
= 1, le flag des parités Indique naturellement
toujours une parité PAIRE (PE],
En effectuant une opération qui donne un résultat
à nombre de bits = 1 paire (on additionnpra par
zéro pour ne pas modifier notre nombre qui
contient déjà un nombre paire de bits = 1 : OF3H
= 1 m 0011 b), le flag de parité restera PE, bien
que le 81T de parité soit impaire (1 ).
AX^FSOO B'(=0000 CX=0012 D)t=0000 SP=FFEE BP=0000 Sl=0000
D1=0000
DS^WD ES=Z79D SS=279D CS=279D ;P=010D MV UP El NG NZ NA
PE NC
279D:010D 80CÛ01 ADD AH,01
Exécutons maintenant l'instruction ci-dessus qui
donnera un résultat à nombre impaire de bits = 1
Le flag de parité redeviendra ODD (impaire = PO),
mais pas parce que le bit de parité est 1 (impairei,
AX=FAOO BK=0000 CX^OOIÎ DX=0000 Sf-FFEË BP=00(10 SI'0000
DI'-OOOO
DS=279D ES=2790 SS-=279D CS=279D IP=0110 NV UP El NG NZ MA
PO NC
?790:U110 CD20 IMT 20
A LA DÉCOUVERTE DU LANGAGE C && C+ + - 68 / 24, 44, 57, 82. 99 - TOME VII : Samndi 6 août 1994 (2h24pml
LES NOMBRES________________________.__ _______LUS NOMBRES NE«;ATiyS
^EXERCICE
Comme maintenant vous semblez avoir tout compris des nombres, décriver brièvement un algorithme permettant
de reconnaître si un nombre est paire ou non (impaire).
m NOMBRES HEXADÉMAUX NÉGATIFS
Passons aux nombres hexadécimaux négatifs.
Faites ceci dans le MS-DEBUG : et vous aurez:
H 2 3 : 0005 FFFF;
Le nombre FFFF (la différence de 2 et 3) qui correspond normalement au décimal non signé 65535 représente
donc le nombre signé négatif moins un (-1) dans le Registre de l'ordinateur à 16 bits. vrai ?
Faites:
H 5 FF?F
et vous aurez:
0004 0006.
FFFF représente donc moins un (-1t.
A AiGORfTHME POUR OBTENIR LE NÉGATIF (L'OPPOSÉ) D'UN NOMBRE SIGNÉ
\\ ne faut pas confondre "l'opposé (le négatif) d'un nombre" et "l'inverse (ie réciproque! d'un nombre".
1 INVERSION DU Brr DU SIGNE (Œ MSB)
Dans un octet, les nombres signés peuvent donc s'étendre
de et de
0000 OOOOb ou, Od ou OFh ,' 1000 QOOOb ou -128d ou 80h
0111 lllfb ou 127d ou 7Fh : I 1111 llllb bu -Td ou Ffh.
La simple inversion du signe donne un nombre de signe opposé, mais pas l'opposé du nombre de départ.
2 L£ COMPLÉMENT À 2
Prenez le nombre binaire 01001000 qui correspond au décimal 73. Pour obtenir son négatif faites :
. MÉHIODE ARTHIMÉnQUE
- inverser chacun de ses bits, les zéros d'"-enant des uns et les uns des zéros; nous obtenons 10110111;
- ajouter à ce dernier binaire le nombre 1. et nous avons 10111000 qui correspond à 184 décimal. Dans un
Registre à 8 bits 73d signé correspond à 184d non signé. . .
La conversion en décimal dans ce cas-ci ne sert pas à quelque chose.
additionnez 01001000 notre nombre de départ
et 10111000 son néaaiif que nous avons calculé
on a 100000000. ce qui correspond en décima! à 512.
Mais ce nombre contient un nombre de bits supérieur à ce que peut contenir un Registre de 8 bits. Le Registre
ne retenant que les 6 premiers bits de droite, il contient le nombre 00000000.
Le "1 " tombe donc et n'est pas pris en considération, TRUCAGE ?! .
Comment avec ce trucage les résultats des calculs faits par l'ordinateur sont pour la plupart de temps corrects 7
Tout simplement pr'rce que le; 1 d'extrême gauche n'est pas Totalement rejeté, mais mis dans un Registre spécial
appelé CARRY FLAG, ou REG^STRË DES REPORTS et il est pris en considérations dans les opérations arithmétiques
ultérieures effectuées dans l'ordinateur.
Vérifiez avec le nombre 1, représenté par 00000001.
Parcourons rapidement les différentes étapes pour trouver son négatif:
00000001 notre nombre 1 de départ
î111in0 ion invor*;"
OOOOOOO! un l^i ajoute 1
11111111 nous obten.Ji ; i;i.- nombre en hexadécimal FFFF.
TOUT SUR LES NOMBRES - 69 / 24. 44. 57, 82pflBR-SE FAIRE ENCADREUR EN LANGAGE MACHINE
b METHODE SCRIPTURALE
Une autre technique consiste à réécrire le nombre en binaire de droite à gauche comme suit: tant qu'on n'a
pas encore rencontré le premier 1, conserver le bit rencontré ; dès qu'on dépasse le premier 1, inverser systématiquement
chaque bit rencontré. Le nombre 00000001 est ainsi appelé COMPLÉMENT À DEUX du nombre 11111111.
c. MÉTHODE EXPONENTIELLE
On peut aussi facilement représenter un nombre négatif dans n bits avec la formule 2" x.
1
^!
|l
s!
9
CALCULE L'OPPOSÉ DE NOMBRES.
FINI LE 11:47am lî-Mai,1994.
/* 1'ROGBAMME NBOPPOSE.C
ECRIT LE 11:41am 19-Mai,1994.
EDITE LE 12:37pni 19-Mai 1994.
PAR DR DIASOLUKA NZOYIFUANGA LUÏALU.
OPHTALMOLOGISTE DIPLOME, INFORMATICIEN AMATEUR. */
lïincliJde "math.h"
fhnclude "stdio.h"
#include "stdlib.h"
10
11
12
13
14
15!
16
nb ,
17[i /* Fin définition vold main(). /
void maint) {
int nh;
putsC'inverse d'un. nombre = 2 ' taille mot - nornbre");
1 for(nb ï 1 ; absÇnb) < abs(Ox6FFF) ; nE *' 13)
pnntfC'L'oppose de X 5.5d est % 5.5d\n", nb, <int)poM(?, loi
C:\COMP\BC\B inverse d'ur IN'nbop nombre 3pOSs ï iî " tai
nombre
L oppose de 00001 est -00001
L L LL L L opposé de opposé de oppose de opposé de opposé de oooosé de 00013 00169 02197 28561 -21933 23855 est est estest est est -00013 -0016Î -02107 -28561 21923 23855
C:\tOMP\B[;\BIN>
B. ETENDUE DES NOMBRES
Pour un Registre de 8 bits...
î. NOMBRES POSmFS SIGNÉS
les nombres positifs signés vont de Od à 127d
OOh ou oooo oooob ou Od
7Fh ou 0111'nilb ou 127d
2 NOMBRES NÉGATIFS SIGNÉS
Les nombres négatifs signés vont de -1d à -128d
80h ou 1000 OOOOb ou -128d
Ffh ou nn'mib ou 1d.
Remarquez que la représentation n'est pas la
même dans la méthode à inversion de signe que
dans la méthode du complément à deux.
1111 IIHb donne -1 en complément de 2, mais
-127 en inversion du bit du signe.
Exercices:
1 °) Trouvez l'opposé (le négatif) du nombre hexadécimal 8000h ou 1000 0000 0000 OOOOb ci-dessus;
2°) Comment expliquer mathématiquement cette situation énigmatique infiniment extrême telle que les deux
opposés soient identiques ?
IV.
LES NOMBRES DÉCIMAUX BINAIRES
Une autre façon de coder les nombres décimaux est la forma de DÉCIMAUX CODÉS BINAIRES (DCB) ou BINARY
CODED DEC'IMALS (BCD); dans cette forme, chaque digit (ou chiffre) décimal occupe en binaire soit un quarte!
ou nybble pour les DCB compactés (PACKED BCD), soit un octet pour les DCB étendus (UNPACKED BCD).
Dans les DCB on ne peut donc pas représenter les équivalents hexadécimaux des diniîs décimaux supérieurs
à 9d (Ah, Bh, Ch, Dh, Eh, Fh ou de 1010b à 11 l.lb) qui sont interdits, en quelque sorte l'on ne retrouve que
des digits décimaux; d'ailleurs la dénomination DECIMAL dit tout.
A. ARmMÉTKÎUE DANS LE BCD
L'arithmétique dans le BCD est basée sur le système décimal. Le processeur utilise 4 bits pour représenter un
seul chiffre (ou digit) décimal. Quand vous faites des multiplications avec le BCD, il faut toujours utiliser le MUL
et jamais le IMUL.
î RACKED ET UNPACKED DÉCIMAUX BINAIRES
Le microprocesseur peut donc représenter les nombres en formai "packed" (compacté : 2 digits par bvte ou
1 digit par nybble) ou "unpacked" ( étendu : un seul digit par byte). Il peut aussi manipuler des chaînes de caractères
d'une longueur allant Jusqu'à 64K alors que dans le système 360 de IBM on ne peut aller que jusqu'à 255 bytes,
(Voyez aussi page(s) 70, 71 pour EBCDlC et ASCII).
À LA DÉCOUVERTE DU LANGAGE C && C+ + 70 / 24, 44, 57.32. 99 TOME Vil : Samedi 6 août 1994 (2h24pml
LES NOMBRKS DÉCIMAUX BINAlKKS
LES NOMBRES
INTEL utilise les mnémoniques suivants:
ASCII BCD pour les Unpacked BCD;
DECIMAL BCD pour les Packed BCD.
.. WCSŒD DECIMAUX BÏNAStES .
Dans les DCB compactés, chaque octet contient 2 chiffres BCD, le chiffre le plus significatif occupant le quartet
sur-prieur. Un octet de PBCD peut donc contenir les nombres décimaux de 00 à 99.
\ UNWCKED DÉOMAUX BINAIRES ^
Dans les DCB étendus, chaque octet contient un seul chiffre BCD, le chiffre occupant le quartet inférieur. Un
octet de UBCD ne peut donc contenir que les nombres décimaux de 0 à 9. Les quatre LITS supérieurs ne peuvent
contenir que des Ô pour les multiplications et les divisions, mais n'importe quel nombre pour les addttions et
les soustractions.
Malgré que la forme UBCD faît perdre apparemment inutilement le quartet de fort poids, elle est utile quand
par exemple on doit travailler avec le CODE ASCII. (Voyez aussi page(s) 70, 71).
B. CONVERSIONBCDEENBCDC
Voici un programme qui vous permet de convenir
un nombre BCD étendu en BCD compacté :
TITLE PROGRAMME CONVERSION DES BCOEEN COMPACTES
SCODE SEGMENT
ASSUME CS: SCOBE
ÛRG 100H
Pour voir les effets de ce programme exécutez-le /
avec le T du DEBUG en observant les vcriations
dans les registres, surtout le registre DX:
c EXEMPLE
START:
CONTIH:
scooe
MOV
MOV
SHL
LOOP
OR
XOR
INT
ENDS
END
DX, 0503H
CX, 6
DH, 1
CDNTIN
OL, DH
DH, DH
son
STAHT
^%:SÏ&^SS::ï:^^S:?^^^
^ '~ '"^WRÈSSÊS"
ÎM^^^^^'i^^^^i^iSÎ:!::^^'*^^^^^^1"^:::^^^^^.^^^^
iQ^pr^p^AMSi.^oiF^fâynëS^ôBM^n^N^
BINAIRE NORMAL
OCTAL --.
DECIMAI- -
HEXADECIMAL
ASCII
-" 0101 0001 bouy
101 q ou o
" 81 d ou l
"- 51-^..,
^. ^-
BCDNC -
(dans un octet)
BCDC --
(dans un quartet)
EBCDIC ----
FDC .
0000 0101 00000001 b
000000000101 0001 b
-NAN n1.
NAN
v. EBCDIC
EBCDIC signifie en anglais Extended Binarv Coded Décimal Interchange Code, une technique de codage qui
permet de stocker les lettres de l'alphabet, les nombres ou les caractères spéciaux dans la mémoire de l'ordinateur
en une série de 8 bits définis comme un byte.
Un caractère représenté dans ce système de codage par un byte adressable est dit de FORMAT DÉCIMAL ZONE
(Zoned Décimal Format des anglo-saxons).
Dans le système de codage EBCDIC chaque bit de l'octet est numéroté de gauche à droite à partir de 0 jusqu'à
7. Cette numérotation des bits permet aussi d'accéder à chaque bit individuellement. On peut ainsi se référer
aux bits 0 à 3 quand on travaille avec le quanet le plus à gauche, ou aux bits 4 à 7 quand on travaille avec
le quartet le plus à droita
pos bit pds bit digit
0 1 2 3 * 5 6 7 0 1 2 3 4 5 & 7
8 /, 1 1 8 4 2 1 8 4 2 1 8il 4li 2 il 1
0 1 0 1 1 0 0 1 1 0 0 P 1
ZONE DIGIT ZONE DIGIT
BÏTE PDS FORT BÏTE PDS FAIBLE
Les quatre bits le plus à gauche du byte (qui
constituent le quartet (ou nybble) super^ur ou les
quatre bits du poids le plus élevé ou les plus
significatifs) représentent la ZONE et les quatre
bits les plus à droite (nybble le moins significatif)
représentent le DIGIT même.
1. NAN = Not A Numbef (pas un nomDrel-
TOUT SUR LES NOMBRES - 71 / 24. 44, 57, S2peOR-SE FAIRE ENCADREUR EN LANGAGE MACHWE
w Par exemple les lettres de l'alphabet A à 1 ont la valeur 1100b (12d) dans la ZONE, et les digits 0001b (1d
pour le A» à 1001b (9d pour le l>. ... ,,. ,
« Les lettres de l'alphabet J à R ont la valeur 1101b (13d) dans la ZONE, et les digits 0001b (1d pour le J)
à 1001b OdpourleR). , .
w Les lettres de l'alphabet S à Z ont la valeur 1110b (14dt dans la ZONE. et les digits 0010b (2d pour te S»
à 1001b (9d pour le Z).
Dans le système de codage EBCDIC donc, le C est représenté par 1100 0011b, le J est rep.ésenté 1101 0001b
et le Z est représenté 1110 1001b.
Voici quelques équivalents EBCDIC par rapport aux
autres représentations:
Ordre de collation entre les deux systèmes ASCII
et EBCDIC:
Graph ique Binaire Hcxa ESC ;OIC ASCII
î 0000 0 1111 0000 48d
0001 1 1111 0001 49d
2 0010 2 nu 0010 50d
5 0011 3 1111 0011 51d
0100 4 1111 0100 52d
5 0101 5 nn 0101 53d
6 0110 6 lin 0110 54d
{' 0111 7 1111 0111 55d
1000 8 1111 1000 56d
9 1001 9 lin 1001 57d
A 1000 000! 61 1100 1001 65d
B 1000 0010 42 1100 0010 66d
h
M mo'om 58 1110" 0111 88d
ï 1110 1000 5° 1110 1000 açd
Z 1110 1001 60 1110 1001 90ct
ASCII
bLfink
. l
EBCDIC
blank
, (point)
OÏ9
?
A-Z
a-z
a-i
*-iE
o-ç
Le système de codage EBCDIC est utilisé dans la plupart des machines IBM, alors que dans les PC on utilise
le système de codage ASCII.
v, LES CARACTÈRES DE COISTTRÔLE DANS LE SYSTÈME ASCII
Les 31 premiers caractères disponibles dans le code ASCII sont des caractères non imprimables aussi appelés
codes de contrôle (car on peut les obtenir en combinant la touche < CtrI > avec une autre touche, le plus souvent
une des lettres de l'alphabet) et sorit utilisés dans les communications ou pour gérer (commanderl opérer Jes
.TTi-t'
imprimantes ou d'autres unités.
^'
Certains de ces codes (comme le Retour-Chariot), ont un rôle fixe. Pour la plupart par contre, on leur attribue
une multitude d'interprétations, au plus grand détriment de compatibilité matérielle. Le caractère d ASCII 127
est aussi considéré comme caractère de contrôle, malgréqu'il ne faut pas appuyer la touche < CtrI > pour l'obtenir.
S CODE ASCII GRAPHE <ctrl> MNÉMO | . ' ,,,,; ' .^^UTIUTÉ
|:DÉC1 HEXA
; 00 00 (NULL) -@ NUL Spacing Character. Caractère d'espacement. Sans signification. peut aussi servir pour des délais, comme le NOP.
: 01 01 © "A SOH Stan Of Heading, Débute la transmission de blochs de données ou un nouueau fichier.
:::::::; 02- 02. 9 72 STX Start Of Text. Marque le début du texte qui suit les données d'entêté.
; 03 '03.j, » "C ETX End Of Text. Peut marquer le début des données de détection ("check-ing") d'arreur.
04 ,04 ; D EOT End Of Transmission. Code "Sign-Off"; dans certains cas marque seulement la fin de fichier.
05 05 -1 * 'E ENQ ENQuiry. Sollicite informations d'état de station éloignée.
06 06 « "F ACK ACKnowledge. Vérifie la réussite de communication entre station».
?:!:fOT:'. 07 -G BELL Bell. Cloche. Sonne la cloche pour attirer l'attanfon.
08 08 D *H BS BackSpace. Effacement arrière.
- 09 09 0 *1 HT Horitontal Tab. Tabiilation Horizontale,
A IA DÉCOUVERTE DU LANGAGE C && C + + - 72 / 24, 44. 57. 82. 99 TOME V» ; Samedi 6 août 1994 (2h24pm)
CODE ASCII GRAPHE <ctrl> MNÉMO ::: UTILITÉ
DÉCI HEXA
10 OA^ B J LF Lin» Faed-Avancem«ni d'une ligna.
11 OB cî -K VT Varticol Tob-Tabulatkin Vertical».
...12^; OC ' 9 'L FF Form Feed, Chargemant d« papier.
'3 00 J' "M CR Carriaga Return. Retour-Chariot. ,
14 0e ^ -N SO Shift Out. Change la jeu (sell d* caractère».
15 0F 0 "0 SI Shfft In. Chano* le Jau ls«t) da caractère».
16 10 ^ 'P OLE Data Link Es cape. Modffie la signification tfas caractires subséquents (comme i'E*cl.
:.,:17., -1Î1^ < "0 DC1 Device Control 1. Utilité cotii"i< XON pour lgnalf «tation iloigni* i tranimttra.
18 12 :.:... t *R DC2 Davic* Control 2. Signal* ON/OFF ("Toggla". * bMoula) d'uaafl* ganéral.
19 ,,^3.;:i.' II 'S DC3 Davlea Control 3. Utilité comma XOPF pour *lflrflT ftton tloJon** 6 rrpa* tfammatHe.
20 14: 1 T DC4 Device Control 4. Signale ON/OFF ("Toggle", è baccule) d'usage général.
::21 : - ''5 :..; S -u NAK Nagativa Acknowledge. Signale un échec de transmission.
22 16 - V SYN SynchhinouB Idia. Utilise ntr« das blocs da données dans !« communications ynchronea.
23 17 t -w TB End Of TransmiaBion Block. : Variante da ETX.
, 24. 18 t "x CAN CANceJ. Signal» d'habitude erreur dans la (ransmission.
25 19 « 'Y EM End of Médium. Signale la fin physique d'una source de donné«s.
^""26 1A,^ -* "z SUB SUBslituf. Remplace las caractifs invalides ou imposBibles ^ fficher-
27 ÏB A ; -1 ESC ESCape, Marqua las caractiras qui suivant oomm* étant un* sequanca da contrôl*.
28 ; 1C . i A/, FS Fila Saparalor. Marque ta limita logiqua anUa fichiws,
29 1D * ' -. *'l GS Group Separator. Marqua la Rmit* logiqua entra groupas de données.
30 1E * AA. RS Record Soparatof. Marqua lanmita logiqu* entra anri)lstrementB de données.
31 1F T A US Unit Separwtor. Marque la (imita logique entre unités de donnéas.
"''. . *" ' .:..... ... .*. ...
127 7F û AUCUN DÊL Dalete. ÉRminB les autres catactèrea.
CARACTÈRES IMPRIMABLES:
32 SP - Space
33 - | point d'Exclamation .
t,
127 OEL - Oetate En fait l'MCIl 127 (Effacement) est un caractère de contrôle.
255 Blw*.
Par ailleurs, si vous voulez avoir le jeu complet des caractères dans le système ASCII, vous avez à votre disposition
le programme ci-dessous. Arrangez-vous pour placer avant chaque caractère le code (nombre) ASCII correspondant:
TOUT SUR LES NOMBRES 73 / 24. 44. 57. SÎTOBfrSE FAIRE ENCADREUfl EM LANGAGE MACHME
TITLE ASCIIDOS.ASM
AFFICHE LES DIFFÉRENTS CARACTERES
DES CODES ASCII AVEC LE DOS
Et le même programme faisant intervenir plutôt le
BIOS que le DOS.
TITLE ASCIIBIO.ASM
SCOOE
SEGMENT
ASSUME CS:SCOOE
, START, OHG 100H
l! ^ S?; g56
,' MOV AH 2
' PRINTLINE:
[T IHT ?1H
Ij PUSH DX .
i MOV DL, ' '
INT 2lft ,
POP OX
INC ÛL
ft- . LOOP PRINTLINE
^" 1*" 20H
QiCURSEû ENDS
,.EHD STABT
AFFICHE LES DIFFÉRENTS CARACTERES
DES CODES ASCII VIA LE BIOS
SCOOE
SEGMENT
ASSUME CS:SCODE
ORG 100H
STAHT;
MOV CX, 355
"0V AH, OEH
PRINTLINE:
PUSH C^
HOV AI:, 255
SUB AL CL
MOV CX; 1
INT. 10H
MOV AL, ' '
INT lOfi
POP CX
LQOP PRINTLINE
INT 20H
a)CURSEG ENDS
ENÛ START
vyŒFCD
FSrmat Décimal Compacté (PACKED DECIMAL FORM des anglo-saxons). Dans cette forme, qui rappelle le Packed
Binary Décimal, deux digits décimaux sont stockés dans un seul byie, les bits 4 à 7 du bytu du poids le plus
faible ("bits 4-7 of thé low-order byte", ou byte le moins significatif, ou byte le plus à droite».
Par exemple le nombre positif suivant (598H} représenté dans le FORMAT DÉCIMAL ZONE (EBCDIC) en trois
octets (la portion ZONE du byte de chaque nombre est remplie de 1) :
positions du bit
poids du bit
digit
0 1 2 3 4 5 6 7 0 1 2 3 4 6 7 0 1 2 3 4 5 6 7
8 4 2 1 5 4 2 1 8 4 2 1 8 4 2 1 & i. Z 1 8 4 2 1
1 1 1 1 0 1 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0
ZONE D1G1T ZONE U1G1T ZONE D1G1T
BYTE POS + FORT BÏTE PDS MOYEN ^ÏTE PDS - FORT
Pour les nombres signés les quatre
bits les plus à droite (0 à 3) du byte
le plus à droite représentent le signe.
Pour les nombres positifs, ta portion
ZONE du byte est remplie de 1. Les
nombres dans le système de codage
EBCDIC ont donc un poids plus élevé
que les lettres; dans le système
ASCII les nombres viennent avant les
lettres dans la collation.
Le nombre ci-dessus est converti en FORMAT DÉCIMAL COMPACTÉ 1 6-bit comme suit, les 4 bits du hyte le
moins significatif représentant le signe positif pour le nombre contenu dans les 3 autres quanets qui le pœcôdf.-nt,
positions du bit
poids du bit
digit
tl«Mt«
0 1 2 3 4 5 6 7 0 1 2 i 4 5 6 7
8 A 2 1 8 4 2 1 8 4 2 1 8 4 2 1
0 1 0 1 1 0 0 1 1 0 0 0 1i ^ 1
ZONE D1G1T ZONE D1G1T
BÏTE POS + FORT BÏTE PDS - FORT
En FORMAT DÉCIMAL COMPACTÉ, pour les
nombres signés, les quatre bits ies plus à drojfe (0
à 3) du bvîe le plus à droite représentent IR Kiqrie.
Pour les nombres positifs, la puriion ZONE du byte
est remplie de 1. Les nombres dans le système de
codage EBCDIC ont donc un poids plus élevé que
les lettres; dans le système ASCII les nombrc's
viennent avant les lettres dans la collation.
vin AVANTAGE&DES BCD
IDANS DES APPLICATIONS t/0
IDANS LES ERREURS D'ARRONBI
Dans les applications du CHIP cfr I/O, seule cette représentation est commode,
Dans les calculs à virgule flottante, il y a souvent des erreurs d'arrondi
entraînant parfois de faux résultats au niveau du dernier chiffre décimal
conduisant au problème bien connu dans les milieux financiers des "centimes
manquants" ( missing pennies").
1. La numération basée sur le poids des digits en fonction de la position qu'ils occupent dans le nombre est appelé NUMÉRATION
DEPOSITION. C'est la méthode avec les chrffres arabes. La numération utilisée par IBS romains et les grens est appelf^' NUMÉRATION
ALPHABÉTIQUE.
2. Les ERREURS D'ARRONDI sont aussi appelées ERREURS DE TRONCATURE.
A LA DÉCOUVERTE DU LANGAGE C && C + + - 74 / 24, 44, 57. 82, 99 TOME VU : Samedi 6 août 1994 (2h24pm)
ÏINSTRUCTIONS D'AJUSTAGE ASCII Dans les instructions d'ajustage ASCII (AAA, AAM, AAD, AASt utiles
pour convertir les nombres d'une base à une autre.
ÏCOPROCESSEUR MATHEMATIQUE Lescoprocesseursmathémàtiquesutilisent convenablement bien les BCD.
XDEVELOPPEMENT DE COMPILATEURS LÈS instructions BCD sont aussi utilisées pour développer des compilateurs,
des librairies de fonctions, et autres outils des systèmes.
IX
TRANSFORMATION DE NOMBRES D'UNE BASE À UNE AUTRE
11 y a plusieurs bases (ou systèmes) de numération : les bases binaire, octal, décimal, hexadécimal, BCDC (Décimal
Code Binaire Compacté), BCDNC (Décimal Codé Binaire Non Compacté ou Etendu), ASCII, EBCDIC, etc.
Voici quelques équivalences d'une base de numérotation à l'autre :
:; Décimal Binaire t8 biïs} .:':. Hexadécimal 'Octal BCDC BCDE ASCII :.
0 0000 0000 0 0 0000 0000 0000 0000 NULL
!.. "1 ' 0000 0001 1 1 0000 0001 0000 0001 ©
- 2 00.00 Q010 2 2 00000010 00000010 ®
3 0000 0011 - 3 3 0000 0011 0000 0011 »
4 0000 0100 4 4 00000100 00000100 «
5 00000101 5 5 00000101 00000101 *
6 00000110 G 6 00000110 0000 0110 *
: '7.'" 0000 0111 7 7 00000111 00000111 BEEP
8 0000 1000 8 10 0000 1000 0000 1000 . DLT
9 0000 1001 9- 11 0000 100-1 0000 1001 0
10 0000 1010 A 12 . 0001 0000 N.A. BLF
11 0000 1011 B 13 0001 0001 IM.A. rf
12 0000 1100 C 14 0001 0010 N.A. î
-/:.. .13- ' 0000 1101 D 15 0001 0011 N.A. J- CR
14 0000 nio, E 16 0001 0100 N.A. H
15 0000 1111 F 17 0001 0101 N.A. 0
16 0001 0000 10 20 0001 0110 N.A. ¥
x REPRÉSENTATION DES NOMBRES DANS LEURS BASES
En asscr"';;';;v.' on spécifie ia hase du système de numération avec un suffixe comme suit :
T'
r- . . - . , ., . . rABll^l&ES BASES DENOMBRES ':'. .: .. .: ...... =
BASE SUFFIXE ÉTENDU OU D1GITS VALABLES
Binaire"' 2 Y ou B 0 1
Octale^ 8 0 ou 0 01 234567
r^-imal':'13' 10 T ou D 0123456789
Hexadécimals"1' . 16 H 0123456789ABCDEF
Nombres Réels R 0123456789.E+-
1. Les nombres BINAIRES sont représentés en assembleur avec le suffixe B ou Y, :
2. les nombres en base OCTALE sont représentés en assembleur avec le suffixe Q ou 0. ' :
3. Les nombres de la ba'io DECIMALE peuvent avoir en assembleur le suffixe T ou D (le défaut quand non spécifié),
4. Les nombres H£XADÉCI^-W)( doivent commencer en assembleur par un chiffra (digiti entre Od et 9d ; De ce fait, Ffh est considéré
par l'a^'n.'cibifiij.' comi,.. .". '.-.h].'li ...iWs i\w OFFh est con&id^'é comma l'équivalent hexadécimal -1 signé ou 255 non signé.
ils peuvent emprunter lys digits A à F de l'alphabet, mais dans lequel cas le nombre hexadécimal doit être représenté avec
un préfixe 0, et aussi de préférence un suffixe H,
TOUT SUR LES NOMBRES 75 / 24. 44. 57. 82P69R SE FAME fflCADftEUR EN LANGAGE MACHINE
A l£S NOMBRES HEXADÉCIMALIX
Les nombres hexadécimaux servent à transposer facilement et lisiblement les nombres binaires car chaque digit
hexadécimal (nybble) représente 4 digits binaires (on hits). De ce fait, ils sont commodément utilisés pour numéroter
les cellules ou adresses (numérotation des segments et offsets) dans la mémoire, lire le contenu de ces adresses
et des registres, etc.
Par exemple l'instruction d'appel à l'INT est exécutée avec un byte d'instruction, ou code 8-bjt (CD> ; ce qui
serait en binaire 1100 1101 b.
Comment transformer 1 250d en Hexa 7
Comment transformer 1250h en Déci ?
On se sert de la technique de division par ta base et la retenue des restes comme suit:
Pour convertir 1 250d en Hexa, on procède comme suit ;
1250d / 16d = 78 (teste 0.125 ; 0.125 x 16 2(t - 2h-
1
78d / 16d = 4 R»ste 0.875 ; 0.875 x 16 " Ud Eh-
4d / 16d * 0 Reste 4.000 ; 4.000 * 16 4d - ih-
"1
Pour convertir donc 1 250h en Déci, on
procède comme suit;
1250h / Ah " 1D4h Resta 8fi
1Dûh / Ah = 2Eh Heste 8h - 8ct-i
2Eh /Ah - 4h RMte
ith / Ah - " Oh Rest»
6h, - 6^i
tft
Cette division étant par Ah 10d, le reste est toujours identique dans les deux bases f 10 et 1 6). Si la conversion
se fait vers la base hexacédimale, le reste dort être exprimé en hexadécimale (un reste de 1 2d - > OCH).
On peut aussi utiliser les instructions des BCD pour faire la conversion de nombres d'une base à l'autre, par
exemple le programme suivant qui convertit un nombre binaire à 8 bits en un hexadécimal, et l'affiche à l'écran.
TITLE PROGRAMME COMVBASE-ASM
CODE SEGMENT
ASSUME CS:COOE, DS:COOE
START;
35 H ,- 53D
; AJUSTE AU BCO 0503H
AX
3030H
DL
AL,
MOV
AAM
MOV DK
AOO DX
XCHG DM
MOV AH
1NT
INT
HOV
INT
CODE
END
2ÏH
20H
AH,
21H
EMDS
START
4CH
Pour bien voir les effets de ce programme, il faut
l'exécuter avec le T du DEBUG. Rappelez-vous que
dans les registres tous les nombres sont stockés
en binaires (ou hexadécimal). Sachez aussi que
dans les registres les nombres sont stockés tels
que nous les lisons (high bvte avant ou dans le
RH, et low bvte après ou dans le RL),
contrairement à la mémoire où les nombres sont
stockés low byte avant et high byte après (voir
pageist 81).
Essayez aussi un programme en remplaçant l'instruction des BCD AAM par les autres instructions BCD AAA,
AAS, AAM, AAD. DAA, DAS, etc et vous verrez qu'elles ne donnent pas toutes les mêmes résultats.
s. l£S WJJÎES I^SrVÎUCTIONS DES BCD
C:\UP51\D ATA>debu g essai.co ffl
-u
9210;0100 B828QO HOV AK,00?8
9210;0103 BB3500 MOV 8X ,0035
9210:0106 0108 AOD AX, ,BX
9210:0108 27 DAA
ÏZ10;0109 B82800 MOV AX, ,0028
9210!01 OC 0108 ADD AX, ,BX
9Z1D:010E 37 AAA
921Dî010F B82800 MOV AX, ,0028
921D:0112 0108 ADD AXHfl, ,BX
921D;01U 2F DAS
921D:0115 B82800 MOV AX, ,0028
921D;0118 0108 ADD AX, BX
921D;011A 3F AAS
931D;011B B82800 MOV AX, ,0028
921D:011E 0108 ADD AX; ,BX
921D:0120 OlOA AAM
9210:0132 B82800 MQV AX, ,0028
9210:0125 0108 ADD AX. .BX
9210:0127 D50A AAD
9210:0129 CD20 INT 20
"r
AX=0000 8X^0000 cx=ooaa DX=0000 SP=OE2E
DS=9Z1D ES=9210 SS=921D CS=921D 1P=0100
9210:0100 682800 MOV AX,0028
A5=0028 BX=0000 CX=002B OX=0000 SP=OE2E
05=9210 ES=921D SS=921D CS=9210 IpiOlOî
921Dî0103 BB3500 MOV BX,0035
BP=0000 S 1=0000 D1=0000
NV UP El PL NZ NA PO HC
BP=0000 Sl=0000 01=0000
NV UP El PL NZ NA PO NC
A LA DÉCOUVERTE DU LANGAGE C && C+ + - 76 / 24, 44. 57. 82, 99 TOME VII : Samedi 6 aoQt 1994 f2h24pm)
IŒPRKSKNTAT10N ttVS NOMBRES DANS LEURS BASKS
LES NOMBRES
AX=OOZ3 BX'OOiS CX=002B DX^OOOO SP=DE2E
OS=921D ESï921D SS=921D CS^931D IP=0106
?21C:01G6 01D8 ADD AX, BX
AX-0050 BX^0035 CX=003B 0X^0000 SP-'DE2E
CS-Î210 ES=Î21D SS=921D CS^921D IP"0108
WO:0'\OE 27 DAA
AX=0063 BX=OQ35 CX=002B DX=0000 SP=DE2E
DS-921D ES=921D SS-921D CS=?21D IP=0109
9210:0109 B82SOO MOV AX, 0028
AX=002S BX=0035 CX=002B DX=0000 SP=DE2E
OS=921D ES='î21D SS=921G CS=921D IP=010C
921D:010C 01G8 ADD AX, BX
AX-005D BX-0035 CX=002B DX=0000 SP=DE2E
OS=9210 ES=921D SS=921D I:S=921D IP-010E
921D:010E 37 AAA
AÎM103 BX^0035 CX=002B DX=0000 SP=DE2E
DS=921D ES'9210 SS=921D CS=Î21D IP^OlOf
921D:010F B82800 MOU AX, 0028
A?=0028 BX=OOi5 CX=002B OX=0000 SP=DE2E
DS=ÎZ1D ES=921D SS=921D CS=921D 1P=0112
9210:0112 01D8 ADD AX, BX
A^OOSD BX=0035 CX=002B DX=0000 SP=DE2E
OS.=921D ES=9210 SS=9210 CS=921D IP=0114
9210:0114 2F OAS
AX=0057 BX-0035 CX-002B DX=0000 SP=OE2E
DS-9210 ES=921D SS=921D CS=9210 IP=0115
9Z1D:0115 B82800 MOV AX, 0028
AX=0028 BX=0035 CX=OOZB DX-0000 SP^DESE
DS^921D ES=921D SS=921D CS=921D ]P=0118
9210:0118 01DS ADD AX, BX
AX=005D BX=0035 CX=002B DX=0000 SP=CE2E
DS-Î21D ES=921D SS=9Z10 CS=921D [P-011A
921D:011A iF AAS
AX^FF07 BX=0035 CX=002B DX=0000 SP=OE2E
OS^9210 ES^921D SS=921D CS-921D 1P=011B
921D:011B BB2800 MOV AX i ,0028
Ax=0028 BX-OG35 CX=002B DX=0000 SP=DE2E
OS-921D ES=921D SS=921D CS=Ï21D IP^OIIE
?21D:011E 01D8 ADD AX, ,BX
AX^OOSD BX=0035 CXïQOïB DXîOOOO SP=DEZE
DS^921D ES=921D SS=921D CS=9i'lD 1P=01ZO
9210:0120 D40^ AAM
AX=0903 B>!=0035 CX^002B DX=0000 SP-DE2E
DS=921D ES=921D SS=Î21D CS=921D IP=0122
?21D:0122 B82800 MOV AX.002B
tS-0028 BX=0035 CX=002B DX=0000 SP=DÉ2E
DS^9210 ES-Î21D SS=921D CS-9211J IP=0125
921D:0125 01D8 ADD AX,BX
Aë-005D BX=0035 CX=002B DX=OOQO SP=DE2E
DS=921D ES-921D SS=9Z1D CS=9210 IP=01Z7
9210:0127 D50fl AAD
AX=005D BX=0035 CX=002B DX=0000 SP=DEZE
DS=9Z1D ES=921D SS-921D CS=921D 1P-0129
9210:0129 CD20 INT 20
BP=0000 SI^OOOO 01=0000
NV UP El PL NZ NA PO NC
'BP=0000 Sl=0000 01=0000
NV UP El PL NZ NA PO NC
BP-0000 Si-0000 Dl=0000
NV UP El PL NZ AC PE NC
BP=0000 Sl=0000 DI=0000
NV UP El PL HZ AC PE NC
BP=0000 S 1=0000 D1-0000
NV UP El PL NZ NA PO NC
BP=0000 Sl=0000 DI=0000.
NV UP El PL NZ AC PE CY
BP'OOQO SI^OOOO DI=QOOO
NV UP El PL NZ AC PE CY
BP-0000 SI=0000 Dl=0000
HV UP El PL NZ HA PO NC
BP^OOOO SI=0000 DI=0000
NV UP El PL N; AC PO NC
8P=0000 SI=0000 DI=0000
NV UP El PL HZ AC PO NC.
BP^OOOO SI=0000 01=0000
NV UP El PL NZ NA PO NC
BP-0000 51^3000 DI=0000
NV UP El PL NZ AC PO Cl
BP=COOO SI=0000 Dl=0000
NV UP El PL NZ AC PO CY
BP=0000 SI=0000 Dl-0000
NV UP El PL NZ NA PO NC
BP'OOOO Sl=0000 01=0000
NV UP El PL NZ NA PE NC
BP=0000 SI=0000 DI=0000
NV UP E! PL NZ NA PE NC
BP'OOOO Sl'OOOO Dl=0000
NV UP El PL NZ NA PO NC
BP'OOOO SI=0000 DI=0000
NV UP El PL N2 NA PO NC
Chaque instruction d'ajustage est donc appropriée pour l'instruction arithmétique à laquelle elle est associée.
1 DANS LES BCD ÉTHMDUS
1
CARRY FlAG ((CF) le signai de reports) et AUXIL1ARY CARRY FLAG l(AUX) le signa! de reports auxiliaires)
se mettent à 1 si le nombre dans AL doit prêter/emprunter à/de AH.
2 DAIS-S LES BCD COMTOCTES
Avec tes BCD compactés l'instruction d'ajustage décimal n'affecte Jamais AH. .
AUXIL1ARY CARRY FLAG «AUX» le signal de reports auxiliaires) se met à 1 si le nombre dans LES QUATRE
BITS LES PLUS FAIBLES (le quartet du faible poids) doit prêter/emprunter au/du quartet de poids le plus élevé.
CARRY FLAG (|CF) le signal de répons) se met à 1 si le nombre dans LES QUATRE BITS LES PLUS SIGNIFICATIFS
(le quartet du poids le plus élevé) doit prêter/emprunter au/d'un autre byte.
XI
FORMATS D'ENCODAGE DES NOMBRES REELS
II y a essentiellement trois formats d'encodage des nombres réels.
Les anciennes versions de fvlASM utilisaient le format d'encodage binaire de Microsoft que l'on peut activer
dans MASM 5.0+ > par la directive .MSFLOAT. La directive .MSTLOAT perturbe le stockage dans la mémoire
des nombres en provenance du coprocesseur mathématique. .MSFLOAT désactive aussi les inctructions du
TOUT SUR LES NOMBRES 77 / 24. 44. 57. 82P8BR-SE FAIRE ENCADREUR EN LANGAGE MACHINE
coprocesseur.
MASM 5.0+ > ainsi que les autres langages de Microsoft (C, FORTRAN, Pascal) ainsi que le Coprocesseur
mathématique utilisent le format d'encodage binaire IEEE. Le MS-CodeView ne peut afficher que les nombres
en format IEEE.
Le format temporaire 10 byles est surtout et l'unique utilisé par le coprocesseur.
A FORMAT CEE
Permet d'encoder les nombres réels de 4 byies (short real) et 8 bytes (long real):
i. RÉELS COURTS: 4 BYTES
».MANIJSSE
Bits 0 à 22
b.EXPONENT
Bits 23 à 31
c. SIGNE
Bit 31 ,
2 RÉELS LONGS: 8 BYTES
«.AWV7ÎSSE
Bits 0 à 51
bEXPONENT
Bits 52 à 62
c. SIGNE
Bit 63
A. NUMÉRO SPÉCIAL (DR DIASOUJKA)
AFRIQUE MEDICALE, 22e année. ^211 Juin-iiiillet 1983. pp 323-359. . .
11 à 20 : NUMÉRO SPÉCIAL (DR DIASOLUKA Nu. Luy.ilu) - - ^
I- rORTHOPISATION DANS LA MYOPIE DIASOLUKA Nz. Luyalu : pp. 323-328;
2. Des INJECTIONS SOUS-CONJONCT1VALES BULBAIRES DIASOLUKA Nz. Liiyalu ; pp. 331-332;
3. MYOPIE DÉGÉNÉRATIVE ET AGE D'APPARITION DIASOLUKA Nz- Luyalu ; pp. 333-335: ''
4. l'ENVERGURE DE LA MYOPIE DÉGÉNÉRATIVE DIASOLUKA Nz. Luyalu : pp. 337-338;
5. LA RIGIDITÉ SCLÉRALE DANS LA MYOPIE DIASOLUKA Nz. Liiyalu : pp. 343-345;
6. L'IMPÉDANCE DE LA MYOPIE DIASOLUKA Nz- Luyaki : pp. 347-348:
7. LA BIO-MATHÉMATIQUE DE L'ÂGE DANS LA MYOPIE DÎASOLUKA Nz. Luyalu : pp. 349-351;
8. POINT DE VUE - CRYPTOCRITERES D'ÉVALUATION D'UN MÉDICAMENT DIASOLUKA Nz. Luyain : pp, 351
9. Le MOMENT STATISTIQUE DIASOLUKA Nï. Luyalu : pp. 357; ^
10. La PENTE DE PROBABILITÉ DIASOLUKA Nz. Luyalu : pp. 358-359;
J
11. LE DEGRÉ DE PRESBYTIE DIASOLUKA Nz. Luyalu : pp. 645 - 646;
12. l'AGE ET LA MYOPIE DIASOLUKA Nz. Luyalu : pp. 649-654; ' .,
À LA DÉCOUVERTE DU LANGAGE C && C++- 78/24.44,57,82,99 - TOME VII : Samedi G aoûl 1994 (2h24pml
Bienvenu sur http://www.geocities.com/annudias
« http://www.geocities.com/annudias/annudias.html »
________________________________________
BIOGRAPHIES
Ma-Ngudi Bio
Dias-WBM
Diasoluyalu
diasoluyalu
ophtdiasoluyalu
INFORMATIQUE
E-Mail Gratuit
affichedisque
aleat15arr
aleat15cal
aleat15cal
aleatc0a15
aleatc0a15
aleatu0a15
APL
genmailaddresses
implicinfoviequot
votre commentaire -
Par diasmath le 5 Février 2007 à 12:37
Les statistiques sont très utiles dans l'évaluation des résultats et dans certaines prédictions. Toutefois, il faut prendre avec beaucoup de prudences ses résultats, faute de sombrer dans des considérations périlleurses.
Par ailleurs, aucun moteur de recherche n'est susceptible de retrouver juste le site dont on peut vraiment avoir besoin. C'est ça qui fait la force des annuaires <catégorisés>. Bien entendu, un site est un très bon moyen pour obtenir les coordonnées nécessaires à une correspondance. Le lien au LinkWare (annuaire < catégorisé >) en "libre Donnation" (Donationware) facilite à retrouver et/ou accéder à presque tous les sites utiles.Shiut... D'abord une question saugrenue. Quand on coupe un arbre, ressent-il de la douleur? Vous pouvez répondre en justifiant votre réponse.
Une information: Savez-vous que la taille de la terre est pratiquement l'inverse de celle d'une cellule de plante ?
Terre = 12.76 x 10+6 = 12'760'000 mètres de diam (12,76 millions mètres)
Cellule de Plante = 12.76 x 10-6 = 0.00001276 mètres de diam (12,76 millionième de mètre)Ouvrons maintenant notre sujet.
Dans un Service d'Ophtalmologie que j'ai dirigé pendant 8 mois, de février 1980 à novembre 1980, le tout premier malade reçu souffrait d'un Ulcer de Mooren.
Pendant toute la première semaine, il n'y eu que ce seul malade, et ce fut l'unique cas sur les quelques 3000 malades reçus dans ce service.
Voici ce que donne les statistiques pour la prévalence de cet Ulcer de Mooren :Jusqu'à
Prévalence apparente 1 malade
100,00%
2 malades
50,00%
3 malades
33,33%
4 malades
25,00%
5 malades
20,00%
10 malades
10,00%
100 malades
1,00%
100 malades
1,00%
1000 malades
0,10%
2000 malades
0,05%
3000 malades
0,03%
Bref, dans une même institution hospitalière, les statistiques pour la même affection ont donc varié de 100,00% à 0,03% en huit mois, et on aurait peut-être continué au même rythme, puisque depuis lors jusqu'à aujourd'hui 23 juin 2005 je n'en ai plus reçu.
Par inadvertance, on aurait conclu que la maladie est saisonnière ou qu'elle est favorisée par certains facteurs qui se manifesteraient à la période où le malade s'est présenté et qui influeraient sur sa prévalence, ou peut-être que cette affection est en voie de disparition/éradication. Mais ce cas vraiment évident nous montre qu'il n'en est rien.
Par ailleurs, quand on dit qu'une probabilité est de X%, cela ne veut pas dire qu'absolument X fois sur 100 l'événement doit se produire, même quand X vaut 100. Il y a TOUJOURS un peu plus que 100-x pct de chances pour que l'événement ne survienne pas.
Par réciprocité, quand on dit que la probabilité de l'inverse (ou complément) d'un événement est de (100-X)%, il y a plus de X% de chance qu'il se manifeste. Il y a donc nécessairement une zone [de confusion] qui recouvre dans la réalité la probabilité d'un événement et son inverse, faisant en fait que la somme des probabilités est plus de 100%.
C'est ce que j'appelle les aléas statistiques.
Quand on vous dit que telle circonstance est à 99.99% sûre, vous pouvez bien être parmi ceux qui constituent la probabilité inverse de 0,01% d'insécurité. Alors pour vous, la mort est survenue de façon certaine à 100% de cas, peu importe la grande probabilité globale des 99,99%.
Comme quoi, tout est relatif.
On revient toujours à la loi de la relativité,
pour dire que rien n'est absolu, tout est relatif.
votre commentaire -
Par diasmath le 25 Janvier 2007 à 22:59Revenez bientôt pour passer vos bons moments méditationnels.
Merci.
1 commentaire
Suivre le flux RSS des articles de cette rubrique
Suivre le flux RSS des commentaires de cette rubrique